/[MITgcm]/MITgcm/pkg/mnc/README.txt
ViewVC logotype

Contents of /MITgcm/pkg/mnc/README.txt

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.12 - (show annotations) (download)
Fri Mar 19 03:28:36 2004 UTC (20 years, 2 months ago) by edhill
Branch: MAIN
Changes since 1.11: +32 -32 lines
File MIME type: text/plain
 o edit all MNC subroutines so that myThid is the _last_ argument

1
2 API Discussions:
3 ================
4
5 As discussed in our group meeting of 2003-12-17 (AJA, CNH, JMC, AM,
6 PH, EH3), the NetCDF interface should resemble the following FORTRAN
7 subroutines:
8
9 1) "stubs" of the form: MNC_WV_[G|L]2D_R[S|L] ()
10
11 2) MNC_INIT_VGRID('V_GRID_TYPE', nx, ny, nz, zc, zg)
12
13 3) MNC_INIT_HGRID('H_GRID_TYPE', nx, ny, xc, yc, xg, yg)
14
15 4) MNC_INIT_VAR('file', 'Vname', 'Vunits', 'H_GTYPE', 'V_GTYPE', PREC, FillVal)
16
17 5) MNC_WRITE_VAR('file', 'Vname', var, bi, bj, myThid)
18
19 This is a reasonable start but its inflexible since it isn't easily
20 generalized to grids with dimensions other than [2,3,4] or grids with
21 non-horizontal orientations (eg. vertical slices).
22
23
24 Generalizing what we would like to write as "variables defined on 1-D
25 to n-D grids", one can imagine a small number of objects containing
26 all the relevant information:
27
28 a dimension: [ name, size, units ]
29 a grid: [ name, 1+ dim-ref ]
30 a variable: [ name, units, *1* grid-ref, data ]
31 an attribute: [ name, units, data ]
32 a NetCDF file: [ name, 0+ attr, 0+ grid-ref, 0+ var-ref ]
33
34 which can then be manipulated (created, associated, destroyed, etc.)
35 using a simple interface such as:
36
37 MNC_INIT( myThid )
38
39 MNC_FILE_CREATE( fname, myThid )
40 MNC_FILE_OPEN( fname, itype, myThid )
41 MNC_FILE_ADD_ATTR_STR( fname, atname, sval, myThid )
42 MNC_FILE_ADD_ATTR_DBL( fname, atname, len, dval, myThid )
43 MNC_FILE_ADD_ATTR_REAL(fname, atname, len, rval, myThid )
44 MNC_FILE_ADD_ATTR_INT( fname, atname, len, ival, myThid )
45 MNC_FILE_ADD_ATTR_ANY( fname, atname, atype, cs,len,dv,rv,iv, myThid )
46 ...
47 MNC_FILE_READ_HEADER( fname, myThid )
48
49 MNC_DIM_INIT( fname, dname, dlen, myThid )
50
51 MNC_GRID_INIT( fname, gname, ndim, dnames, myThid )
52
53 MNC_VAR_INIT_DBL( fname, gname, vname, units, myThid )
54 MNC_VAR_INIT_REAL( fname, gname, vname, units, myThid )
55 MNC_VAR_INIT_INT( fname, gname, vname, units, myThid )
56 MNC_VAR_INIT_ANY( fname, gname, vname, units, type, myThid )
57 MNC_VAR_ADD_ATTR_STR( fname, vname, atname, sval, myThid )
58 MNC_VAR_ADD_ATTR_DBL( fname, vname, atname, nv, dval, myThid )
59 MNC_VAR_ADD_ATTR_REAL( fname, vname, atname, nv, rval, myThid )
60 MNC_VAR_ADD_ATTR_INT( fname, vname, atname, nv, ival, myThid )
61 MNC_VAR_ADD_ATTR_ANY( fname, vname, atname, atype, cs,len,dv,rv,iv, myThid )
62 MNC_VAR_WRITE_DBL( fname, vname, var, myThid )
63 MNC_VAR_WRITE_REAL( fname, vname, var, myThid )
64 MNC_VAR_WRITE_INT( fname, vname, var, myThid )
65 MNC_VAR_WRITE_ANY( fname, vname, vtype, dv, rv, iv, myThid )
66 ...
67 MNC_VAR_READ( fname, vname, var, myThid )
68
69 MNC_FILE_SYNC( fname, myThid )
70 MNC_FILE_CLOSE( fname, myThid )
71
72
73 Heres a further "convenience wrapper" written on top of the above UI:
74
75 MNC_CW_INIT( Gtype, Htype, Hsub, Vtype, Ttype, wHalo, myThid )
76
77 with pre-defined - xy - - n
78 combinations: U x c t y
79 'Cen_xy_c_t_Hn' V y i
80 'U_xy_i_t_Hn', Cen
81 'Cor_x_-_-_Hy' Cor
82
83 MNC_CW_WRITE( myIter, filebn,bi,bj, Gtype, RX, vname, var, myThid )
84 MNC_CW_READ( myIter, filebn,bi,bj, Gtype, RX, vname, var, myThid )
85
86 MNC_CW_RX_W_YY( fbname,bi,bj, vtype, indu, var, myThid )
87 MNC_CW_RX_R_YY( fbname,bi,bj, vtype, indu, var, myThid )
88
89 MNC_COMP_VTYPE_VAR( ind_vt, ind_fv_ids, ires, myThid )
90
91
92 To-Do:
93 ======
94
95 1) NAMING -- We should (as much as possible) try to name variables so
96 that they are in agreement with the CF naming conventions.
97
98 2) UNITS -- as with the names we need to follow conventions
99
100 3) AM described her "diags" (or "myDiags" or "mDiags") interface
101 which should use MNC for output. The data storage idea is similar
102 to the MNC tables-of-indicies approach but also includes one huge
103 double-precision "accumulator" to hold all the temporary values
104 (eg. partial sums for averages, current max/mins):
105
106 vname ( ni )
107 vlen ( ni )
108 vind ( ni ) ------+
109 |
110
111 vij_diag ( i, j, [...] ) w/ lat/lon indicies
112 vgl_diag ( [...] ) wo/ lat/lon indicies (global)
113
114 4) CNH pointed out that grid interpolation needs to be handled
115 "on-the-fly" since pre-processing would result in overly large
116 input files. We need an interpolation API...
117
118 5) From the group meeting on 2004/01/21, we need to define
119 "sub-grids" corresponding to:
120
121 var_name HGRID VGRID TIME
122 ===========================================
123 u U_xy r_c t
124 eta T_xy - t
125 rac T_xy - -
126
127 And write a convenience wrapper so that users can write variables
128 using just two function calls. JMC and I worked out the
129 following:
130
131

  ViewVC Help
Powered by ViewVC 1.1.22