/[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.9 - (show annotations) (download)
Tue Jan 27 05:47:32 2004 UTC (20 years, 3 months ago) by edhill
Branch: MAIN
Changes since 1.8: +9 -8 lines
File MIME type: text/plain
 o first steps towards a "convenience wrapper" for pre-defined grid types
 o small clean-ups

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( myThid, fname )
40 MNC_FILE_OPEN( myThid, fname, itype )
41 MNC_FILE_ADD_ATTR_STR( myThid, fname, atname, sval )
42 MNC_FILE_ADD_ATTR_DBL( myThid, fname, atname, len, dval )
43 MNC_FILE_ADD_ATTR_REAL(myThid, fname, atname, len, rval )
44 MNC_FILE_ADD_ATTR_INT( myThid, fname, atname, len, ival )
45 MNC_FILE_ADD_ATTR_ANY( myThid, fname, atname, atype, cs,len,dv,rv,iv )
46 ...
47 MNC_FILE_READ_HEADER( myThid, fname )
48
49 MNC_DIM_INIT( myThid, fname, dname, dlen )
50
51 MNC_GRID_INIT( myThid, fname, gname, ndim, dnames )
52
53 MNC_VAR_INIT_DBL( myThid, fname, gname, vname, units )
54 MNC_VAR_INIT_REAL( myThid, fname, gname, vname, units )
55 MNC_VAR_INIT_INT( myThid, fname, gname, vname, units )
56 MNC_VAR_INIT_ANY( myThid, fname, gname, vname, units, type )
57 MNC_VAR_ADD_ATTR_STR( myThid, fname, vname, atname, sval )
58 MNC_VAR_ADD_ATTR_DBL( myThid, fname, vname, atname, nv, dval )
59 MNC_VAR_ADD_ATTR_REAL( myThid, fname, vname, atname, nv, rval )
60 MNC_VAR_ADD_ATTR_INT( myThid, fname, vname, atname, nv, ival )
61 MNC_VAR_ADD_ATTR_ANY( myThid, fname, vname, atname, atype, cs,len,dv,rv,iv )
62 MNC_VAR_WRITE_DBL( myThid, fname, vname, var )
63 MNC_VAR_WRITE_REAL( myThid, fname, vname, var )
64 MNC_VAR_WRITE_INT( myThid, fname, vname, var )
65 MNC_VAR_WRITE_ANY( myThid, fname, vname, vtype, dv, rv, iv )
66 ...
67 MNC_VAR_READ( myThid, fname, vname, var )
68
69 MNC_FILE_SYNC( myThid, fname )
70 MNC_FILE_CLOSE( myThid, fname )
71
72
73 Heres a further "convenience wrapper" written on top of the above UI:
74
75 MNC_CW_INIT( myThid, Gtype, Htype, Hsub, Vtype, Ttype, wHalo )
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( myThid,myIter, filebn,bi,bj, Gtype, RX, vname, var )
84 MNC_CW_READ( myThid,myIter, filebn,bi,bj, Gtype, RX, vname, var )
85
86
87
88 To-Do:
89 ======
90
91 1) NAMING -- We should (as much as possible) try to name variables so
92 that they are in agreement with the CF naming conventions.
93
94 2) UNITS -- as with the names we need to follow conventions
95
96 3) AM described her "diags" (or "myDiags" or "mDiags") interface
97 which should use MNC for output. The data storage idea is similar
98 to the MNC tables-of-indicies approach but also includes one huge
99 double-precision "accumulator" to hold all the temporary values
100 (eg. partial sums for averages, current max/mins):
101
102 vname ( ni )
103 vlen ( ni )
104 vind ( ni ) ------+
105 |
106
107 vij_diag ( i, j, [...] ) w/ lat/lon indicies
108 vgl_diag ( [...] ) wo/ lat/lon indicies (global)
109
110 4) CNH pointed out that grid interpolation needs to be handled
111 "on-the-fly" since pre-processing would result in overly large
112 input files. We need an interpolation API...
113
114 5) From the group meeting on 2004/01/21, we need to define
115 "sub-grids" corresponding to:
116
117 var_name HGRID VGRID TIME
118 ===========================================
119 u U_xy r_c t
120 eta T_xy - t
121 rac T_xy - -
122
123 And write a convenience wrapper so that users can write variables
124 using just two function calls. JMC and I worked out the
125 following:
126
127

  ViewVC Help
Powered by ViewVC 1.1.22