/[MITgcm]/manual/s_outp_pkgs/text/diagnostics.tex
ViewVC logotype

Annotation of /manual/s_outp_pkgs/text/diagnostics.tex

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


Revision 1.12 - (hide annotations) (download) (as text)
Wed Jun 12 22:26:48 2013 UTC (12 years ago) by jmc
Branch: MAIN
CVS Tags: checkpoint01, HEAD
Changes since 1.11: +1 -1 lines
File MIME type: application/x-tex
fix a typo

1 edhill 1.2 \section{Diagnostics--A Flexible Infrastructure}
2 molod 1.1 \label{sec:pkg:diagnostics}
3     \begin{rawhtml}
4     <!-- CMIREDIR:package_diagnostics: -->
5     \end{rawhtml}
6    
7 edhill 1.2 \subsection{Introduction}
8 molod 1.1
9     \noindent
10 edhill 1.2 This section of the documentation describes the Diagnostics package
11     available within the GCM. A large selection of model diagnostics is
12     available for output. In addition to the diagnostic quantities
13     pre-defined in the GCM, there exists the option, in any experiment, to
14     define a new diagnostic quantity and include it as part of the
15     diagnostic output with the addition of a single subroutine call in the
16     routine where the field is computed. As a matter of philosophy, no
17     diagnostic is enabled as default, thus each user must specify the
18     exact diagnostic information required for an experiment. This is
19     accomplished by enabling the specific diagnostic of interest cataloged
20     in the Diagnostic Menu (see Section \ref{sec:diagnostics:menu}).
21     Instructions for enabling diagnostic output and defining new
22     diagnostic quantities are found in Section
23 molod 1.1 \ref{sec:diagnostics:usersguide} of this document.
24    
25     \noindent
26 edhill 1.2 The Diagnostic Menu in this section of the manual is a listing of
27     diagnostic quantities available within the main (dynamics) part of the
28     GCM. Additional diagnostic quantities, defined within the different
29     GCM packages, are available and are listed in the diagnostic menu
30     subsection of the manual section associated with each relevant
31     package. Once a diagnostic is enabled, the GCM will continually
32     increment an array specifically allocated for that diagnostic whenever
33     the appropriate quantity is computed. A counter is defined which
34     records how many times each diagnostic quantity has been incremented.
35     Several special diagnostics are included in the menu. Quantities
36 jmc 1.9 referred to as ``Counter Diagnostics'', are defined for selected
37 edhill 1.2 diagnostics which record the frequency at which a diagnostic is
38 jmc 1.9 incremented separately for each model grid location. Quantities
39     referred to as ``User Diagnostics'' are included in the menu to
40 edhill 1.2 facilitate defining new diagnostics for a particular experiment.
41 molod 1.1
42 edhill 1.2 \subsection{Equations}
43 molod 1.1 Not relevant.
44    
45 edhill 1.2 \subsection{Key Subroutines and Parameters}
46 molod 1.1 \label{sec:diagnostics:diagover}
47    
48     \noindent
49 edhill 1.2 There are several utilities within the GCM available to users to
50     enable, disable, clear, write and retrieve model diagnostics, and may
51     be called from any routine. The available utilities and the CALL
52     sequences are listed below.
53    
54 jmc 1.10 \noindent
55     {\bf DIAGNOSTICS\_ADDTOLIST}
56 jmc 1.9 (\filelink{pkg/diagnostics/diagnostics\_addtolist.F}{pkg-diagnostics-diagnostics\_addtolist.F}):
57 jmc 1.10 %This subroutine enables a diagnostic from the Diagnostic Menu,
58 jmc 1.9 %meaning that space is allocated for the
59     %diagnostic and the model routines will increment the diagnostic value
60 jmc 1.10 %during execution.
61     This routine is the underlying interface routine for defining a new permanent
62 jmc 1.9 diagnostic in the main model or in a package. The calling sequence is:
63    
64     \begin{verbatim}
65     CALL DIAGNOSTICS_ADDTOLIST (
66     O diagNum,
67     I diagName, diagCode, diagUnits, diagTitle, diagMate,
68     I myThid )
69    
70     where:
71     diagNum = diagnostic Id number - Output from routine
72     diagName = name of diagnostic to declare
73     diagCode = parser code for this diagnostic
74     diagUnits = field units for this diagnostic
75     diagTitle = field description for this diagnostic
76     diagMate = diagnostic mate number
77     myThid = my Thread Id number
78    
79     \end{verbatim}
80    
81    
82 edhill 1.2 \noindent
83 jmc 1.10 {\bf DIAGNOSTICS\_FILL}
84 jmc 1.9 (\filelink{pkg/diagnostics/diagnostics\_fill.F}{pkg-diagnostics-diagnostics\_fill.F}):
85 jmc 1.10 This is the main user interface routine to the diagnostics package.
86 jmc 1.9 This routine will increment the specified
87 edhill 1.2 diagnostic quantity with a field sent through the argument list.
88    
89     \begin{verbatim}
90 jmc 1.9 CALL DIAGNOSTICS_FILL(
91 jmc 1.10 I inpFld, diagName,
92 jmc 1.9 I kLev, nLevs, bibjFlg, bi, bj, myThid )
93 edhill 1.2
94     where:
95 jmc 1.9 inpFld = Field to increment diagnostics array
96     diagName = diagnostic identificator name (8 characters long)
97     kLev = Integer flag for vertical levels:
98     > 0 (any integer): WHICH single level to increment in qdiag.
99     0,-1 to increment "nLevs" levels in qdiag,
100     0 : fill-in in the same order as the input array
101     -1: fill-in in reverse order.
102     nLevs = indicates Number of levels of the input field array
103     (whether to fill-in all the levels (kLev<1) or just one (kLev>0))
104     bibjFlg = Integer flag to indicate instructions for bi bj loop
105 edhill 1.2 = 0 indicates that the bi-bj loop must be done here
106     = 1 indicates that the bi-bj loop is done OUTSIDE
107     = 2 indicates that the bi-bj loop is done OUTSIDE
108 jmc 1.9 AND that we have been sent a local array (with overlap regions)
109     (local array here means that it has no bi-bj dimensions)
110 edhill 1.2 = 3 indicates that the bi-bj loop is done OUTSIDE
111 jmc 1.9 AND that we have been sent a local array
112     AND that the array has no overlap region (interior only)
113     NOTE - bibjFlg can be NEGATIVE to indicate not to increment counter
114     bi = X-direction tile number - used for bibjFlg=1-3
115     bj = Y-direction tile number - used for bibjFlg=1-3
116     myThid = my thread Id number
117 edhill 1.2 \end{verbatim}
118 molod 1.1
119     \noindent
120 jmc 1.10 {\bf DIAGNOSTICS\_SCALE\_FILL}
121 jmc 1.9 (\filelink{pkg/diagnostics/diagnostics\_scale\_fill.F}{pkg-diagnostics-diagnostics\_scale\_fill.F}):
122     This is a possible alternative routine to
123     DIAGNOSTICS\_FILL which performs the same functions and has an additional option
124 molod 1.1 to scale the field before filling or raise the field to a power before filling.
125    
126 edhill 1.2 \begin{verbatim}
127 jmc 1.9 CALL DIAGNOSTICS_SCALE_FILL(
128 jmc 1.10 I inpFld, scaleFact, power, diagName,
129 jmc 1.9 I kLev, nLevs, bibjFlg, bi, bj, myThid )
130 edhill 1.2
131 jmc 1.9
132 jmc 1.10 where all the arguments are the same as for DIAGNOSTICS_FILL with
133 edhill 1.2 the addition of:
134 jmc 1.9 scaleFact = Scaling factor to apply to the input field product
135 jmc 1.11 power = Integer power to which to raise the input field (after scaling)
136 edhill 1.2 \end{verbatim}
137    
138     \noindent
139 jmc 1.10 {\bf DIAGNOSTICS\_FRACT\_FILL}
140     (\filelink{pkg/diagnostics/diagnostics\_fract\_fill.F}{pkg-diagnostics-diagnostics\_fract\_fill.F}):
141     This is a specific alternative routine to DIAGNOSTICS\_[SCALE]\_FILL
142     for the case of a diagnostics which is associated to
143     a fraction-weight factor (referred to as the diagnostics "counter mate").
144     This fraction-weight field is expected to vary during the simulation
145     and is provided as argument to DIAGNOSTICS\_FRACT\_FILL
146     in order to perform fraction-weighted time-average diagnostics.
147     Note that the fraction-weight field has to correspond to the diagnostics
148     counter-mate which has to be filled independently with a call to DIAGNOSTICS\_FILL.
149 edhill 1.2
150     \begin{verbatim}
151 jmc 1.10 CALL DIAGNOSTICS_FRACT_FILL(
152     I inpFld, fractFld, scaleFact, power, diagName,
153     I kLev, nLevs, bibjFlg, bi, bj, myThid )
154    
155 edhill 1.2
156 jmc 1.10 where all the arguments are the same as for DIAGNOSTICS_SCALE_FILL with
157     the addition of:
158     fractFld = fraction used for weighted average diagnostics
159 edhill 1.2 \end{verbatim}
160    
161     \noindent
162 jmc 1.10 {\bf DIAGNOSTICS\_IS\_ON}: Function call to inquire whether a
163     diagnostic is active and should be incremented. Useful when there is a
164     computation that must be done locally before a call to
165     DIAGNOSTICS\_FILL. The call sequence:
166 edhill 1.2
167     \begin{verbatim}
168 jmc 1.10 flag = DIAGNOSTICS_IS_ON( diagName, myThid )
169 edhill 1.2
170     where:
171 jmc 1.9 diagName = diagnostic identificator name (8 characters long)
172 jmc 1.10 myThid = my thread Id number
173 edhill 1.2 \end{verbatim}
174    
175     \noindent
176 jmc 1.10 {\bf DIAGNOSTICS\_COUNT}
177 jmc 1.9 (\filelink{pkg/diagnostics/diagnostics\_utils.F}{pkg-diagnostics-diagnostics\_utils.F}):
178 jmc 1.10 This subroutine increments the diagnostics counter only.
179     In general, the diagnostics counter is incremented at the same time as the
180     diagnostics is filled, by calling DIAGNOSTICS\_FILL.
181     However, there are few cases where the counter is not incremented
182     during the filling (e.g., when the filling is done level per level but
183     level 1 is skipped) and needs to be done explicitly with a call to subroutine
184     DIAGNOSTICS\_COUNT. The call sequence is:
185 edhill 1.2
186     \begin{verbatim}
187 jmc 1.10 CALL DIAGNOSTICS_COUNT(
188     I diagName, bi, bj, myThid )
189 edhill 1.2
190     where:
191 jmc 1.10 diagName = name of diagnostic to increment the counter
192     bi = X-direction tile number, or 0 if called outside bi,bj loops
193     bj = Y-direction tile number, or 0 if called outside bi,bj loops
194     myThid = my thread Id number
195    
196     \end{verbatim}
197    
198     %\noindent
199     %{\bf DIAGNOSTICS\_GET\_POINTERS}
200     %(\filelink{pkg/diagnostics/diagnostics\_utils.F}{pkg-diagnostics-diagnostics\_utils.F}):
201     %This subroutine retrieves the value of a the diagnostics pointers
202     %that other routines require as input - can be useful if the diagnostics common
203     %blocks are not local to a routine.
204     %
205     %\begin{verbatim}
206     % CALL DIAGNOSTICS_GET_POINTERS(
207     % I diagName, listId,
208     % O ndId, ip,
209     % I myThid )
210     %
211     % where:
212     % diagName = diagnostic identificator name (8 characters long)
213     % listId = list number that specifies the output frequency
214     % ndId = diagnostics Id number (in available diagnostics list)
215     % ip = diagnostics pointer to storage array
216     % myThid = my Thread Id number
217     %\end{verbatim}
218     %
219     %\noindent
220     %{\bf GETDIAG}
221     %%(\filelink{pkg/diagnostics/diagnostics\_utils.F}{pkg-diagnostics-diagnostics\_utils.F}):
222     %This subroutine retrieves the value of a model diagnostic.
223     %This routine is particularly useful when called from a
224     %user output routine, although it can be called from any routine. This
225     %routine returns the time-averaged value of the diagnostic by dividing
226     %the current accumulated diagnostic value by its corresponding counter.
227     %This routine does not change the value of the diagnostic itself, that
228     %is, it does not replace the diagnostic with its time-average. The
229     %%calling sequence for this routine is givin by:
230     %
231     %\begin{verbatim}
232     % CALL GETDIAG(
233     % I levreal, undef,
234     % O qtmp,
235     % I ndId, mate, ip, im, bi, bj, myThid )
236     %
237     % where:
238     %% lev = Model Level at which the diagnostic is desired
239     % undef = Fill value to be used when diagnostic is undefined
240     % qtmp = Time-Averaged Diagnostic Output
241     % ndId = diagnostics Id number (in available diagnostics list)
242     % mate = counter diagnostic number if any ; 0 otherwise
243     % ip = pointer to storage array location for diag.
244     % im = pointer to storage array location for mate
245     % bi = X-direction tile number
246     % bj = Y-direction tile number
247     % myThid = my thread Id number
248     %\end{verbatim}
249     %
250     %\noindent
251     %{\bf DIAGNOSTICS\_CLRDIAG}
252     %(\filelink{pkg/diagnostics/diagnostics\_clear.F}{pkg-diagnostics-diagnostics\_clear.F}):
253     %This subroutine initializes the values of model
254     %diagnostics to zero, and is particularly useful when called from user
255     %output routines to re-initialize diagnostics during the run.
256     %The calling sequence is:
257     %
258     %\begin{verbatim}
259     % CALL DIAGNOSTICS_CLRDIAG ( ipt, nLev, myThid )
260     %
261     % where:
262     % ipt :: diagnostic pointer to storage array
263     % nLev :: number of levels (in storage array) to reset
264     % myThid :: my Thread Id number
265     %\end{verbatim}
266 molod 1.1
267     \begin{table}
268     \caption{Diagnostic Parsing Array}
269     \label{tab:diagnostics:gdiag.tabl}
270     \begin{center}
271     \begin{tabular}{ |c|c|l| }
272     \hline
273 jmc 1.10 \multicolumn{3}{|c|}{\bf Diagnostic Parsing Array} \\
274 molod 1.1 \hline
275     \hline
276     Array & Value & Description \\
277     \hline
278 jmc 1.10 parse(1) & $\rightarrow$ S & Scalar Diagnostic \\
279     & $\rightarrow$ U & U-vector component Diagnostic \\
280 jmc 1.9 & $\rightarrow$ V & V-vector component Diagnostic \\ \hline
281 jmc 1.10 parse(2) & $\rightarrow$ U & C-Grid U-Point \\
282     & $\rightarrow$ V & C-Grid V-Point \\
283     & $\rightarrow$ M & C-Grid Mass Point \\
284 jmc 1.9 & $\rightarrow$ Z & C-Grid Vorticity (Corner) Point \\ \hline
285     parse(3) & $\rightarrow$ & Used for Level Integrated output: cumulate levels \\
286     & $\rightarrow$ r & same but cumulate product by model level thickness \\
287     & $\rightarrow$ R & same but cumulate product by hFac \& level thickness \\ \hline
288     parse(4) & $\rightarrow$ P & Positive Definite Diagnostic \\ \hline
289     parse(5) & $\rightarrow$ C & with Counter array \\
290 jmc 1.10 & $\rightarrow$ P & post-processed (not filled up) from other diags \\
291 jmc 1.9 & $\rightarrow$ D & Disabled Diagnostic for output \\ \hline
292     parse(6-8)& & retired, formerly: 3-digit mate number \\ \hline
293     parse(9) & $\rightarrow$ U & model-level plus 1/2 \\
294     & $\rightarrow$ M & model-level middle \\
295     & $\rightarrow$ L & model-level minus 1/2 \\ \hline
296     parse(10) & $\rightarrow$ 0 & levels = 0 \\
297     & $\rightarrow$ 1 & levels = 1 \\
298     & $\rightarrow$ R & levels = Nr \\
299     & $\rightarrow$ L & levels = MAX(Nr,NrPhys) \\
300     & $\rightarrow$ M & levels = MAX(Nr,NrPhys) - 1 \\
301     & $\rightarrow$ G & levels = Ground\_level Number \\
302     & $\rightarrow$ I & levels = sea-Ice\_level Number \\
303     & $\rightarrow$ X & free levels option (need to be set explicitly)\\ \hline
304 molod 1.1 \end{tabular}
305     \addcontentsline{lot}{section}{Table 3: Diagnostic Parsing Array}
306     \end{center}
307     \end{table}
308    
309 jmc 1.10 \noindent
310     The diagnostics are computed at various times and places within the
311     GCM. Because MITgcm may employ a staggered grid, diagnostics may be
312     computed at grid box centers, corners, or edges, and at the middle or
313     edge in the vertical. Some diagnostics are scalars, while others are
314     components of vectors. An internal array is defined which contains
315     information concerning various grid attributes of each diagnostic. The
316     GDIAG array (in common block {\tt diagnostics} in file {\tt
317     DIAGNOSTICS.h}) is internally defined as a character*16 variable, and
318     is equivalenced to a character*1 "parse" array in output in order to
319     extract the grid-attribute information. The GDIAG array is described
320     in Table \ref{tab:diagnostics:gdiag.tabl}.
321 molod 1.1
322     \noindent
323     As an example, consider a diagnostic whose associated GDIAG parameter is equal
324 jmc 1.10 to ``UUR\hspace{5mm}MR''. From GDIAG we can determine that this diagnostic is a
325 jmc 1.9 U-vector component located at the C-grid U-point, model mid-level (M)
326     with Nr levels (last R).
327 molod 1.1
328     \noindent
329     In this way, each Diagnostic in the model has its attributes (ie. vector or scalar,
330 jmc 1.10 C-grid location, etc.) defined internally. The Output routines use this information
331     in order to determine what type of transformations need to be performed. Any
332 molod 1.1 interpolations are done at the time of output rather than during each model step.
333 jmc 1.10 In this way the User has flexibility in determining the type of gridded data which
334 molod 1.1 is output.
335    
336 jmc 1.10 %\newpage
337 edhill 1.2 \subsection{Usage Notes}
338 molod 1.1 \label{sec:diagnostics:usersguide}
339    
340 jmc 1.10 \subsubsection{Using available diagnostics}
341 molod 1.1 \noindent
342 jmc 1.9 To use the diagnostics package, other than enabling it in {\tt packages.conf}
343     and turning the {\tt useDiagnostics} flag in {\tt data.pkg} to .TRUE., there are two
344 molod 1.1 further steps the user must take to enable the diagnostics package for
345     output of quantities that are already defined in the GCM under an experiment's
346 jmc 1.10 configuration of packages.
347 jmc 1.9 A parameter file {\tt data.diagnostics} must be supplied in the run directory,
348 jmc 1.10 and the file DIAGNOSTICS\_SIZE.h must be included in the
349     code directory. The steps for defining a new (permanent or experiment-specific
350     temporary) diagnostic quantity will be outlined later.
351    
352     \noindent The namelist in parameter file {\tt data.diagnostics} will activate
353     a user-defined list of diagnostics quantities to be computed,
354     specify the frequency and type of output, the number of levels, and
355     the name of all the separate output files.
356 jmc 1.9 A sample {\tt data.diagnostics} namelist file:
357 molod 1.1
358 edhill 1.2 \begin{verbatim}
359     # Diagnostic Package Choices
360 jmc 1.9 #--------------------
361     # dumpAtLast (logical): always write output at the end of simulation (default=F)
362     # diag_mnc (logical): write to NetCDF files (default=useMNC)
363     #--for each output-stream:
364     # fileName(n) : prefix of the output file name (max 80c long) for outp.stream n
365     # frequency(n):< 0 : write snap-shot output every |frequency| seconds
366     # > 0 : write time-average output every frequency seconds
367     # timePhase(n) : write at time = timePhase + multiple of |frequency|
368     # averagingFreq : frequency (in s) for periodic averaging interval
369     # averagingPhase : phase (in s) for periodic averaging interval
370     # repeatCycle : number of averaging intervals in 1 cycle
371     # levels(:,n) : list of levels to write to file (Notes: declared as REAL)
372     # when this entry is missing, select all common levels of this list
373     # fields(:,n) : list of selected diagnostics fields (8.c) in outp.stream n
374     # (see "available_diagnostics.log" file for the full list of diags)
375     # missing_value(n) : missing value for real-type fields in output file "n"
376     # fileFlags(n) : specific code (8c string) for output file "n"
377     #--------------------
378     &DIAGNOSTICS_LIST
379 jmc 1.10 fields(1:2,1) = 'UVEL ','VVEL ',
380     levels(1:5,1) = 1.,2.,3.,4.,5.,
381     filename(1) = 'diagout1',
382     frequency(1) = 86400.,
383 jmc 1.12 fields(1:2,2) = 'THETA ','SALT ',
384 jmc 1.10 filename(2) = 'diagout2',
385     fileflags(2) = ' P1 ',
386     frequency(2) = 3600.,
387 jmc 1.9 &
388    
389     &DIAG_STATIS_PARMS
390     &
391 edhill 1.2 \end{verbatim}
392    
393     \noindent
394     In this example, there are two output files that will be generated for
395     each tile and for each output time. The first set of output files has
396     the prefix diagout1, does time averaging every 86400. seconds,
397     (frequency is 86400.), and will write fields which are multiple-level
398     fields at output levels 1-5. The names of diagnostics quantities are
399     UVEL and VVEL. The second set of output files has the prefix
400     diagout2, does time averaging every 3600. seconds, includes fields
401 jmc 1.9 with all levels, and the names of diagnostics quantities are THETA and SALT.
402 edhill 1.2
403     \noindent
404     The user must assure that enough computer memory is allocated for the
405     diagnostics and the output streams selected for a particular
406 jmc 1.9 experiment. This is accomplished by modifying the file
407 edhill 1.2 DIAGNOSTICS\_SIZE.h and including it in the experiment code directory.
408 jmc 1.9 The parameters that should be checked are called numDiags, numLists,
409     numperList, and diagSt\_size.
410 molod 1.1
411 jmc 1.9 \noindent numDiags (and diagSt\_size): \\
412 jmc 1.10 \noindent All GCM diagnostic quantities are stored in the single diagnostic array QDIAG
413     which is located in the file
414 jmc 1.9 \filelink{pkg/diagnostics/DIAGNOSTICS.h}{pkg-diagnostics-DIAGNOSTICS.h}
415 molod 1.1 and has the form:\\
416 edhill 1.2 \begin{verbatim}
417 jmc 1.9 _RL qdiag(1-Olx,sNx+Olx,1-Olx,sNx+Olx,numDiags,nSx,nSy)
418     _RL qSdiag(0:nStats,0:nRegions,diagSt_size,nSx,nSy)
419     COMMON / DIAG_STORE_R / qdiag, qSdiag
420 edhill 1.2 \end{verbatim}
421     \noindent
422     The first two-dimensions of qdiag correspond to the horizontal
423     dimension of a given diagnostic, and the third dimension of qdiag is
424     used to identify diagnostic fields and levels combined. In order to
425     minimize the memory requirement of the model for diagnostics, the
426     default GCM executable is compiled with room for only one horizontal
427 jmc 1.9 diagnostic array, or with numDiags set to Nr. In order for the User to
428 edhill 1.2 enable more than 1 three-dimensional diagnostic, the size of the
429 jmc 1.9 diagnostics common must be expanded to accommodate the desired
430 edhill 1.2 diagnostics. This can be accomplished by manually changing the
431 jmc 1.9 parameter numDiags in the file
432 edhill 1.2 \filelink{pkg/diagnostics/DIAGNOSTICS\_SIZE.h}{pkg-diagnostics-DIAGNOSTICS\_SIZE.h}.
433 jmc 1.9 numDiags should be set greater than or equal to the sum of all the
434 edhill 1.2 diagnostics activated for output each multiplied by the number of
435     levels defined for that diagnostic quantity. For the above example,
436     there are 4 multiple level fields, which the diagnostics menu (see
437     below) indicates are defined at the GCM vertical resolution, Nr. The
438 jmc 1.9 value of numDiags in DIAGNOSTICS\_SIZE.h would therefore be equal to
439 edhill 1.2 4*Nr, or, say 40 if $Nr=10$.
440 molod 1.1
441 jmc 1.9 \noindent numLists and numperList: \\
442     \noindent The parameter numLists must be set greater than or equal to
443 edhill 1.2 the number of separate output streams that the user specifies in the
444 jmc 1.9 namelist file data.diagnostics. The parameter numperList corresponds
445     to the maximum number of diagnostics requested per output streams.
446 edhill 1.2
447 jmc 1.10 \subsubsection{Adding new diagnostics to the code}
448    
449 edhill 1.2 \noindent
450     In order to define and include as part of the diagnostic output any
451     field that is desired for a particular experiment, two steps must be
452     taken. The first is to enable the ``User Diagnostic'' in
453 jmc 1.9 {\tt data.diagnostics}. This is accomplished by adding one of the ``User
454 edhill 1.2 Diagnostic'' field names (UDIAG1 through UDIAG10, for multi-level
455     fields, or SDIAG1 through SDIAG10 for single level fields) to the
456     data.diagnostics namelist in one of the output streams. These fields
457     are listed in the diagnostics menu. The second step is to add a call
458 jmc 1.9 to DIAGNOSTICS\_FILL from the subroutine in which the quantity desired
459 edhill 1.2 for diagnostic output is computed.
460    
461     \noindent
462     In order to add a new diagnostic to the permanent set of diagnostics
463     that the main model or any package contains as part of its diagnostics
464 jmc 1.9 menu, the subroutine DIAGNOSTICS\_ADDTOLIST should be called during the
465 edhill 1.2 initialization phase of the main model or package. For the main model,
466 jmc 1.9 the call should be made from subroutine DIAGNOSTICS\_MAIN\_INIT, and
467 jmc 1.10 for a package, the call should probably be made from
468     %somewhere in the PACKAGES\_INIT\_FIXED sequence (probably
469     from inside the particular package's init\_fixed routine.
470 jmc 1.9 A typical code sequence to set the
471     input arguments to DIAGNOSTICS\_ADDTOLIST would look like:
472 molod 1.1
473 edhill 1.2 \begin{verbatim}
474 jmc 1.9 diagName = 'RHOAnoma'
475     diagTitle = 'Density Anomaly (=Rho-rhoConst)'
476     diagUnits = 'kg/m^3 '
477     diagCode = 'SMR MR '
478     CALL DIAGNOSTICS\_ADDTOLIST( diagNum,
479     I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
480 edhill 1.2 \end{verbatim}
481    
482     \noindent If the new diagnostic quantity is associated with either a
483 jmc 1.9 vector pair or a diagnostic counter, the diagMate argument must be
484 jmc 1.10 provided with the proper index corresponding to the ``mate''.
485     The output argument from DIAGNOSTICS\_ADDTOLIST that is called diagNum here
486 jmc 1.9 contains a running total of the number of diagnostics defined in the code up to
487 edhill 1.2 any point during the run. The sequence number for the next two
488     diagnostics defined (the two components of the vector pair, for
489     instance) will be diagNum+1 and diagNum+2. The definition of the first
490     component of the vector pair must fill the ``mate'' segment of the
491     diagCode as diagnostic number diagNum+2. Since the subroutine
492     increments diagNum, the definition of the second component of the
493     vector fills the ``mate'' part of diagCode with diagNum. A code
494     sequence for this case would look like:
495    
496     \begin{verbatim}
497 jmc 1.9 diagName = 'UVEL '
498     diagTitle = 'Zonal Component of Velocity (m/s)'
499     diagUnits = 'm/s '
500     diagCode = 'UUR MR '
501     diagMate = diagNum + 2
502     CALL DIAGNOSTICS_ADDTOLIST( diagNum,
503     I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
504    
505     diagName = 'VVEL '
506     diagTitle = 'Meridional Component of Velocity (m/s)'
507     diagUnits = 'm/s '
508     diagCode = 'VVR MR '
509     diagMate = diagNum
510     CALL DIAGNOSTICS_ADDTOLIST( diagNum,
511     I diagName, diagCode, diagUnits, diagTitle, diagMate, myThid )
512 edhill 1.2 \end{verbatim}
513 molod 1.1
514 jmc 1.8 \input{s_outp_pkgs/text/diagnostics-menu.tex}
515 molod 1.1
516     \newpage
517     \noindent For a list of the diagnostic fields available in the
518     different MITgcm packages, follow the link to the diagnostics menu
519     in the manual section describing the package:
520    
521 edhill 1.5 \begin{itemize}
522     \item aim: \ref{sec:pkg:aim:diagnostics}
523     \item exf: \ref{sec:pkg:exf:diagnostics}
524     \item gchem: \ref{sec:pkg:gchem:diagnostics}
525 molod 1.6 \item generic\_advdiff: \ref{sec:pkg:gad:diagnostics}
526 edhill 1.5 \item gridalt: \ref{sec:pkg:gridalt:diagnostics}
527     \item gmredi: \ref{sec:pkg:gmredi:diagnostics}
528     \item fizhi: \ref{sec:pkg:fizhi:diagnostics}
529     \item kpp: \ref{sec:pkg:kpp:diagnostics}
530     \item land: \ref{sec:pkg:land:diagnostics}
531     \item mom\_common: \ref{sec:pkg:mom_common:diagnostics}
532     \item obcs: \ref{sec:pkg:obcs:diagnostics}
533     \item thsice: \ref{sec:pkg:thsice:diagnostics}
534     \item shap\_filt: \ref{sec:pkg:shap_filt:diagnostics}
535 molod 1.7 \item ptracers: \ref{sec:pkg:ptracers:diagnostics}
536 edhill 1.5 \end{itemize}
537 molod 1.1
538 edhill 1.2 \subsection{Dos and Donts}
539 molod 1.1
540 edhill 1.2 \subsection{Diagnostics Reference}
541 molod 1.1

  ViewVC Help
Powered by ViewVC 1.1.22