Generic interfaces to write fields to netcdf files
USES:
use shr_kind_mod , only : r8 => shr_kind_r8 use spmdMod , only : masterproc, mpicom, MPI_REAL8, MPI_INTEGER, & MPI_LOGICAL use clmtype , only : gratm, grlnd, nameg, namel, namec, namep, allrof use clm_varcon , only : spval,ispval use shr_sys_mod , only : shr_sys_flush use abortutils , only : endrun use clm_varctl , only : single_column use clm_varctl , only : iulog use clm_varctl , only : ncd_lowmem2d, ncd_pio_def use clm_varctl , only : ncd_pio_UseRearranger, ncd_pio_useBoxRearr use clm_varctl , only : ncd_pio_SerialCDF, ncd_pio_IODOF_rootonly use clm_varctl , only : ncd_pio_DebugLevel, ncd_pio_num_iotasks use clm_mct_mod use spmdGathScatMod use decompMod , only : get_clmlevel_gsize,get_clmlevel_dsize use perf_mod , only : t_startf, t_stopf #if (defined BUILDPIO) use piolib_mod ! _EXTERNAL use pio_types ! _EXTERNAL use pio_kinds , only : pio_offset #endifPUBLIC TYPES:
implicit none include 'netcdf.inc' savePUBLIC MEMBER FUNCTIONS:
public :: check_ret ! checks return status of netcdf calls #if (defined BUILDPIO) public :: check_ret_pio ! checks return status of pio calls #endif public :: check_var ! determine if variable is on netcdf file public :: check_dim ! validity check on dimension public :: ncd_open ! open file public :: ncd_close ! close file public :: ncd_redef ! enter define mode public :: ncd_enddef ! end define mode public :: ncd_setfill ! set file value 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_iolocal ! write local data public :: ncd_ioglobal! write global data integer,parameter,public :: ncd_int = nf_int integer,parameter,public :: ncd_float = nf_float integer,parameter,public :: ncd_double = nf_double integer,parameter,public :: ncd_char = nf_char integer,parameter,public :: ncd_global = nf_global integer,parameter,public :: ncd_write = nf_write integer,parameter,public :: ncd_nowrite = nf_nowrite integer,parameter,public :: ncd_clobber = nf_clobber integer,parameter,public :: ncd_noclobber = nf_noclobber integer,parameter,public :: ncd_share = nf_share integer,parameter,public :: ncd_fill = nf_fill integer,parameter,public :: ncd_nofill = nf_nofill integer,parameter,public :: ncd_unlimited = nf_unlimitedREVISION 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_iolocal module procedure ncd_iolocal_int_1d module procedure ncd_iolocal_real_1d module procedure ncd_iolocal_int_2d module procedure ncd_iolocal_real_2d module procedure ncd_iolocal_gs_real1d module procedure ncd_iolocal_gs_int1d end interface interface ncd_ioglobal module procedure ncd_ioglobal_int_var module procedure ncd_ioglobal_real_var module procedure ncd_ioglobal_int_1d module procedure ncd_ioglobal_real_1d module procedure ncd_ioglobal_char_1d module procedure ncd_ioglobal_int_2d module procedure ncd_ioglobal_real_2d module procedure ncd_ioglobal_int_3d module procedure ncd_ioglobal_real_3d end interface private :: ncd_inqvdesc ! inquire variable descriptor private :: ncd_inqiodesc ! inquire variable descriptor #if (defined BUILDPIO) private :: ncd_setDOF ! set DOF arrays for pio #endif private :: scam_field_offsets ! get offset to proper lat/lon gridcell for SCAM logical,parameter,private :: lbcast_def = .false. ! lbcast default integer,parameter,private :: debug = 0 ! local debug level #if (defined BUILDPIO) integer,private :: pio_num_iotasks integer,private :: pio_num_aggregator integer,private :: pio_io_rank logical,private :: pio_IOproc type(File_desc_t) :: pio_File type pio_iodesc_plus_type character(len=32) :: name logical :: set integer :: ndims integer :: dimids(4) integer :: type type(IO_desc_t),pointer :: pio_ioDesc end type pio_iodesc_plus_type integer,parameter ,private :: pio_max_iodesc = 50 integer ,private :: pio_num_iodesc = 0 type(pio_iodesc_plus_type) ,private, target :: pio_iodesc_list(pio_max_iodesc) type pio_vardesc_plus_type character(len=64) :: name integer :: iodnum ! iodesc associated with vardesc type(Var_desc_t) :: pio_varDesc end type pio_vardesc_plus_type integer,parameter ,private :: pio_max_vardesc = 500 integer ,private :: pio_num_vardesc = 0 type(pio_vardesc_plus_type),private, target :: pio_varDesc_list(pio_max_vardesc) #endif