Generic interfaces to write fields to netcdf files for CLM
USES:
use shr_kind_mod , only : r8 => shr_kind_r8, i8=>shr_kind_i8, shr_kind_cl use spmdMod , only : masterproc, mpicom, iam, npes, & MPI_REAL8, MPI_INTEGER, MPI_LOGICAL use clmtype , only : gratm, grlnd, nameg, namel, namec, namep, allrof use clm_varcon , only : spval,ispval use clm_varctl , only : single_column, iulog use shr_sys_mod , only : shr_sys_flush use shr_file_mod , only : shr_file_getunit, shr_file_freeunit use shr_string_mod , only : shr_string_toUpper use abortutils , only : endrun use decompMod , only : get_clmlevel_gsize,get_clmlevel_gsmap use perf_mod , only : t_startf, t_stopf use fileutils , only : getavu, relavu use clm_mct_mod use pioPUBLIC TYPES:
implicit none privatePUBLIC MEMBER FUNCTIONS:
public :: check_var ! determine if variable is on netcdf file public :: check_dim ! validity check on dimension public :: ncd_pio_openfile ! open a file public :: ncd_pio_createfile ! create a new file public :: ncd_pio_closefile ! close a file public :: ncd_pio_init ! called from clm_comp public :: ncd_enddef ! end define mode public :: ncd_putatt ! put attribute public :: ncd_defdim ! define dimension public :: ncd_inqdid ! inquire dimension id public :: ncd_inqdname ! inquire dimension name public :: ncd_inqdlen ! inquire dimension length public :: ncd_defvar ! define variables public :: ncd_inqvid ! inquire variable id public :: ncd_inqvname ! inquire variable name public :: ncd_inqvdims ! inquire variable ndims public :: ncd_inqvdids ! inquire variable dimids public :: ncd_io ! write local data integer,parameter,public :: ncd_int = pio_int integer,parameter,public :: ncd_log =-pio_int integer,parameter,public :: ncd_float = pio_real integer,parameter,public :: ncd_double = pio_double integer,parameter,public :: ncd_char = pio_char integer,parameter,public :: ncd_global = pio_global integer,parameter,public :: ncd_write = pio_write integer,parameter,public :: ncd_nowrite = pio_nowrite integer,parameter,public :: ncd_clobber = pio_clobber integer,parameter,public :: ncd_noclobber = pio_noclobber integer,parameter,public :: ncd_nofill = pio_nofill integer,parameter,public :: ncd_unlimited = pio_unlimited ! PIO types needed for ncdio_pio interface calls public file_desc_t public var_desc_tREVISION HISTORY:
PRIVATE MEMBER FUNCTIONS:
interface ncd_putatt module procedure ncd_putatt_int module procedure ncd_putatt_real module procedure ncd_putatt_char end interface interface ncd_defvar module procedure ncd_defvar_bynf module procedure ncd_defvar_bygrid end interface interface ncd_io module procedure ncd_io_log_var0_nf module procedure ncd_io_int_var0_nf module procedure ncd_io_real_var0_nf module procedure ncd_io_int_var1_nf module procedure ncd_io_log_var1_nf module procedure ncd_io_real_var1_nf module procedure ncd_io_char_var1_nf module procedure ncd_io_int_var2_nf module procedure ncd_io_real_var2_nf module procedure ncd_io_char_var2_nf module procedure ncd_io_char_var3_nf module procedure ncd_io_char_varn_strt_nf module procedure ncd_io_int_var1 module procedure ncd_io_log_var1 module procedure ncd_io_real_var1 module procedure ncd_io_int_var2 module procedure ncd_io_real_var2 module procedure ncd_io_int_var3 module procedure ncd_io_real_var3 module procedure ncd_io_real_var3_nf end interface private :: ncd_inqiodesc ! inquire variable descriptor private :: ncd_getiodesc ! obtain iodesc private :: scam_field_offsets ! get offset to proper lat/lon gridcell for SCAM integer,parameter,private :: debug = 0 ! local debug level integer , parameter , public :: max_string_len = 256 ! length of strings real(r8), parameter , public :: fillvalue = 1.e36_r8 ! fill value for netcdf fields integer, private :: io_type type(iosystem_desc_t), pointer, public :: pio_subsystem type iodesc_plus_type character(len=32) :: name type(IO_desc_t) :: iodesc integer :: type integer :: ndims integer :: dims(4) end type iodesc_plus_type integer,parameter ,private :: max_iodesc = 100 integer ,private :: num_iodesc = 0 type(iodesc_plus_type) ,private, target :: iodesc_list(max_iodesc)