/[MITgcm]/manual/s_phys_pkgs/diagnostics.tex
ViewVC logotype

Contents of /manual/s_phys_pkgs/diagnostics.tex

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


Revision 1.9 - (show annotations) (download) (as text)
Thu Jul 14 19:18:01 2005 UTC (18 years, 11 months ago) by molod
Branch: MAIN
Changes since 1.8: +121 -2505 lines
File MIME type: application/x-tex
Add fizhi diag description to fizhi.tex, add gridalt.tex to part6, start fixing diag

1 \section{Diagnostics--A Flexible Infrastructure}
2 \label{sec:pkg:diagnostics}
3 \begin{rawhtml}
4 <!-- CMIREDIR:package_diagnostics: -->
5 \end{rawhtml}
6
7 \subsection{Introduction}
8
9 \noindent
10 This section of the documentation describes the Diagnostics package available within
11 the GCM. A large selection of model diagnostics is available for output.
12 In addition to the diagnostic quantities pre-defined in the GCM, there exists
13 the option, in any experiment, to define a new diagnostic quantity and include it
14 as part of the diagnostic output with the addition of a single subroutine call in the
15 routine where the field is computed. As a matter of philosophy, no diagnostic is enabled
16 as default, thus each user must specify the exact diagnostic information required for an
17 experiment. This is accomplished by enabling the specific diagnostic of interest cataloged
18 in the Diagnostic Menu (see Section \ref{sec:diagnostics:menu}). Instructions for enabling
19 diagnostic output and defining new diagnostic quantities are found in Section
20 \ref{sec:diagnostics:usersguide} of this document.
21
22 \noindent
23 The Diagnostic Menu is a hard-wired enumeration of diagnostic quantities available within
24 the GCM. Once a diagnostic is enabled, the GCM will continually increment an array
25 specifically allocated for that diagnostic whenever the appropriate quantity is computed.
26 A counter is defined which records how many times each diagnostic quantity has been
27 incremented. Several special diagnostics are included in the menu. Quantities refered to
28 as ``Counter Diagnostics'', are defined for selected diagnostics which record the
29 frequency at which a diagnostic is incremented separately for each model grid location.
30 Quantitied refered to as ``User Diagnostics'' are included in the menu to facilitate
31 defining new diagnostics for a particular experiment.
32
33 \subsection{Equations}
34 Not relevant.
35
36 \subsection{Key Subroutines and Parameters}
37 \label{sec:diagnostics:diagover}
38
39 \noindent
40 The diagnostics are computed at various times and places within the GCM. Because the
41 MIT GCM may employ a staggered grid, diagnostics may be computed at grid box centers,
42 corners, or edges, and at the middle or edge in the vertical. Some diagnostics are scalars,
43 while others are components of vectors. An internal array is defined which contains
44 information concerning various grid attributes of each diagnostic. The GDIAG
45 array (in common block \\diagnostics in file diagnostics.h) is internally defined as a
46 character*8 variable, and is equivalenced to a character*1 "parse" array in output in
47 order to extract the grid-attribute information. The GDIAG array is described in
48 Table \ref{tab:diagnostics:gdiag.tabl}.
49
50 \begin{table}
51 \caption{Diagnostic Parsing Array}
52 \label{tab:diagnostics:gdiag.tabl}
53 \begin{center}
54 \begin{tabular}{ |c|c|l| }
55 \hline
56 \multicolumn{3}{|c|}{\bf Diagnostic Parsing Array} \\
57 \hline
58 \hline
59 Array & Value & Description \\
60 \hline
61 parse(1) & $\rightarrow$ S & Scalar Diagnostic \\
62 & $\rightarrow$ U & U-vector component Diagnostic \\
63 & $\rightarrow$ V & V-vector component Diagnostic \\ \hline
64 parse(2) & $\rightarrow$ U & C-Grid U-Point \\
65 & $\rightarrow$ V & C-Grid V-Point \\
66 & $\rightarrow$ M & C-Grid Mass Point \\
67 & $\rightarrow$ Z & C-Grid Vorticity (Corner) Point \\ \hline
68 parse(3) & $\rightarrow$ R & Not Currently in Use \\ \hline
69 parse(4) & $\rightarrow$ P & Positive Definite Diagnostic \\ \hline
70 parse(5) & $\rightarrow$ C & Counter Diagnostic \\
71 & $\rightarrow$ D & Disabled Diagnostic for output \\ \hline
72 parse(6-8) & $\rightarrow$ C & 3-digit integer corresponding to \\
73 & & vector or counter component mate \\ \hline
74 \end{tabular}
75 \addcontentsline{lot}{section}{Table 3: Diagnostic Parsing Array}
76 \end{center}
77 \end{table}
78
79
80 \noindent
81 As an example, consider a diagnostic whose associated GDIAG parameter is equal
82 to ``UU 002''. From GDIAG we can determine that this diagnostic is a
83 U-vector component located at the C-grid U-point.
84 Its corresponding V-component diagnostic is located in Diagnostic \# 002.
85
86
87 \noindent
88 In this way, each Diagnostic in the model has its attributes (ie. vector or scalar,
89 C-grid location, etc.) defined internally. The Output routines use this information
90 in order to determine what type of transformations need to be performed. Any
91 interpolations are done at the time of output rather than during each model step.
92 In this way the User has flexibility in determining the type of gridded data which
93 is output.
94
95
96 \noindent
97 There are several utilities within the GCM available to users to enable, disable,
98 clear, write and retrieve model diagnostics, and may be called from any routine.
99 The available utilities and the CALL sequences are listed below.
100
101
102 \noindent
103 {\bf fill\_diagnostics}: This routine will increment the specified diagnostic
104 quantity with a field sent through the argument list.
105
106
107 \noindent
108 \begin{tabbing}
109 XXXXXXXXX\=XXXXXX\= \kill
110 \> call fill\_diagnostics (myThid, chardiag, levflg, nlevs, \\
111 bibjflg, bi, bj, arrayin) \\
112 \\
113 where \> myThid \>= Current Process(or) \\
114 \> chardiag \>= Character *8 expression for diag to fill \\
115 \> levflg \>= Integer flag for vertical levels: \\
116 \> \> 0 indicates multiple levels incremented in qdiag \\
117 \> \> non-0 (any integer) - WHICH single level to increment. \\
118 \> \> negative integer - the input data array is single-leveled \\
119 \> \> positive integer - the input data array is multi-leveled \\
120 \> nlevs \>= indicates Number of levels to be filled (1 if levflg <> 0) \\
121 \> \> positive: fill in "nlevs" levels in the same order as \\
122 \> \> the input array \\
123 \> \> negative: fill in -nlevs levels in reverse order. \\
124 \> bibjflg \>= Integer flag to indicate instructions for bi bj loop \\
125 \> \> 0 indicates that the bi-bj loop must be done here \\
126 \> \> 1 indicates that the bi-bj loop is done OUTSIDE \\
127 \> \> 2 indicates that the bi-bj loop is done OUTSIDE \\
128 \> \> AND that we have been sent a local array \\
129 \> \> 3 indicates that the bi-bj loop is done OUTSIDE \\
130 \> \> AND that we have been sent a local array \\
131 \> \> AND that the array has the shadow regions \\
132 \> bi \>= X-direction process(or) number - used for bibjflg=1-3 \\
133 \> bj \>= Y-direction process(or) number - used for bibjflg=1-3 \\
134 \> arrayin \>= Field to increment diagnostics array \\
135 \end{tabbing}
136
137
138 \noindent
139 {\bf setdiag}: This subroutine enables a diagnostic from the Diagnostic Menu, meaning
140 that space is allocated for the diagnostic and the model routines will increment the
141 diagnostic value during execution. This routine is the underlying interface
142 between the user and the desired diagnostic. The diagnostic is referenced by its diagnostic
143 number from the menu, and its calling sequence is given by:
144
145 \noindent
146 \begin{tabbing}
147 XXXXXXXXX\=XXXXXX\= \kill
148 \> call setdiag (num) \\
149 \\
150 where \> num \>= Diagnostic number from menu \\
151 \end{tabbing}
152
153 \noindent
154 {\bf getdiag}: This subroutine retrieves the value of a model diagnostic. This routine
155 is particulary useful when called from a user output routine, although it can be called
156 from any routine. This routine returns the time-averaged value of the diagnostic by
157 dividing the current accumulated diagnostic value by its corresponding counter. This
158 routine does not change the value of the diagnostic itself, that is, it does not replace
159 the diagnostic with its time-average. The calling sequence for this routine is givin by:
160
161 \noindent
162 \begin{tabbing}
163 XXXXXXXXX\=XXXXXX\= \kill
164 \> call getdiag (lev,num,qtmp,undef) \\
165 \\
166 where \> lev \>= Model Level at which the diagnostic is desired \\
167 \> num \>= Diagnostic number from menu \\
168 \> qtmp \>= Time-Averaged Diagnostic Output \\
169 \> undef \>= Fill value to be used when diagnostic is undefined \\
170 \end{tabbing}
171
172 \noindent
173 {\bf clrdiag}: This subroutine initializes the values of model diagnostics to zero, and is
174 particularly useful when called from user output routines to re-initialize diagnostics
175 during the run. The calling sequence is:
176
177 \noindent
178 \begin{tabbing}
179 XXXXXXXXX\=XXXXXX\= \kill
180 \> call clrdiag (num) \\
181 \\
182 where \> num \>= Diagnostic number from menu \\
183 \end{tabbing}
184
185 \noindent
186 {\bf zapdiag}: This entry into subroutine SETDIAG disables model diagnostics, meaning
187 that the diagnostic is no longer available to the user. The memory previously allocated
188 to the diagnostic is released when ZAPDIAG is invoked. The calling sequence is given by:
189
190 \noindent
191 \begin{tabbing}
192 XXXXXXXXX\=XXXXXX\= \kill
193 \> call zapdiag (NUM) \\
194 \\
195 where \> num \>= Diagnostic number from menu \\
196 \end{tabbing}
197
198
199 \subsection{Usage Notes}
200 \label{sec:diagnostics:usersguide}
201
202 \noindent
203 We begin this section with a discussion on the manner in which computer
204 memory is allocated for diagnostics. All GCM diagnostic quantities are stored in the
205 single diagnostic array QDIAG which is located in the file \\
206 \filelink{pkg/diagnostics/diagnostics.h}{pkg-diagnostics-diagnostics.h}.
207 and has the form:
208
209 common /diagnostics/ qdiag(1-Olx,sNx+Olx,1-Olx,sNx+Olx,numdiags,Nsx,Nsy)
210
211 \noindent
212 where numdiags is an Integer variable which should be set equal to the number of
213 enabled diagnostics, and qdiag is a three-dimensional array. The first two-dimensions
214 of qdiag correspond to the horizontal dimension of a given diagnostic, while the third
215 dimension of qdiag is used to identify diagnostic fields and levels combined. In order
216 to minimize the memory requirement of the model for diagnostics, the default GCM
217 executable is compiled with room for only one horizontal diagnostic array, or with
218 numdiags set to 1. In order for the User to enable more than 1 two-dimensional diagnostic,
219 the size of the diagnostics common must be expanded to accomodate the desired diagnostics.
220 This can be accomplished by manually changing the parameter numdiags in the
221 file \filelink{pkg/diagnostics/diagnostics\_SIZE.h}{pkg-diagnostics-diagnostics_SIZE.h}.
222 numdiags should be set greater than or equal to the sum of all the diagnostics activated
223 for output each multiplied by the number of levels defined for that diagnostic quantity.
224 This is illustrated in the example below:
225
226 \noindent
227 To use the diagnostics package, other than enabling it in packages.conf
228 and turning the usediagnostics flag in data.pkg to .TRUE., a namelist
229 must be supplied in the run directory called data.diagnostics. The namelist
230 will activate a user-defined list of diagnostics quantities to be computed,
231 specify the frequency of output, the number of levels, and the name of
232 up to 10 separate output files. A sample data.diagnostics namelist file:
233
234 \noindent
235 $\#$ Diagnostic Package Choices \\
236 $\&$diagnostics\_list \\
237 frequency(1) = 10, \ \\
238 levels(1,1) = 1.,2.,3.,4.,5., \ \\
239 fields(1,1) = 'UVEL ','VVEL ', \ \\
240 filename(1) = 'diagout1', \ \\
241 frequency(2) = 100, \ \\
242 levels(1,2) = 1.,2.,3.,4.,5., \ \\
243 fields(1,2) = 'THETA ','SALT ', \ \\
244 filename(2) = 'diagout2', \ \\
245 $\&$end \ \\
246
247 \noindent
248 In this example, there are two output files that will be generated
249 for each tile and for each output time. The first set of output files
250 has the prefix diagout1, does time averaging every 10 time steps
251 (frequency is 10), they will write fields which are multiple-level
252 fields and output levels 1-5. The names of diagnostics quantities are
253 UVEL and VVEL. The second set of output files
254 has the prefix diagout2, does time averaging every 100 time steps,
255 they include fields which are multiple-level fields, levels output are 1-5,
256 and the names of diagnostics quantities are THETA and SALT.
257
258 \noindent
259 In order to define and include as part of the diagnostic output any field
260 that is desired for a particular experiment, two steps must be taken. The
261 first is to enable the ``User Diagnostic'' in data.diagnostics. This is
262 accomplished by setting one of the fields slots to either UDIAG1 through
263 UDIAG10, for multi-level fields, or SDIAG1 through SDIAG10 for single level
264 fields. These are listed in the diagnostics menu. The second step is to
265 add a call to fill\_diagnostics from the subroutine in which the quantity
266 desired for diagnostic output is computed.
267
268 \newpage
269
270 \subsubsection{GCM Diagnostic Menu}
271 \label{sec:diagnostics:menu}
272
273 \begin{tabular}{lllll}
274 \hline\hline
275 N & NAME & UNITS & LEVELS & DESCRIPTION \\
276 \hline
277
278 &\\
279 84 & SDIAG1 & & 1
280 &\begin{minipage}[t]{3in}
281 {User-Defined Surface Diagnostic-1}
282 \end{minipage}\\
283 85 & SDIAG2 & & 1
284 &\begin{minipage}[t]{3in}
285 {User-Defined Surface Diagnostic-2}
286 \end{minipage}\\
287 86 & UDIAG1 & & Nrphys
288 &\begin{minipage}[t]{3in}
289 {User-Defined Upper-Air Diagnostic-1}
290 \end{minipage}\\
291 87 & UDIAG2 & & Nrphys
292 &\begin{minipage}[t]{3in}
293 {User-Defined Upper-Air Diagnostic-2}
294 \end{minipage}\\
295 124& SDIAG3 & & 1
296 &\begin{minipage}[t]{3in}
297 {User-Defined Surface Diagnostic-3}
298 \end{minipage}\\
299 125& SDIAG4 & & 1
300 &\begin{minipage}[t]{3in}
301 {User-Defined Surface Diagnostic-4}
302 \end{minipage}\\
303 126& SDIAG5 & & 1
304 &\begin{minipage}[t]{3in}
305 {User-Defined Surface Diagnostic-5}
306 \end{minipage}\\
307 127& SDIAG6 & & 1
308 &\begin{minipage}[t]{3in}
309 {User-Defined Surface Diagnostic-6}
310 \end{minipage}\\
311 128& SDIAG7 & & 1
312 &\begin{minipage}[t]{3in}
313 {User-Defined Surface Diagnostic-7}
314 \end{minipage}\\
315 129& SDIAG8 & & 1
316 &\begin{minipage}[t]{3in}
317 {User-Defined Surface Diagnostic-8}
318 \end{minipage}\\
319 130& SDIAG9 & & 1
320 &\begin{minipage}[t]{3in}
321 {User-Defined Surface Diagnostic-9}
322 \end{minipage}\\
323 131& SDIAG10 & & 1
324 &\begin{minipage}[t]{3in}
325 {User-Defined Surface Diagnostic-1-}
326 \end{minipage}\\
327 132& UDIAG3 & & Nrphys
328 &\begin{minipage}[t]{3in}
329 {User-Defined Multi-Level Diagnostic-3}
330 \end{minipage}\\
331 133& UDIAG4 & & Nrphys
332 &\begin{minipage}[t]{3in}
333 {User-Defined Multi-Level Diagnostic-4}
334 \end{minipage}\\
335 134& UDIAG5 & & Nrphys
336 &\begin{minipage}[t]{3in}
337 {User-Defined Multi-Level Diagnostic-5}
338 \end{minipage}\\
339 135& UDIAG6 & & Nrphys
340 &\begin{minipage}[t]{3in}
341 {User-Defined Multi-Level Diagnostic-6}
342 \end{minipage}\\
343 136& UDIAG7 & & Nrphys
344 &\begin{minipage}[t]{3in}
345 {User-Defined Multi-Level Diagnostic-7}
346 \end{minipage}\\
347 137& UDIAG8 & & Nrphys
348 &\begin{minipage}[t]{3in}
349 {User-Defined Multi-Level Diagnostic-8}
350 \end{minipage}\\
351 138& UDIAG9 & & Nrphys
352 &\begin{minipage}[t]{3in}
353 {User-Defined Multi-Level Diagnostic-9}
354 \end{minipage}\\
355 139& UDIAG10 & & Nrphys
356 &\begin{minipage}[t]{3in}
357 {User-Defined Multi-Level Diagnostic-10}
358 \end{minipage}\\
359 \end{tabular}
360 \vspace{1.5in}
361 \vfill
362
363 \newpage
364 \vspace*{\fill}
365 \begin{tabular}{lllll}
366 \hline\hline
367 N & NAME & UNITS & LEVELS & DESCRIPTION \\
368 \hline
369
370 &\\
371 238& ETAN & $(hPa,m)$ & 1
372 &\begin{minipage}[t]{3in}
373 {Perturbation of Surface (pressure, height)}
374 \end{minipage}\\
375 239& ETANSQ & $(hPa^2,m^2)$ & 1
376 &\begin{minipage}[t]{3in}
377 {Square of Perturbation of Surface (pressure, height)}
378 \end{minipage}\\
379 240& THETA & $deg K$ & Nr
380 &\begin{minipage}[t]{3in}
381 {Potential Temperature}
382 \end{minipage}\\
383 241& SALT & $g/kg$ & Nr
384 &\begin{minipage}[t]{3in}
385 {Salt (or Water Vapor Mixing Ratio)}
386 \end{minipage}\\
387 242& UVEL & $m/sec$ & Nr
388 &\begin{minipage}[t]{3in}
389 {U-Velocity}
390 \end{minipage}\\
391 243& VVEL & $m/sec$ & Nr
392 &\begin{minipage}[t]{3in}
393 {V-Velocity}
394 \end{minipage}\\
395 244& WVEL & $m/sec$ & Nr
396 &\begin{minipage}[t]{3in}
397 {Vertical-Velocity}
398 \end{minipage}\\
399 245& THETASQ & $deg^2$ & Nr
400 &\begin{minipage}[t]{3in}
401 {Square of Potential Temperature}
402 \end{minipage}\\
403 246& SALTSQ & $g^2/{kg}^2$ & Nr
404 &\begin{minipage}[t]{3in}
405 {Square of Salt (or Water Vapor Mixing Ratio)}
406 \end{minipage}\\
407 247& UVELSQ & $m^2/sec^2$ & Nr
408 &\begin{minipage}[t]{3in}
409 {Square of U-Velocity}
410 \end{minipage}\\
411 248& VVELSQ & $m^2/sec^2$ & Nr
412 &\begin{minipage}[t]{3in}
413 {Square of V-Velocity}
414 \end{minipage}\\
415 249& WVELSQ & $m^2/sec^2$ & Nr
416 &\begin{minipage}[t]{3in}
417 {Square of Vertical-Velocity}
418 \end{minipage}\\
419 250& UVELVVEL & $m^2/sec^2$ & Nr
420 &\begin{minipage}[t]{3in}
421 {Meridional Transport of Zonal Momentum}
422 \end{minipage}\\
423 251& UVELMASS & $m/sec$ & Nr
424 &\begin{minipage}[t]{3in}
425 {Zonal Mass-Weighted Component of Velocity}
426 \end{minipage}\\
427 252& VVELMASS & $m/sec$ & Nr
428 &\begin{minipage}[t]{3in}
429 {Meridional Mass-Weighted Component of Velocity}
430 \end{minipage}\\
431 253& WVELMASS & $m/sec$ & Nr
432 &\begin{minipage}[t]{3in}
433 {Vertical Mass-Weighted Component of Velocity}
434 \end{minipage}\\
435 254& UTHMASS & $m-deg/sec$ & Nr
436 &\begin{minipage}[t]{3in}
437 {Zonal Mass-Weight Transp of Pot Temp}
438 \end{minipage}\\
439 255& VTHMASS & $m-deg/sec$ & Nr
440 &\begin{minipage}[t]{3in}
441 {Meridional Mass-Weight Transp of Pot Temp}
442 \end{minipage}\\
443 256& WTHMASS & $m-deg/sec$ & Nr
444 &\begin{minipage}[t]{3in}
445 {Vertical Mass-Weight Transp of Pot Temp}
446 \end{minipage}\\
447 257& USLTMASS & $m-kg/sec-kg$ & Nr
448 &\begin{minipage}[t]{3in}
449 {Zonal Mass-Weight Transp of Salt (or W.Vap Mix Rat.)}
450 \end{minipage}\\
451 258& VSLTMASS & $m-kg/sec-kg$ & Nr
452 &\begin{minipage}[t]{3in}
453 {Meridional Mass-Weight Transp of Salt (or W.Vap Mix Rat.)}
454 \end{minipage}\\
455 259& WSLTMASS & $m-kg/sec-kg$ & Nr
456 &\begin{minipage}[t]{3in}
457 {Vertical Mass-Weight Transp of Salt (or W.Vap Mix Rat.)}
458 \end{minipage}\\
459 260& UVELTH & $m-deg/sec$ & Nr
460 &\begin{minipage}[t]{3in}
461 {Zonal Transp of Pot Temp}
462 \end{minipage}\\
463 261& VVELTH & $m-deg/sec$ & Nr
464 &\begin{minipage}[t]{3in}
465 {Meridional Transp of Pot Temp}
466 \end{minipage}\\
467 262& WVELTH & $m-deg/sec$ & Nr
468 &\begin{minipage}[t]{3in}
469 {Vertical Transp of Pot Temp}
470 \end{minipage}\\
471 263& UVELSLT & $m-kg/sec-kg$ & Nr
472 &\begin{minipage}[t]{3in}
473 {Zonal Transp of Salt (or W.Vap Mix Rat.)}
474 \end{minipage}\\
475 264& VVELSLT & $m-kg/sec-kg$ & Nr
476 &\begin{minipage}[t]{3in}
477 {Meridional Transp of Salt (or W.Vap Mix Rat.)}
478 \end{minipage}\\
479 265& WVELSLT & $m-kg/sec-kg$ & Nr
480 &\begin{minipage}[t]{3in}
481 {Vertical Transp of Salt (or W.Vap Mix Rat.)}
482 \end{minipage}\\
483 275& WSLTMASS & $m-kg/sec-kg$ & Nr
484 &\begin{minipage}[t]{3in}
485 {Vertical Mass-Weight Transp of Salt (or W.Vap Mix Rat.)}
486 \end{minipage}\\
487 298& VISCA4 & $m^4/sec$ & 1
488 &\begin{minipage}[t]{3in}
489 {Biharmonic Viscosity Coefficient}
490 \end{minipage}\\
491 299& VISCAH & $m^2/sec$ & 1
492 &\begin{minipage}[t]{3in}
493 {Harmonic Viscosity Coefficient}
494 \end{minipage}\\
495 300& DRHODR & $kg/m^3/{r-unit}$ & Nr
496 &\begin{minipage}[t]{3in}
497 {Stratification: d.Sigma/dr}
498 \end{minipage}\\
499 301& DETADT2 & ${r-unit}^2/s^2$ & 1
500 &\begin{minipage}[t]{3in}
501 {Square of Eta (Surf.P,SSH) Tendency}
502 \end{minipage}\\
503 \end{tabular}
504 \vspace{1.5in}
505 \vfill
506
507 \newpage
508
509 \subsubsection{Diagnostic Description}
510
511 In this section we list and describe the diagnostic quantities available within the
512 GCM. The diagnostics are listed in the order that they appear in the
513 Diagnostic Menu, Section \ref{sec:diagnostics:menu}.
514 In all cases, each diagnostic as currently archived on the output datasets
515 is time-averaged over its diagnostic output frequency:
516
517 \[
518 {\bf DIAGNOSTIC} = {1 \over TTOT} \sum_{t=1}^{t=TTOT} diag(t)
519 \]
520 where $TTOT = {{\bf NQDIAG} \over \Delta t}$, {\bf NQDIAG} is the
521 output frequency of the diagnostic, and $\Delta t$ is
522 the timestep over which the diagnostic is updated.
523
524 \subsection{Dos and Donts}
525
526 \subsection{Diagnostics Reference}
527

  ViewVC Help
Powered by ViewVC 1.1.22