C $Header: /u/gcmpack/MITgcm/pkg/mnc/mnc_common.h,v 1.27 2005/07/06 21:17:08 edhill Exp $ C $Name: $ C C ========================================== C MNC : an MITgcm wrapper package for NetCDF C ========================================== C C The following common block is the "state" for the MNC interface to C NetCDF. The intent is to keep track of the associations between C files, attributes, variables, grids, and dimensions. These C objects are roughly defined as: C C a dimension: C - contains: [ name, size ] C - exists per-NetCDF-file C C a grid: C - contains *ORDERED* sets of dimensions: [ name, 1+ dim-refs ] C - exists per-NetCDF-file C - NOTE: when created, the name and dim-refs are embedded in C the NetCDF file attributes for later retrieval C - NOTE: grid coordinates are implemented using variables with C special names (eg. lat, lon) and special units C (eg. degree_east) C C a variable: C - contains: [ name, units, 1 grid-ref, data ] C - exists per-NetCDF-file C - NOTE: is associated with *exactly* one grid C C an attribute: C - contains: [ name, units, data ] C - basically, a scalar (non-grid) variable C - exists per-NetCDF-file C C a NetCDF file: C - contains: [ name, 0+ attr, 0+ grid-ref, 0+ var-ref ] C C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP 1 C !ROUTINE: mnc_common.h C !INTERFACE: C #include "mnc_common.h" C !DESCRIPTION: C Contains the ``look-up'' tables for the MNC package. These tables C contain the mappings between the various names and the NetCDF C entities. C !LOCAL VARIABLES: C The following MNC "Internals" are implemented on a C PER-NetDCF-FILE basis: C . C mnc_blank_name :: (convenience) just MNC_MAX_CHAR spaces C . C mnc_f_names (fi) :: file names C mnc_g_names (gi) :: grid names <----+ C . | C mnc_f_info (fi,-) :: isDEF, fID, Ngrid, g1,ds1,de1, C . g2,ds2,de2, ... C . | | C mnc_fd_ind (fi,-) :: dim indicies <-------+---+ C . | C mnc_d_names (di) :: names <--+ <--+ | C mnc_d_ids (di) :: IDs <--+ <--+ +----+ C mnc_d_size (di) :: sizes <--+ <--+ | starting C . | | indicies of C mnc_f_alld (fi,di):: ndim, id1,id2,id3, ... | grids in C . | mnc_f_info C . +----------++ C . | | C mnc_fv_ids (fi,-) :: nVar, n1,ID1,ig1, n2,ID2,ig2, ... C . | | C mnc_v_names (vi) :: <---+-----------+ C C fi :: file index C vi :: variable index C di :: dimension index C . C . C The following MNC "Convenience Wrapper" variables are C implemented independently of any NetCDF files C . C mnc_cw_fgnm (f) :: file group name (or "base name") C mnc_cw_fgud (f) :: file group unlimited dim value C mnc_cw_fgis (f) :: file group sequence number C mnc_cw_fgig (f) :: file group unlim dim is growing C . C mnc_cw_gname (g) :: Gtype names <--------+ C mnc_cw_ndim (g) :: number of dimensions | C mnc_cw_dn (i,g) :: dname1, dname2, ... | C mnc_cw_dims (i,g) :: d1, d2, d3, ... | C mnc_cw_is (i,g) :: starting indicies: is1, is2, ... | C mnc_cw_ie (i,g) :: ending indicies: ie1, ie2, ... | C . | C mnc_cw_vname (v) :: Vtype names | C mnc_cw_vgind (v) :: index into --------+ C mnc_cw_vnat (3,v) :: number of attributes [T,I,D] C mnc_cw_vbij (2,v) :: bi,bi indicies (0 if not applicable) C mnc_cw_vtnm (i,v) :: text (character) attribute names C mnc_cw_vtat (i,v) :: text (character) attributes C mnc_cw_vinm (i,v) :: INT attribute names C mnc_cw_viat (i,v) :: INT attributes C mnc_cw_vdnm (i,v) :: REAL*8 attribute names C mnc_cw_vdat (i,v) :: REAL*8 attributes C . C mnc_cw_cvnm (c) :: CV (coordinate variable) name C mnc_cw_cvse (2,c) :: CV start,end indicies ----+ C mnc_cw_cvdt (cdt) :: CV data pool <-------+ C . C f :: file group index C g :: Gtype index C v :: Vtype index C c :: CV index CEOP integer MNC_MAX_ID, MNC_MAX_CHAR, MNC_MAX_INFO integer MNC_CW_MAX_I, MNC_CW_CVDAT parameter ( MNC_MAX_ID = 4000 ) parameter ( MNC_MAX_CHAR = 100 ) parameter ( MNC_MAX_INFO = 800 ) parameter ( MNC_CW_MAX_I = 150 ) parameter ( MNC_CW_CVDAT = 50000 ) COMMON /MNC_VARS_C/ & mnc_blank_name, & mnc_f_names, mnc_g_names, mnc_v_names, mnc_d_names, & mnc_out_path COMMON /MNC_VARS_I/ & mnc_f_info, mnc_fd_ind, mnc_fv_ids, mnc_f_alld, & mnc_d_size, mnc_d_ids character*(MNC_MAX_CHAR) mnc_blank_name character*(MNC_MAX_CHAR) mnc_f_names(MNC_MAX_ID) character*(MNC_MAX_CHAR) mnc_g_names(MNC_MAX_ID) character*(MNC_MAX_CHAR) mnc_v_names(MNC_MAX_ID) character*(MNC_MAX_CHAR) mnc_d_names(MNC_MAX_ID) integer mnc_f_info(MNC_MAX_ID,MNC_MAX_INFO) integer mnc_fd_ind(MNC_MAX_ID,MNC_MAX_INFO) integer mnc_fv_ids(MNC_MAX_ID,MNC_MAX_INFO) integer mnc_f_alld(MNC_MAX_ID,MNC_MAX_INFO) integer mnc_d_size(MNC_MAX_ID) integer mnc_d_ids(MNC_MAX_ID) character*(MNC_MAX_CHAR) mnc_out_path COMMON /MNC_CW_VARS_C/ & mnc_cw_gname, mnc_cw_dn, & mnc_cw_vname, & mnc_cw_vtnm, mnc_cw_vinm, mnc_cw_vdnm, & mnc_cw_vtat, & mnc_cw_fgnm C & mnc_cw_cvnm COMMON /MNC_CW_VARS_I/ & mnc_cw_ndim, mnc_cw_dims, & mnc_cw_is, mnc_cw_ie, & mnc_cw_vgind, mnc_cw_vnat, & mnc_cw_vbij, mnc_cw_viat, & mnc_cw_fgud, mnc_cw_fgis, mnc_cw_fgig C & mnc_cw_cvse COMMON /MNC_CW_VARS_R/ & mnc_cw_vdat C & mnc_cw_cvdt character*(MNC_MAX_CHAR) mnc_cw_gname(MNC_MAX_ID) character*(MNC_MAX_CHAR) mnc_cw_dn(MNC_CW_MAX_I,MNC_MAX_ID) integer mnc_cw_ndim(MNC_MAX_ID) integer mnc_cw_dims(MNC_CW_MAX_I,MNC_MAX_ID) integer mnc_cw_is(MNC_CW_MAX_I,MNC_MAX_ID) integer mnc_cw_ie(MNC_CW_MAX_I,MNC_MAX_ID) character*(MNC_MAX_CHAR) mnc_cw_vname(MNC_MAX_ID) character*(MNC_MAX_CHAR) mnc_cw_vtnm(MNC_CW_MAX_I,MNC_MAX_ID) character*(MNC_MAX_CHAR) mnc_cw_vinm(MNC_CW_MAX_I,MNC_MAX_ID) character*(MNC_MAX_CHAR) mnc_cw_vdnm(MNC_CW_MAX_I,MNC_MAX_ID) character*(MNC_MAX_CHAR) mnc_cw_vtat(MNC_CW_MAX_I,MNC_MAX_ID) integer mnc_cw_vgind(MNC_MAX_ID) integer mnc_cw_vnat(3,MNC_MAX_ID) integer mnc_cw_vbij(2,MNC_MAX_ID) integer mnc_cw_viat(MNC_CW_MAX_I,MNC_MAX_ID) REAL*8 mnc_cw_vdat(MNC_CW_MAX_I,MNC_MAX_ID) character*(MNC_MAX_CHAR) mnc_cw_fgnm(MNC_MAX_ID) integer mnc_cw_fgud(MNC_MAX_ID) integer mnc_cw_fgis(MNC_MAX_ID) integer mnc_cw_fgig(MNC_MAX_ID) C character*(MNC_MAX_CHAR) mnc_cw_cvnm(MNC_MAX_ID) C integer mnc_cw_cvse(2,MNC_MAX_ID) C REAL*8 mnc_cw_cvdt(MNC_CW_CVDAT) C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CEH3 ;;; Local Variables: *** CEH3 ;;; mode:fortran *** CEH3 ;;; End: ***