ROMS
Loading...
Searching...
No Matches
mod_ncparam.F
Go to the documentation of this file.
1#include "cppdefs.h"
3!
4!git $Id$
5!================================================== Hernan G. Arango ===
6! Copyright (c) 2002-2025 The ROMS Group !
7! Licensed under a MIT/X style license !
8! See License_ROMS.md !
9!=======================================================================
10! !
11! This MODULE contains all the variables associated with input and !
12! output NetCDF files. The IO model is very generic and easy to !
13! change or expand. The NetCDF files can be in any language. All !
14! the IO information is managed using the following variables: !
15! !
16! Vname Input/output variables names and attributes: !
17! Vname(1,*) => field variable name. !
18! Vname(2,*) => long-name attribute. !
19! Vname(3,*) => units attribute. !
20! Vname(4,*) => field attribute. !
21! Vname(5,*) => associated time variable name. !
22! Vname(6,*) => standard-name attribute. !
23! Tname Input/output associated time variables names. !
24! !
25! Cinfo Input/output file names associated with each field !
26! !
27#if defined PIO_LIB && defined DISTRIBUTE
28! Dinfo Input/output fields descriptors information: !
29! Dinfo(1,*) => field variable descriptor. !
30! Dinfo(2,*) => associated time variable descriptor. !
31#endif
32! Linfo Input/output fields logical information: !
33! Linfo(1,*) => switch indicating grided data. !
34! Linfo(2,*) => switch indicating time cycling. !
35! Linfo(3,*) => switch indicating only one-time !
36! record available. !
37! Linfo(4,*) => switch indicating special record !
38! processing (like tides) !
39! Linfo(5,*) => switch to indicate processing the first !
40! record of a file or multi-file. !
41! Linfo(6,*) => switch to indicate processing the last !
42! record of a file or multi-file. !
43! !
44! Iinfo Input/output fields integer information: !
45! Iinfo( 1,*) => variable grid type. !
46! Iinfo( 2,*) => field variable NetCDF ID. !
47! Iinfo( 3,*) => associated time variable NetCDF ID. !
48! Iinfo( 4,*) => number of time records. !
49! Iinfo( 5,*) => size of first spatial dimension. !
50! Iinfo( 6,*) => size of second spatial dimension. !
51! Iinfo( 7,*) => size of third spatial dimension. !
52! Iinfo( 8,*) => rolling two-time levels index. !
53! Iinfo( 9,*) => latest processed time record. !
54! Iinfo(10,*) => number of field multi-files. !
55! Iinfo(11,*) => number of variable dimensions in file. !
56! !
57! Finfo Input/output field floating-point information: !
58! Finfo( 1,*) => Starting time (days) of data. !
59! Finfo( 2,*) => Ending time (days) of data. !
60! Finfo( 3,*) => Data time lower bound (days) enclosing !
61! model starting time. !
62! Finfo( 4,*) => Data time upper bound (days) enclosing !
63! model starting time. !
64! Finfo( 5,*) => length (days) of time cycling. !
65! Finfo( 6,*) => Scale to convert time to day units. !
66! Finfo( 7,*) => latest monotonic time (sec). !
67! Finfo( 8,*) => minimum value for current data. !
68! Finfo( 9,*) => maximum value for current data. !
69! Finfo(10,*) => value of scale_factor attribute if any. !
70! Fscale Scale to convert input data to model units. !
71! Fpoint Latest two-time records of input point data. !
72! Tintrp Time (sec) of latest field snapshots used for !
73! interpolation. !
74! Vtime Latest two-time values of processed input data. !
75! !
76!=======================================================================
77!
78 USE mod_param
79#if defined PIO_LIB && defined DISTRIBUTE
80 USE mod_iounits
81#endif
82!
83 implicit none
84!
85 PUBLIC :: allocate_ncparam
86 PUBLIC :: deallocate_ncparam
87 PUBLIC :: initialize_ncparam
88!
89!-----------------------------------------------------------------------
90! Define variables in module.
91!-----------------------------------------------------------------------
92!
93! Set type of IO NetCDF files interface library
94!
95 integer, parameter :: io_nf90 = 1 ! standard NetCDF-3, NetCDF-4
96 integer, parameter :: io_pio = 2 ! Parallel-IO, SCORPIO
97!
98 integer :: inp_lib ! input NetCDF library
99 integer :: out_lib ! output NetCDF library
100!
101! Maximum number of variables in a generic NetCDF file (MV) and
102! maximum number of variables in information arrays (NV).
103!
104 integer, parameter :: mv = 1400
105 integer, parameter :: nv = 1400
106!
107! Maximum number of dimension IDs stored in local array DimIDs used to
108! defined variable dimensions in output NetCDF files.
109!
110 integer, parameter :: ndimid = 33
111!
112! Number of horizontal interior and boundary water points.
113!
114 integer, allocatable :: nxyp(:) ! PSI water points
115 integer, allocatable :: nxyr(:) ! RHO water points
116 integer, allocatable :: nxyu(:) ! U water points
117 integer, allocatable :: nxyv(:) ! V water points
118!
119! Number of horizontal interior water points only.
120!
121 integer, allocatable :: nwaterr(:) ! RHO water points
122 integer, allocatable :: nwateru(:) ! U water points
123 integer, allocatable :: nwaterv(:) ! V water points
124!
125! Lower and upper bound ranges for RHO-type variables for processing
126! state vector and observations.
127!
128 integer, allocatable :: rilb(:)
129 integer, allocatable :: riub(:)
130 integer, allocatable :: rjlb(:)
131 integer, allocatable :: rjub(:)
132!
133 real(r8), allocatable :: rxmin(:)
134 real(r8), allocatable :: rxmax(:)
135 real(r8), allocatable :: rymin(:)
136 real(r8), allocatable :: rymax(:)
137!
138! Lower and upper bound ranges for U-type variables for processing
139! state vector and observations.
140!
141 integer, allocatable :: uilb(:)
142 integer, allocatable :: uiub(:)
143 integer, allocatable :: ujlb(:)
144 integer, allocatable :: ujub(:)
145!
146 real(r8), allocatable :: uxmin(:)
147 real(r8), allocatable :: uxmax(:)
148 real(r8), allocatable :: uymin(:)
149 real(r8), allocatable :: uymax(:)
150!
151! Lower and upper bound ranges for V-type variables for processing
152! state vector and observations.
153!
154 integer, allocatable :: vilb(:)
155 integer, allocatable :: viub(:)
156 integer, allocatable :: vjlb(:)
157 integer, allocatable :: vjub(:)
158!
159 real(r8), allocatable :: vxmin(:)
160 real(r8), allocatable :: vxmax(:)
161 real(r8), allocatable :: vymin(:)
162 real(r8), allocatable :: vymax(:)
163!
164! Switches indicating which variables are written to output files.
165!
166 logical, allocatable :: aout(:,:) ! average file switches
167 logical, allocatable :: dout(:,:) ! diagnostic file switches
168 logical, allocatable :: hout(:,:) ! history file switches
169 logical, allocatable :: qout(:,:) ! quicksave file switches
170 logical, allocatable :: sout(:,:) ! station file switches
171!
172! Grid identification indices.
173!
174 integer :: idxgrd = -1 ! XI-grid position
175 integer :: idygrd = -2 ! ETA-grid position
176 integer :: idzgrd = -3 ! S-grid position
177 integer :: iddpth = -4 ! depth
178 integer :: idglon = -5 ! longitude
179 integer :: idglat = -6 ! latitude
180
181#ifdef FLOAT_OYSTER
182!
183! Biological floats identification indices.
184!
185 integer :: idsize = -7 ! biological float size (length)
186 integer :: idswim = -8 ! biological float swimming time
187 integer :: idwbio = -9 ! biological float w-velocity
188 integer :: idwsin = -10 ! biological float sinking velocity
189#endif
190!
191! Input/output identification indices.
192!
193 integer :: idangr ! angle between XI-axis and EAST
194 integer :: idbath ! time-dependent bathymetry
195 integer :: idbger ! background error at observations
196 integer :: idbgth ! threshold for BQC check
197 integer :: idcfra ! cloud fraction
198 integer :: idcosw ! COS(omega(k)*t)
199 integer :: idcos2 ! COS(omega(k)*t)*COS(omega(l)*t)
200 integer :: iddano ! density anomaly
201 integer :: iddiff(2) ! temperature and salinity diffusion
202 integer :: iddqdt ! heat flux sensitivity to SST
203 integer :: idempf ! E-P from bulk_flux.F
204 integer :: idevap ! evaporation rate
205 integer :: idfcor ! Coriolis parameter
206 integer :: idfsur ! free-surface
207 integer :: idfsud ! detided free-surface
208 integer :: idfsuh ! free-surface tide harmonics
209 integer :: idghat(2) ! KPP nonlocal transport
210 integer :: idgtnc ! generic tracer nudging coefficients
211 integer :: idjwty ! Jerlov water type
212 integer :: idhbbl ! depth of bottom boundary layer
213 integer :: idhsbl ! depth of surface boundary layer
214 integer :: idhzdz ! level thickness
215 integer :: idincr ! 4D-Var analysis increment
216 integer :: idinno ! 4D-Var innovation vector
217 integer :: idkhor ! convolution horizontal diffusion
218 integer :: idkver ! convolution vertical diffusion
219 integer :: idlatp ! latitude of PSI-points
220 integer :: idlatr ! latitude of RHO-points
221 integer :: idlatu ! latitude of U-points
222 integer :: idlatv ! latitude of V-points
223 integer :: idldwn ! downwelling longwave radiation flux
224 integer :: idlonp ! longitude of PSI-points
225 integer :: idlonr ! longitude of RHO-points
226 integer :: idlonu ! longitude of U-points
227 integer :: idlonv ! longitude of V-points
228 integer :: idlhea ! net latent heat flux
229 integer :: idlrad ! net longwave radiation flux
230 integer :: idmadh ! ADM interpolation weights
231 integer :: idmomi ! Initial model-observation misfit
232 integer :: idmomf ! final model-observation misfit
233 integer :: idmskp ! land/mask on PSI-points
234 integer :: idmskr ! land/mask on RHO-points
235 integer :: idmsku ! land/mask on U-points
236 integer :: idmskv ! land/mask on V-points
237 integer :: idmtke ! turbulent kinetic energy
238 integer :: idmtls ! turbulent length scale
239 integer :: idm2nc ! 2D momentum nudging coefficients
240 integer :: idm3nc ! 2D momentum nudging coefficients
241 integer :: idnlmf ! final NLM at observation locations
242 integer :: idnlmi ! initial NLM at observation locations
243 integer :: idnlmo ! NLM at observations locations
244 integer :: idnlmp ! unvetted prior NLM at obs locations
245 integer :: idnlmu ! unvetted NLM at obs locations
246 integer :: idnobs ! number of observations
247 integer :: idobsd ! observations depth
248 integer :: idobss ! observations screening scale
249 integer :: idobst ! observations time
250 integer :: idobsx ! observations X-grid location
251 integer :: idobsy ! observations Y-grid location
252 integer :: idobsz ! observations Z-grid location
253 integer :: idoday ! observations survey time
254 integer :: idoerr ! observations error
255 integer :: idolat ! observations latitude
256 integer :: idolon ! observations longitude
257 integer :: idomet ! observations meta value
258 integer :: idopro ! observations provenance
259 integer :: idotyp ! observations type
260 integer :: idoval ! observations value
261 integer :: idovel ! omega vertical velocity
262 integer :: idovil ! omega vertical velocity implicit
263 integer :: idpair ! surface air pressure
264 integer :: idpbar ! streamfunction
265 integer :: idpwet ! wet/dry mask on PSI-points
266 integer :: idpmdx ! inverse grid x-spacing
267 integer :: idpndy ! inverse grid y-spacing
268 integer :: idpthr ! depths of RHO-points
269 integer :: idpthu ! depths of U-points
270 integer :: idpthv ! depths of V-points
271 integer :: idpthw ! depths of W-points
272 integer :: idqair ! surface air humidity
273 integer :: idrdir ! river runoff direction
274 integer :: idrepo ! river runoff ETA-positions
275 integer :: idrflg ! river runoff flag
276 integer :: idrtra ! river runoff mass transport
277 integer :: idruct ! RHS of U-momentum coupling term
278 integer :: idru2d ! RHS of 2D U-momentum
279 integer :: idru3d ! RHS of total U-momentum
280 integer :: idrvct ! RHS of V-momentum coupling term
281 integer :: idrv2d ! RHS of 2D V-momentum
282 integer :: idrv3d ! RHS of total V-momentum
283 integer :: idrxpo ! river runoff XI-positions
284 integer :: idrvsh ! river runoff transport profile
285 integer :: idrwet ! wet/dry mask on RHO-points
286 integer :: idrzet ! RHS of free-surface
287 integer :: idrain ! rainfall rate
288 integer :: idragl ! bottom linear drag coefficient
289 integer :: idragq ! bottom quadratic drag coefficient
290 integer :: idsdif ! vertical S-diffusion coefficient
291 integer :: idsinw ! SIN(omega(k)*t)
292 integer :: idsin2 ! SIN(omega(k)*t)*SIN(omega(l)*t)
293 integer :: idsrad ! net shortwave radiation flux
294 integer :: idsshc ! SSH climatology
295 integer :: idsssc ! SSS climatology
296 integer :: idsstc ! SST climatology
297 integer :: idshea ! net sensible heat flux
298 integer :: idswcw ! SIN(omega(k)*t)*COS(omega(l)*t)
299 integer :: idresi ! 4D-Var residual vector
300 integer :: idsfwf ! surface freswater flux
301 integer :: idscor ! ADM sensitivity scope RHO-mask
302 integer :: idscou ! ADM sensitivity scope U-mask
303 integer :: idscov ! ADM sensitivity scope V-mask
304 integer :: idtlmo ! TLM at observation locations
305 integer :: idtair ! surface air temperature
306 integer :: idtdif ! vertical T-diffusion coefficient
307 integer :: idtime ! ocean time
308 integer :: idtopo ! time-independent bathymetry
309 integer :: idtref ! tidal reference date for zero phase
310 integer :: idtper ! tidal period
311 integer :: idtvan ! tidal current angle
312 integer :: idtvma ! maximum tidal current
313 integer :: idtvmi ! minimum tidal current
314 integer :: idtvph ! tidal current phase
315 integer :: idtzam ! tidal elevation amplitude
316 integer :: idtzph ! tidal elevation phase
317 integer :: idu2da ! accumulated 2D U-velocity
318 integer :: idu2rs ! 2D total U-radiation stress
319 integer :: idu3rs ! 3D total U-radiation stress
320 integer :: idu2sd ! 2D U-Stokes velocity
321 integer :: idu3sd ! 3D U-Stokes velocity
322 integer :: iduads ! 3D U-velocity adjoint sensitivity
323 integer :: iduair ! surface U-wind
324 integer :: iduaie ! Eastward surface U-wind
325 integer :: idubar ! 2D U-velocity
326 integer :: idubas ! 2D U-velocity adjoint sensitivity
327 integer :: idubcl ! 2D U-velocity climatology
328 integer :: idubcs ! bottom max U-momentum-wave stress
329 integer :: idubed ! bed load U-direction
330 integer :: idubms ! bottom U-momentum stress
331 integer :: idubot ! bed wave orbital U-velocity
332 integer :: idubrs ! bottom U-current stress
333 integer :: idubtf ! 2D U-velocity impulse forcing
334 integer :: idubur ! bottom U-velocity above bed
335 integer :: idubws ! bottom U-wave stress
336 integer :: iduclm ! 3D U-velocity climatology
337 integer :: idufx1 ! time averaged U-flux for 2D
338 integer :: idufx2 ! time averaged U-flux for 3D
339 integer :: idusms ! surface U-momentum stress
340 integer :: idusue ! model surface eastward velocity
341 integer :: idusur ! surface U-velocity
342 integer :: idutlf ! 3D U-velocity impulse forcing
343 integer :: iduvel ! 3D U-velocity
344 integer :: iduvwc ! bottom wave-current stress magnitude
345 integer :: iduwav ! 2D U-velocity Kirby and Chen
346 integer :: iduwet ! wet/dry mask on U-points
347 integer :: idu2dd ! detided 2D U-velocity
348 integer :: idu2dh ! 2D U-velocity tide harmonics
349 integer :: idu2de ! 2D eastward velocity at RHO-points
350 integer :: idu3dd ! detided 3D U-velocity
351 integer :: idu3dh ! 3D U-velocity tide harmonics
352 integer :: idu3de ! 3D eastward velocity at RHO-points
353 integer :: idv2rs ! 2D total V-radiation stress
354 integer :: idv3rs ! 3D total V-radiation stress
355 integer :: idv2sd ! 2D U-Stokes velocity
356 integer :: idv3sd ! 3D U-Stokes velocity
357 integer :: idvads ! 3D V-velocity adjoint sensitivity
358 integer :: idvair ! surface V-wind
359 integer :: idvain ! Northward surface V-wind
360 integer :: idvbar ! 2D V-velocity
361 integer :: idvbas ! 2D V-velocity adjoint sensitivity
362 integer :: idvbcl ! 2D V-velocity climatology
363 integer :: idvbcs ! bottom max V-current-wave stress
364 integer :: idvbed ! bed load V-direction
365 integer :: idvbms ! bottom V-momentum stress
366 integer :: idvbot ! bed wave orbital V-velocity
367 integer :: idvbrs ! bottom V-current stress
368 integer :: idvbtf ! 2D V-velocity impulse forcing
369 integer :: idvbvr ! bottom V-velocity above bed
370 integer :: idvbws ! bottom V-wave stress
371 integer :: idvclm ! 3D V-velocity climatology
372 integer :: idvfx1 ! 2D momentum time-averaged V-flux
373 integer :: idvfx2 ! 3D momentum time-averaged V-flux
374 integer :: idvmls ! vertical mixing length scale
375 integer :: idvmkk ! Kinetic energy vertical mixing
376 integer :: idvmkp ! Length scale vertical mixing
377 integer :: idvsms ! surface V-momentum stress
378 integer :: idvsun ! model surface northward velocity
379 integer :: idvsur ! surface V-velocity
380 integer :: idvtlf ! 3D V-velocity impulse forcing
381 integer :: idvvel ! 3D V-velocity
382 integer :: idvvis ! vertical viscosity coefficient
383 integer :: idvwav ! 2D V-velocity Kirby and Chen
384 integer :: idvwet ! wet/dry mask on V-points
385 integer :: idv2dd ! detided 2D U-velocity
386 integer :: idv2dh ! 2D U-velocity tide harmonics
387 integer :: idv2dn ! 2D northward velocity at RHO-points
388 integer :: idv3dd ! detided 3D U-velocity
389 integer :: idv3dh ! 3D U-velocity tide harmonics
390 integer :: idv3dn ! 3D northward velocity at RHO-points
391 integer :: idw3sd ! 3D W-Stokes omega drift velocity
392 integer :: idw3st ! 3D W-Stokes vertical drift velocity
393 integer :: idw2xx ! 2D radiation stress, Sxx-component
394 integer :: idw2xy ! 2D radiation stress, Sxy-component
395 integer :: idw2yy ! 2D radiation stress, Syy-component
396 integer :: idw3xx ! 3D radiation stress, Sxx-component
397 integer :: idw3xy ! 3D radiation stress, Sxy-component
398 integer :: idw3yy ! 3D radiation stress, Syy-component
399 integer :: idw3zx ! 3D radiation stress, Szx-component
400 integer :: idw3zy ! 3D radiation stress, Szy-component
401 integer :: idwads ! 3D W-velocity adjoint sensitivity
402 integer :: idwamp ! wind-induced wave amplitude
403 integer :: idwam2 ! wind-induced wave amplitude squared
404 integer :: idwbeh ! wec Bernoulli head
405 integer :: idwbrk ! wind-induced wave breaking
406 integer :: idwdib ! wave dissipation from surface breaking
407 integer :: idwdif ! wave dissipation from bottom friction
408 integer :: idwdip ! wind-induced peak wave direction
409 integer :: idwdir ! wind-induced mean wave direction
410 integer :: idwdis ! wind-induced wave roller dissipation
411 integer :: idwdiw ! wave dissipation from whitecapping
412 integer :: idwlen ! wind-induced mean wave length
413 integer :: idwlep ! wind-induced peak wave length
414 integer :: idwmsk ! wet-dry mask
415 integer :: idworb ! wind-induced wave orbital velocity
416 integer :: idwptp ! wind-induced surface wave period
417 integer :: idwpbt ! wind-induced bottom wave period
418 integer :: idwqsp ! wec quasi-static pressure
419 integer :: idwrol ! wave roller action density
420 integer :: idwvds ! wave directional spread
421 integer :: idwvel ! true vertical velocity
422 integer :: idwvqp ! wave spectrum peakedness
423 integer :: idwztw ! wec quasi-static sea level adjustment
424 integer :: idxgrp ! x-locations of PSI-points
425 integer :: idxgrr ! x-locations of RHO-points
426 integer :: idxgru ! x-locations of U-points
427 integer :: idxgrv ! x-locations of V-points
428 integer :: idygrp ! y-locations of PSI-points
429 integer :: idygrr ! y-locations of RHO-points
430 integer :: idygru ! y-locations of U-points
431 integer :: idygrv ! y-locations of V-points
432 integer :: idzobl ! bottom roughness length
433 integer :: idzads ! Free-surface adjoint sensitivity
434 integer :: idztlf ! Free-surface impulse forcing
435 integer :: id2dpv ! 2D potential vorticity
436 integer :: id2drv ! 2D relative vorticity
437 integer :: id3dpv ! 3D potential vorticity
438 integer :: id3drv ! 3D relative vorticity
439!
440! Last used variable ID counter.
441!
442 integer :: last_varid
443!
444! Input/output identification tracer indices.
445!
446 integer, allocatable :: idrtrc(:) ! river runoff for tracers
447 integer, allocatable :: idsurt(:) ! model surface tracers
448 integer, allocatable :: idtads(:) ! tracers adjoint sentivity
449 integer, allocatable :: idtbot(:) ! bottom flux for tracers
450 integer, allocatable :: idtbry(:,:) ! tracers boundary
451 integer, allocatable :: idtclm(:) ! tracers climatology
452 integer, allocatable :: idtnud(:) ! tracers nudge coefficient
453 integer, allocatable :: idtsur(:) ! surface flux for tracers
454 integer, allocatable :: idttlf(:) ! tracers impulse forcing
455!
456! Boundary conditions identification indices.
457!
458 integer :: idu2bc(4) ! 2D U-velocity boundary conditions
459 integer :: idu3bc(4) ! 3D U-velocity boundary conditions
460 integer :: idv2bc(4) ! 2D V-velocity boundary conditions
461 integer :: idv3bc(4) ! 3D V-velocity boundary conditions
462 integer :: idzbry(4) ! free-surface boundary conditions
463!
464! Time-averaged quadratic terms IDs.
465!
466 integer :: idu2av ! <ubar*ubar>
467 integer :: idv2av ! <vbar*vbar>
468 integer :: idzzav ! <zeta*zeta>
469
470 integer :: idhuav ! <Huon>
471 integer :: idhvav ! <Hvom>
472 integer :: iduuav ! <u*u>
473 integer :: iduvav ! <u*v>
474 integer :: idvvav ! <v*v>
475
476 integer, allocatable :: ihutav(:) ! <Huon*t> for active tracers
477 integer, allocatable :: ihvtav(:) ! <Hvom*t> for active tracers
478 integer, allocatable :: idttav(:) ! <t*t> for active tracers
479 integer, allocatable :: idutav(:) ! <u*t> for active tracers
480 integer, allocatable :: idvtav(:) ! <v*t> for active tracers
481
482#ifdef DIAGNOSTICS
483!
484! Tracer/Momentum Diagnostic variable IDs.
485!
486 integer, allocatable :: iddtrc(:,:) ! tracers terms
487 integer, allocatable :: iddu2d(:) ! 2D u-momentum terms
488 integer, allocatable :: iddv2d(:) ! 2D v-momentum terms
489 integer, allocatable :: iddu3d(:) ! 3D u-momentum terms
490 integer, allocatable :: iddv3d(:) ! 3D v-momentum terms
491#endif
492!
493! State variables indices (order is important). Notice that current
494! extra-observations index (isRadial) needs to be initialized to zero
495! here and reset elsewhere to the value provided by the user.
496! Currently, the maximum number of state variables in 3D applications
497! is 9+2*MT. If MT=2 (temperature and salinity), the state variables
498! have the following order:
499!
500! 1, 2, 3,4,5, 6, 7, 8,9, 10, 11, 12, 13
501! zeta,ubar,vbar,u,v,Tvar(1),Tvar(2),TKE,W,Ustr,Vstr,Tsur(1),Tsur(2)
502!
503 integer :: isfsur = 1 ! free-surface
504 integer :: isubar = 2 ! 2D U-velocity
505 integer :: isvbar = 3 ! 2D V-velocity
506 integer :: isuvel = 4 ! 3D U-velocity
507 integer :: isvvel = 5 ! 3D V-velocity
508 integer :: iswvel ! 3D W-velocity
509 integer :: isradial = 0 ! HF radial-velocity
510 integer :: isustr ! surface u-stress
511 integer :: isvstr ! surface v-stress
512 integer :: ismtke ! turbulent kinetic energy
513#ifdef WEC
514 integer :: isu2sd ! 2D U-stokes velocity
515 integer :: isv2sd ! 2D V-stokes velocity
516 integer :: isu3sd ! 3D U-stokes velocity
517 integer :: isv3sd ! 3D V-stokes velocity
518#endif
519 integer, allocatable :: istsur(:) ! surface tracer flux
520 integer, allocatable :: istvar(:) ! tracers
521 integer, allocatable :: idbvar(:) ! LBC variables indices
522 integer, allocatable :: idsvar(:) ! state vector indices
523 integer, allocatable :: idsbry(:) ! state boundaries indices
524!
525! Generic state variables lateral boundary indices.
526!
527 integer :: isbp2d ! 2D PSI-variables
528 integer :: isbr2d ! 2D RHO-variables
529 integer :: isbu2d ! 2D U-variables
530 integer :: isbv2d ! 2D V-variables
531 integer :: isbp3d ! 3D PSI-variables
532 integer :: isbr3d ! 3D RHO-variables
533 integer :: isbu3d ! 3D U-variables
534 integer :: isbv3d ! 3D V-variables
535 integer :: isbw3d ! 3D W-variables
536!
537! Input lateral boundary, climatology, and forcing NetCDF files IDs
538! for each processing field. It facilitates the multi-file option:
539! each field can be in its own file.
540!
541 integer, allocatable :: bryncid(:,:)
542 integer, allocatable :: clmncid(:,:)
543 integer, allocatable :: frcncid(:,:)
544
545#if defined PIO_LIB && defined DISTRIBUTE
546!
547! Input lateral boundary, climatology, and forcing NetCDF files
548! descriptors for each processing field. It facilitates the
549! multi-file option: each field can be in its own file.
550!
551 TYPE (file_desc_t), pointer :: brypiofile(:,:)
552 TYPE (file_desc_t), pointer :: clmpiofile(:,:)
553 TYPE (file_desc_t), pointer :: frcpiofile(:,:)
554#endif
555!
556! Flags to create output files.
557!
558 integer, allocatable :: idefadj(:) ! adjoint file
559 integer, allocatable :: idefavg(:) ! averages file
560 integer, allocatable :: idefdia(:) ! diagnostics file
561 integer, allocatable :: idefhis(:) ! history file
562 integer, allocatable :: idefqck(:) ! quicksave file
563 integer, allocatable :: ideftlm(:) ! tangent file
564 integer, allocatable :: idefxtr(:) ! extraction file
565!
566! Output NetCDF variables IDs.
567!
568 integer, allocatable :: idtvar(:) ! tracers variables
569 integer, allocatable :: idtrcd(:) ! detided tracer variables
570 integer, allocatable :: idtrch(:) ! tracer variables hamonics
571!
572! Input/Output information variables.
573!
574 logical, allocatable :: linfo(:,:,:)
575!
576 integer, parameter :: maxlen = 160 ! information string length
577
578 integer, allocatable :: iinfo(:,:,:)
579!
580 real(dp), allocatable :: finfo(:,:,:)
581 real(dp), allocatable :: fpoint(:,:,:)
582 real(dp), allocatable :: fscale(:,:)
583 real(dp), allocatable :: tintrp(:,:,:)
584 real(dp), allocatable :: vtime(:,:,:)
585!
586 character (len=5 ) :: version = '4.3 '
587 character (len=40 ) :: varnam(mv)
588 character (len=44 ) :: date_str
589 character (len=46 ) :: tname(0:nv)
590 character (len=MaxLen) :: history
591 character (len=MaxLen) :: vname(6,0:nv)
592
593 character (len=256), allocatable :: cinfo(:,:)
594
595#if defined PIO_LIB && defined DISTRIBUTE
596!
597 TYPE (my_vardesc), pointer :: dinfo(:,:,:)
598#endif
599!
600! Analyical header file logical and names.
601!
602 logical :: lanafile
603!
604 character (len=256), dimension(39) :: ananame
605
606#ifdef BIOLOGY
607!
608! Biology models file logical and names.
609!
610 logical, dimension(4) :: lbiofile
611!
612 character (len=256), dimension(4) :: bioname
613#endif
614!
615! GIT and SVN revision and repository root URL.
616!
617 character (len=80 ) :: git_rev, svn_rev
618 character (len=256) :: git_url, svn_url
619!
620 CONTAINS
621!
623!
624!=======================================================================
625! !
626! This routine allocates several variables in the module that depend !
627! on the number of nested grids. !
628! !
629!=======================================================================
630!
631 USE mod_param
632!
633! Local variable declarations.
634!
635 integer :: ng
636!
637!-----------------------------------------------------------------------
638! Allocate variables.
639!-----------------------------------------------------------------------
640!
641 IF (.not.allocated(nxyp)) THEN
642 allocate ( nxyp(ngrids) )
643 dmem(1)=dmem(1)+real(ngrids,r8)
644 END IF
645 IF (.not.allocated(nxyr)) THEN
646 allocate ( nxyr(ngrids) )
647 dmem(1)=dmem(1)+real(ngrids,r8)
648 END IF
649 IF (.not.allocated(nxyu)) THEN
650 allocate ( nxyu(ngrids) )
651 dmem(1)=dmem(1)+real(ngrids,r8)
652 END IF
653 IF (.not.allocated(nxyv)) THEN
654 allocate ( nxyv(ngrids) )
655 dmem(1)=dmem(1)+real(ngrids,r8)
656 END IF
657
658 IF (.not.allocated(nwaterr)) THEN
659 allocate ( nwaterr(ngrids) )
660 dmem(1)=dmem(1)+real(ngrids,r8)
661 END IF
662 IF (.not.allocated(nwateru)) THEN
663 allocate ( nwateru(ngrids) )
664 dmem(1)=dmem(1)+real(ngrids,r8)
665 END IF
666 IF (.not.allocated(nwaterv)) THEN
667 allocate ( nwaterv(ngrids) )
668 dmem(1)=dmem(1)+real(ngrids,r8)
669 END IF
670
671 IF (.not.allocated(rilb)) THEN
672 allocate ( rilb(ngrids) )
673 dmem(1)=dmem(1)+real(ngrids,r8)
674 END IF
675 IF (.not.allocated(riub)) THEN
676 allocate ( riub(ngrids) )
677 dmem(1)=dmem(1)+real(ngrids,r8)
678 END IF
679 IF (.not.allocated(rjlb)) THEN
680 allocate ( rjlb(ngrids) )
681 dmem(1)=dmem(1)+real(ngrids,r8)
682 END IF
683 IF (.not.allocated(rjub)) THEN
684 allocate ( rjub(ngrids) )
685 dmem(1)=dmem(1)+real(ngrids,r8)
686 END IF
687
688 IF (.not.allocated(rxmin)) THEN
689 allocate ( rxmin(ngrids) )
690 dmem(1)=dmem(1)+real(ngrids,r8)
691 END IF
692 IF (.not.allocated(rxmax)) THEN
693 allocate ( rxmax(ngrids) )
694 dmem(1)=dmem(1)+real(ngrids,r8)
695 END IF
696 IF (.not.allocated(rymin)) THEN
697 allocate ( rymin(ngrids) )
698 dmem(1)=dmem(1)+real(ngrids,r8)
699 END IF
700 IF (.not.allocated(rymax)) THEN
701 allocate ( rymax(ngrids) )
702 dmem(1)=dmem(1)+real(ngrids,r8)
703 END IF
704
705 IF (.not.allocated(uilb)) THEN
706 allocate ( uilb(ngrids) )
707 dmem(1)=dmem(1)+real(ngrids,r8)
708 END IF
709 IF (.not.allocated(uiub)) THEN
710 allocate ( uiub(ngrids) )
711 dmem(1)=dmem(1)+real(ngrids,r8)
712 END IF
713 IF (.not.allocated(ujlb)) THEN
714 allocate ( ujlb(ngrids) )
715 dmem(1)=dmem(1)+real(ngrids,r8)
716 END IF
717 IF (.not.allocated(ujub)) THEN
718 allocate ( ujub(ngrids) )
719 dmem(1)=dmem(1)+real(ngrids,r8)
720 END IF
721
722 IF (.not.allocated(uxmin)) THEN
723 allocate ( uxmin(ngrids) )
724 dmem(1)=dmem(1)+real(ngrids,r8)
725 END IF
726 IF (.not.allocated(uxmax)) THEN
727 allocate ( uxmax(ngrids) )
728 dmem(1)=dmem(1)+real(ngrids,r8)
729 END IF
730 IF (.not.allocated(uymin)) THEN
731 allocate ( uymin(ngrids) )
732 dmem(1)=dmem(1)+real(ngrids,r8)
733 END IF
734 IF (.not.allocated(uymax)) THEN
735 allocate ( uymax(ngrids) )
736 dmem(1)=dmem(1)+real(ngrids,r8)
737 END IF
738
739 IF (.not.allocated(vilb)) THEN
740 allocate ( vilb(ngrids) )
741 dmem(1)=dmem(1)+real(ngrids,r8)
742 END IF
743 IF (.not.allocated(viub)) THEN
744 allocate ( viub(ngrids) )
745 dmem(1)=dmem(1)+real(ngrids,r8)
746 END IF
747 IF (.not.allocated(vjlb)) THEN
748 allocate ( vjlb(ngrids) )
749 dmem(1)=dmem(1)+real(ngrids,r8)
750 END IF
751 IF (.not.allocated(vjub)) THEN
752 allocate ( vjub(ngrids) )
753 dmem(1)=dmem(1)+real(ngrids,r8)
754 END IF
755
756 IF (.not.allocated(vxmin)) THEN
757 allocate ( vxmin(ngrids) )
758 dmem(1)=dmem(1)+real(ngrids,r8)
759 END IF
760 IF (.not.allocated(vxmax)) THEN
761 allocate ( vxmax(ngrids) )
762 dmem(1)=dmem(1)+real(ngrids,r8)
763 END IF
764 IF (.not.allocated(vymin)) THEN
765 allocate ( vymin(ngrids) )
766 dmem(1)=dmem(1)+real(ngrids,r8)
767 END IF
768 IF (.not.allocated(vymax)) THEN
769 allocate ( vymax(ngrids) )
770 dmem(1)=dmem(1)+real(ngrids,r8)
771 END IF
772
773 IF (.not.allocated(aout)) THEN
774 allocate ( aout(nv,ngrids) )
775 dmem(1)=dmem(1)+real(nv*ngrids,r8)
776 END IF
777 IF (.not.allocated(dout)) THEN
778 allocate ( dout(nv,ngrids) )
779 dmem(1)=dmem(1)+real(nv*ngrids,r8)
780 END IF
781 IF (.not.allocated(hout)) THEN
782 allocate ( hout(nv,ngrids) )
783 dmem(1)=dmem(1)+real(nv*ngrids,r8)
784 END IF
785 IF (.not.allocated(qout)) THEN
786 allocate ( qout(nv,ngrids) )
787 dmem(1)=dmem(1)+real(nv*ngrids,r8)
788 END IF
789 IF (.not.allocated(sout)) THEN
790 allocate ( sout(nv,ngrids) )
791 dmem(1)=dmem(1)+real(nv*ngrids,r8)
792 END IF
793
794 IF (.not.allocated(idrtrc)) THEN
795 allocate ( idrtrc(mt) )
796 dmem(1)=dmem(1)+real(mt,r8)
797 END IF
798 IF (.not.allocated(idsurt)) THEN
799 allocate ( idsurt(mt) )
800 dmem(1)=dmem(1)+real(mt,r8)
801 END IF
802 IF (.not.allocated(idtads)) THEN
803 allocate ( idtads(mt) )
804 dmem(1)=dmem(1)+real(mt,r8)
805 END IF
806 IF (.not.allocated(idtbot)) THEN
807 allocate ( idtbot(mt) )
808 dmem(1)=dmem(1)+real(mt,r8)
809 END IF
810 IF (.not.allocated(idtbry)) THEN
811 allocate ( idtbry(4,mt) )
812 dmem(1)=dmem(1)+4.0_r8*real(mt,r8)
813 END IF
814 IF (.not.allocated(idtclm)) THEN
815 allocate ( idtclm(mt) )
816 dmem(1)=dmem(1)+real(mt,r8)
817 END IF
818 IF (.not.allocated(idtnud)) THEN
819 allocate ( idtnud(mt) )
820 dmem(1)=dmem(1)+real(mt,r8)
821 END IF
822 IF (.not.allocated(idtsur)) THEN
823 allocate ( idtsur(mt) )
824 dmem(1)=dmem(1)+real(mt,r8)
825 END IF
826 IF (.not.allocated(idttlf)) THEN
827 allocate ( idttlf(mt) )
828 dmem(1)=dmem(1)+real(mt,r8)
829 END IF
830
831 IF (.not.allocated(ihutav)) THEN
832 allocate ( ihutav(mt) )
833 dmem(1)=dmem(1)+real(mt,r8)
834 END IF
835 IF (.not.allocated(ihvtav)) THEN
836 allocate ( ihvtav(mt) )
837 dmem(1)=dmem(1)+real(mt,r8)
838 END IF
839 IF (.not.allocated(idttav)) THEN
840 allocate ( idttav(mt) )
841 dmem(1)=dmem(1)+real(mt,r8)
842 END IF
843 IF (.not.allocated(idutav)) THEN
844 allocate ( idutav(mt) )
845 dmem(1)=dmem(1)+real(mt,r8)
846 END IF
847 IF (.not.allocated(idvtav)) THEN
848 allocate ( idvtav(mt) )
849 dmem(1)=dmem(1)+real(mt,r8)
850 END IF
851
852#ifdef DIAGNOSTICS
853 IF (.not.allocated(iddtrc)) THEN
854 allocate ( iddtrc(mt,ndt) )
855 dmem(1)=dmem(1)+real(mt*ndt,r8)
856 END IF
857 IF (.not.allocated(iddu2d)) THEN
858 allocate ( iddu2d(ndm2d) )
859 dmem(1)=dmem(1)+real(ndm2d,r8)
860 END IF
861 IF (.not.allocated(iddv2d)) THEN
862 allocate ( iddv2d(ndm2d) )
863 dmem(1)=dmem(1)+real(ndm2d,r8)
864 END IF
865 IF (.not.allocated(iddu3d)) THEN
866 allocate ( iddu3d(ndm3d) )
867 dmem(1)=dmem(1)+real(ndm3d,r8)
868 END IF
869 IF (.not.allocated(iddv3d)) THEN
870 allocate ( iddv3d(ndm3d) )
871 dmem(1)=dmem(1)+real(ndm3d,r8)
872 END IF
873#endif
874
875 IF (.not.allocated(istsur)) THEN
876 allocate ( istsur(mt) )
877 dmem(1)=dmem(1)+real(mt,r8)
878 END IF
879 IF (.not.allocated(istvar)) THEN
880 allocate ( istvar(mt) )
881 istvar=0
882 dmem(1)=dmem(1)+real(mt,r8)
883 END IF
884 IF (.not.allocated(idbvar)) THEN
885 allocate ( idbvar(nlbcvar) )
886 idbvar=0
887 dmem(1)=dmem(1)+real(nlbcvar,r8)
888 END IF
889 IF (.not.allocated(idsvar)) THEN
890 allocate ( idsvar(maxval(nsv)) )
891 idsvar=0
892 dmem(1)=dmem(1)+real(maxval(nsv),r8)
893 END IF
894 IF (.not.allocated(idsbry)) THEN
895 allocate ( idsbry(maxval(nsv)) )
896 idsbry=0
897 dmem(1)=dmem(1)+real(maxval(nsv),r8)
898 END IF
899
900 IF (.not.allocated(bryncid)) THEN
901 allocate ( bryncid(nv,ngrids) )
902 dmem(1)=dmem(1)+real(nv*ngrids,r8)
903 END IF
904 IF (.not.allocated(clmncid)) THEN
905 allocate ( clmncid(nv,ngrids) )
906 dmem(1)=dmem(1)+real(nv*ngrids,r8)
907 END IF
908 IF (.not.allocated(frcncid)) THEN
909 allocate ( frcncid(nv,ngrids) )
910 dmem(1)=dmem(1)+real(nv*ngrids,r8)
911 END IF
912
913#if defined PIO_LIB && defined DISTRIBUTE
914 IF (.not.associated(brypiofile)) THEN
915 allocate ( brypiofile(nv,ngrids) )
916 dmem(1)=dmem(1)+real(nv*ngrids,r8)
917 END IF
918 IF (.not.associated(clmpiofile)) THEN
919 allocate ( clmpiofile(nv,ngrids) )
920 dmem(1)=dmem(1)+real(nv*ngrids,r8)
921 END IF
922 IF (.not.associated(frcpiofile)) THEN
923 allocate ( frcpiofile(nv,ngrids) )
924 dmem(1)=dmem(1)+real(nv*ngrids,r8)
925 END IF
926#endif
927
928 IF (.not.allocated(idefadj)) THEN
929 allocate ( idefadj(ngrids) )
930 dmem(1)=dmem(1)+real(ngrids,r8)
931 END IF
932 IF (.not.allocated(idefavg)) THEN
933 allocate ( idefavg(ngrids) )
934 dmem(1)=dmem(1)+real(ngrids,r8)
935 END IF
936 IF (.not.allocated(idefdia)) THEN
937 allocate ( idefdia(ngrids) )
938 dmem(1)=dmem(1)+real(ngrids,r8)
939 END IF
940 IF (.not.allocated(idefhis)) THEN
941 allocate ( idefhis(ngrids) )
942 dmem(1)=dmem(1)+real(ngrids,r8)
943 END IF
944 IF (.not.allocated(idefqck)) THEN
945 allocate ( idefqck(ngrids) )
946 dmem(1)=dmem(1)+real(ngrids,r8)
947 END IF
948 IF (.not.allocated(ideftlm)) THEN
949 allocate ( ideftlm(ngrids) )
950 dmem(1)=dmem(1)+real(ngrids,r8)
951 END IF
952 IF (.not.allocated(idefxtr)) THEN
953 allocate ( idefxtr(ngrids) )
954 dmem(1)=dmem(1)+real(ngrids,r8)
955 END IF
956
957 IF (.not.allocated(idtvar)) THEN
958 allocate ( idtvar(mt) )
959 dmem(1)=dmem(1)+real(mt,r8)
960 END IF
961 IF (.not.allocated(idtrcd)) THEN
962 allocate ( idtrcd(nat) )
963 dmem(1)=dmem(1)+real(nat,r8)
964 END IF
965 IF (.not.allocated(idtrch)) THEN
966 allocate ( idtrch(nat) )
967 dmem(1)=dmem(1)+real(nat,r8)
968 END IF
969
970 IF (.not.allocated(linfo)) THEN
971 allocate ( linfo(6,nv,ngrids) )
972 dmem(1)=dmem(1)+6.0_r8*real(nv*ngrids,r8)
973 END IF
974
975 IF (.not.allocated(iinfo)) THEN
976 allocate ( iinfo(11,nv,ngrids) )
977 dmem(1)=dmem(1)+10.0_r8*real(nv*ngrids,r8)
978 END IF
979
980 IF (.not.allocated(finfo)) THEN
981 allocate ( finfo(10,nv,ngrids) )
982 dmem(1)=dmem(1)+10.0_r8*real(nv*ngrids,r8)
983 END IF
984 IF (.not.allocated(fpoint)) THEN
985 allocate ( fpoint(2,nv,ngrids) )
986 dmem(1)=dmem(1)+2.0_r8*real(nv*ngrids,r8)
987 END IF
988 IF (.not.allocated(fscale)) THEN
989 allocate ( fscale(nv,ngrids) )
990 dmem(1)=dmem(1)+real(nv*ngrids,r8)
991 END IF
992 IF (.not.allocated(tintrp)) THEN
993 allocate ( tintrp(2,nv,ngrids) )
994 dmem(1)=dmem(1)+2.0_r8*real(nv*ngrids,r8)
995 END IF
996
997#if defined SSH_TIDES || defined UV_TIDES
998 IF (.not.allocated(vtime)) THEN
999 allocate ( vtime(max(2,mtc),nv,ngrids) )
1000 dmem(1)=dmem(1)+real(max(2,mtc)*nv*ngrids,r8)
1001 END IF
1002#else
1003 IF (.not.allocated(vtime)) THEN
1004 allocate ( vtime(2,nv,ngrids) )
1005 dmem(1)=dmem(1)+real(nv*ngrids,r8)
1006 END IF
1007#endif
1008
1009 IF (.not.allocated(cinfo)) THEN
1010 allocate ( cinfo(nv,ngrids) )
1011 dmem(1)=dmem(1)+0.125_r8*256.0_r8*real(nv*ngrids,r8)
1012 END IF
1013
1014#if defined PIO_LIB && defined DISTRIBUTE
1015 IF (.not.associated(dinfo)) THEN
1016 allocate ( dinfo(2,nv,ngrids) )
1017 dmem(1)=dmem(1)+2.0_r8*real(nv*ngrids,r8)
1018 END IF
1019#endif
1020!
1021 RETURN
1022 END SUBROUTINE allocate_ncparam
1023!
1025!
1026!=======================================================================
1027! !
1028! This routine deallocates variables in the module. !
1029! on the number of nested grids. !
1030! !
1031!=======================================================================
1032!
1033!-----------------------------------------------------------------------
1034! Deallocate variables in module.
1035!-----------------------------------------------------------------------
1036!
1037 IF (allocated(nxyp)) deallocate ( nxyp )
1038 IF (allocated(nxyr)) deallocate ( nxyr )
1039 IF (allocated(nxyu)) deallocate ( nxyu )
1040 IF (allocated(nxyv)) deallocate ( nxyv )
1041 IF (allocated(nwaterr)) deallocate ( nwaterr )
1042 IF (allocated(nwateru)) deallocate ( nwateru )
1043 IF (allocated(nwaterv)) deallocate ( nwaterv )
1044 IF (allocated(rilb)) deallocate ( rilb )
1045 IF (allocated(riub)) deallocate ( riub )
1046 IF (allocated(rjlb)) deallocate ( rjlb )
1047 IF (allocated(rjub)) deallocate ( rjub )
1048 IF (allocated(rxmin)) deallocate ( rxmin )
1049 IF (allocated(rxmax)) deallocate ( rxmax )
1050 IF (allocated(rymin)) deallocate ( rymin )
1051 IF (allocated(rymax)) deallocate ( rymax )
1052 IF (allocated(uilb)) deallocate ( uilb )
1053 IF (allocated(uiub)) deallocate ( uiub )
1054 IF (allocated(ujlb)) deallocate ( ujlb )
1055 IF (allocated(ujub)) deallocate ( ujub )
1056 IF (allocated(uxmin)) deallocate ( uxmin )
1057 IF (allocated(uxmax)) deallocate ( uxmax )
1058 IF (allocated(uymin)) deallocate ( uymin )
1059 IF (allocated(uymax)) deallocate ( uymax )
1060 IF (allocated(vilb)) deallocate ( vilb )
1061 IF (allocated(viub)) deallocate ( viub )
1062 IF (allocated(vjlb)) deallocate ( vjlb )
1063 IF (allocated(vjub)) deallocate ( vjub )
1064 IF (allocated(vxmin)) deallocate ( vxmin )
1065 IF (allocated(vxmax)) deallocate ( vxmax )
1066 IF (allocated(vymin)) deallocate ( vymin )
1067 IF (allocated(vymax)) deallocate ( vymax )
1068!
1069 IF (allocated(aout)) deallocate ( aout )
1070 IF (allocated(dout)) deallocate ( dout )
1071 IF (allocated(hout)) deallocate ( hout )
1072 IF (allocated(qout)) deallocate ( qout )
1073 IF (allocated(sout)) deallocate ( sout )
1074!
1075 IF (allocated(idrtrc)) deallocate ( idrtrc )
1076 IF (allocated(idsurt)) deallocate ( idsurt )
1077 IF (allocated(idtads)) deallocate ( idtads )
1078 IF (allocated(idtbot)) deallocate ( idtbot )
1079 IF (allocated(idtbry)) deallocate ( idtbry )
1080 IF (allocated(idtclm)) deallocate ( idtclm )
1081 IF (allocated(idtnud)) deallocate ( idtnud )
1082 IF (allocated(idtsur)) deallocate ( idtsur )
1083 IF (allocated(idttlf)) deallocate ( idttlf )
1084!
1085 IF (allocated(ihutav)) deallocate ( ihutav )
1086 IF (allocated(ihvtav)) deallocate ( ihvtav )
1087 IF (allocated(idttav)) deallocate ( idttav )
1088 IF (allocated(idutav)) deallocate ( idutav )
1089 IF (allocated(idvtav)) deallocate ( idvtav )
1090
1091#ifdef DIAGNOSTICS
1092!
1093 IF (allocated(iddtrc)) deallocate ( iddtrc )
1094 IF (allocated(iddu2d)) deallocate ( iddu2d )
1095 IF (allocated(iddv2d)) deallocate ( iddv2d )
1096 IF (allocated(iddu3d)) deallocate ( iddu3d )
1097 IF (allocated(iddv3d)) deallocate ( iddv3d )
1098#endif
1099!
1100 IF (allocated(istsur)) deallocate ( istsur )
1101 IF (allocated(istvar)) deallocate ( istvar )
1102 IF (allocated(idbvar)) deallocate ( idbvar )
1103 IF (allocated(idsvar)) deallocate ( idsvar )
1104 IF (allocated(idsbry)) deallocate ( idsbry )
1105!
1106 IF (allocated(bryncid)) deallocate ( bryncid )
1107 IF (allocated(clmncid)) deallocate ( clmncid )
1108 IF (allocated(frcncid)) deallocate ( frcncid )
1109
1110#if defined PIO_LIB && defined DISTRIBUTE
1111!
1112 IF (associated(brypiofile)) deallocate ( brypiofile )
1113 IF (associated(clmpiofile)) deallocate ( clmpiofile )
1114 IF (associated(frcpiofile)) deallocate ( frcpiofile )
1115#endif
1116!
1117 IF (allocated(idefadj)) deallocate ( idefadj )
1118 IF (allocated(idefavg)) deallocate ( idefavg )
1119 IF (allocated(idefdia)) deallocate ( idefdia )
1120 IF (allocated(idefhis)) deallocate ( idefhis )
1121 IF (allocated(idefqck)) deallocate ( idefqck )
1122 IF (allocated(ideftlm)) deallocate ( ideftlm )
1123 IF (allocated(idefxtr)) deallocate ( idefxtr )
1124!
1125 IF (allocated(idtvar)) deallocate ( idtvar )
1126 IF (allocated(idtrcd)) deallocate ( idtrcd )
1127 IF (allocated(idtrch)) deallocate ( idtrch )
1128!
1129 IF (allocated(linfo)) deallocate ( linfo )
1130 IF (allocated(iinfo)) deallocate ( iinfo )
1131 IF (allocated(finfo)) deallocate ( finfo )
1132 IF (allocated(fpoint)) deallocate ( fpoint )
1133 IF (allocated(fscale)) deallocate ( fscale )
1134 IF (allocated(tintrp)) deallocate ( tintrp )
1135 IF (allocated(vtime)) deallocate ( vtime )
1136 IF (allocated(cinfo)) deallocate ( cinfo )
1137
1138#if defined PIO_LIB && defined DISTRIBUTE
1139 IF (associated(dinfo)) deallocate ( dinfo )
1140#endif
1141!
1142 RETURN
1143 END SUBROUTINE deallocate_ncparam
1144!
1146!
1147!=======================================================================
1148! !
1149! This routine initializes all variables in module "mod_ncparam" for !
1150! all nested grids. !
1151! !
1152!=======================================================================
1153!
1154 USE mod_parallel
1155#ifdef BIOLOGY
1156 USE mod_biology
1157#endif
1158#ifdef SEAICE
1159 USE mod_ice
1160#endif
1161 USE mod_iounits
1162 USE mod_scalars
1163#if defined SEDIMENT || defined BBL_MODEL
1164 USE mod_sediment
1165#endif
1166!
1167 USE get_metadata_mod, ONLY : io_metadata
1169!
1170! Local variable declarations.
1171!
1172 logical :: firstpass, ldone, load
1173!
1174#ifdef DISTRIBUTE
1175 integer :: itile, jtile
1176#endif
1177 integer :: lvar, ntiles, i, ic, ic_brylast, j, ng
1178 integer :: gtype, tile, varid
1179!
1180 real(dp), parameter :: spv = 0.0_dp
1181 real(dp) :: add_offset, scale
1182!
1183 character (len=MaxLen) :: string
1184 character (len=MaxLen), dimension(8) :: vinfo
1185
1186 character (len=*), parameter :: myfile = &
1187 & __FILE__//"initialize_ncparam"
1188!
1189!-----------------------------------------------------------------------
1190! Initialize several variables.
1191!-----------------------------------------------------------------------
1192!
1193! Initialize DOMAIN structure.
1194!
1195 DO ng=1,ngrids
1196 domain(ng) % Eastern_Edge = .false.
1197 domain(ng) % Western_Edge = .false.
1198 domain(ng) % Northern_Edge = .false.
1199 domain(ng) % Southern_Edge = .false.
1200
1201 domain(ng) % NorthEast_Corner = .false.
1202 domain(ng) % NorthWest_Corner = .false.
1203 domain(ng) % SouthEast_Corner = .false.
1204 domain(ng) % SouthWest_Corner = .false.
1205
1206 domain(ng) % NorthEast_Test = .false.
1207 domain(ng) % NorthWest_Test = .false.
1208 domain(ng) % SouthEast_Test = .false.
1209 domain(ng) % SouthWest_Test = .false.
1210
1211 domain(ng) % Xmin_psi = spv
1212 domain(ng) % Xmax_psi = spv
1213 domain(ng) % Ymin_psi = spv
1214 domain(ng) % Ymax_psi = spv
1215
1216 domain(ng) % Xmin_rho = spv
1217 domain(ng) % Xmax_rho = spv
1218 domain(ng) % Ymin_rho = spv
1219 domain(ng) % Ymax_rho = spv
1220
1221 domain(ng) % Xmin_u = spv
1222 domain(ng) % Xmax_u = spv
1223 domain(ng) % Ymin_u = spv
1224 domain(ng) % Ymax_u = spv
1225
1226 domain(ng) % Xmin_v = spv
1227 domain(ng) % Xmax_v = spv
1228 domain(ng) % Ymin_v = spv
1229 domain(ng) % Ymax_v = spv
1230 END DO
1231!
1232! Initialize NetCDF files creation flags.
1233!
1234 DO ng=1,ngrids
1235 idefadj(ng)=-1
1236 idefavg(ng)=-1
1237 idefdia(ng)=-1
1238 idefhis(ng)=-1
1239 idefqck(ng)=-1
1240 ideftlm(ng)=-1
1241 idefxtr(ng)=-1
1242 END DO
1243!
1244! Analytical files switch and names.
1245!
1246 lanafile=.true.
1247 DO i=1,SIZE(ananame)
1248 DO j=1,len(ananame(1))
1249 ananame(i)(j:j)=' '
1250 END DO
1251 END DO
1252
1253#ifdef BIOLOGY
1254!
1255! Biology model header names.
1256!
1257 DO i=1,4
1258 lbiofile(i)=.true.
1259 DO j=1,len(bioname(1))
1260 bioname(i)(j:j)=' '
1261 END DO
1262 END DO
1263#endif
1264!
1265! Set indices for state some state variables.
1266!
1267 ic=5
1268#ifdef SOLVE3D
1269 DO i=1,mt
1270 ic=ic+1
1271 istvar(i)=ic
1272 END DO
1273#endif
1274#if defined ADJUST_WSTRESS || defined FORCING_SV || \
1275 defined hessian_fsv || defined so_semi || \
1276 defined stochastic_opt
1277 ic=ic+1
1278 isustr=ic
1279 ic=ic+1
1280 isvstr=ic
1281#endif
1282#ifdef SOLVE3D
1283# if defined ADJUST_STFLUX || defined FORCING_SV || \
1284 defined hessian_fsv || defined so_semi || \
1285 defined stochastic_opt
1286 DO i=1,mt
1287 ic=ic+1
1288 istsur(i)=ic
1289 END DO
1290# endif
1291#endif
1292#ifdef WEC
1293 ic=ic+1
1294 isu2sd=ic
1295 ic=ic+1
1296 isv2sd=ic
1297# if defined SOLVE3D
1298 ic=ic+1
1299 isu3sd=ic
1300 ic=ic+1
1301 isv3sd=ic
1302# endif
1303#endif
1304#ifdef SOLVE3D
1305# if defined GLS_MIXING || defined MY25_MIXING
1306 ic=ic+1
1307 ismtke=ic
1308# endif
1309#endif
1310 ic_brylast=ic
1311#ifdef SOLVE3D
1312 ic=ic+1
1313 iswvel=ic ! no LBC index
1314#endif
1315!
1316! Set generic lateral boundary indices for LBC structure. Use the same
1317! values of the state variables at the same C-grid location. Generic
1318! indices are used for testing periodicity. The PSI-variables and
1319! W-variables are assigned the same value as the RHO-variables.
1320!
1321 isbp2d=isfsur ! 2D PSI-variables
1322 isbr2d=isfsur ! 2D RHO-variables
1323 isbu2d=isubar ! 2D U-variables
1324 isbv2d=isvbar ! 2D V-variables
1325#if defined SOLVE3D
1326 isbp3d=istvar(1) ! 3D PSI-variables
1327 isbr3d=istvar(1) ! 3D RHO-variables
1328 isbu3d=isuvel ! 3D U-variables
1329 isbv3d=isvvel ! 3D V-variables
1330 isbw3d=istvar(1) ! 3D W-variables
1331#endif
1332!
1333! Initialize IO information variables.
1334!
1335 DO ng=1,ngrids
1336 DO i=1,nv
1337 linfo(1,i,ng)=.false.
1338 linfo(2,i,ng)=.false.
1339 linfo(3,i,ng)=.false.
1340 linfo(4,i,ng)=.false.
1341 linfo(5,i,ng)=.false.
1342 linfo(6,i,ng)=.false.
1343 aout(i,ng)=.false.
1344 dout(i,ng)=.false.
1345 hout(i,ng)=.false.
1346 qout(i,ng)=.false.
1347 sout(i,ng)=.false.
1348 iinfo(1,i,ng)=0
1349 iinfo(2,i,ng)=-1
1350 iinfo(3,i,ng)=-1
1351 iinfo(4,i,ng)=0
1352 iinfo(5,i,ng)=0
1353 iinfo(6,i,ng)=0
1354 iinfo(7,i,ng)=0
1355 iinfo(8,i,ng)=2
1356 iinfo(9,i,ng)=0
1357 iinfo(10,i,ng)=0
1358 iinfo(11,i,ng)=0
1359 finfo(1,i,ng)=0.0_r8
1360 finfo(2,i,ng)=0.0_r8
1361 finfo(3,i,ng)=0.0_r8
1362 finfo(5,i,ng)=0.0_r8
1363 finfo(6,i,ng)=0.0_r8
1364 finfo(7,i,ng)=0.0_r8
1365 finfo(10,i,ng)=1.0_r8
1366#if defined PIO_LIB && defined DISTRIBUTE
1367 dinfo(1,i,ng)%vd%varID=-1
1368 dinfo(1,i,ng)%dkind=-1
1369 dinfo(1,i,ng)%gtype=0
1370 dinfo(2,i,ng)%vd%varID=-1
1371 dinfo(2,i,ng)%dkind=-1
1372 dinfo(2,i,ng)%gtype=0
1373#endif
1374 fscale(i,ng)=1.0_r8
1375 fpoint(1,i,ng)=0.0_r8
1376 fpoint(2,i,ng)=0.0_r8
1377 tintrp(1,i,ng)=0.0_dp
1378 tintrp(2,i,ng)=0.0_dp
1379 vtime(1,i,ng)=0.0_dp
1380 vtime(2,i,ng)=0.0_dp
1381 bryncid(i,ng)=-1
1382 clmncid(i,ng)=-1
1383 frcncid(i,ng)=-1
1384#if defined PIO_LIB && defined DISTRIBUTE
1385 brypiofile(i,ng)%fh=-1
1386 clmpiofile(i,ng)%fh=-1
1387 frcpiofile(i,ng)%fh=-1
1388#endif
1389 END DO
1390 END DO
1391!
1392! Set GIT and SVN Repository Root URL and revision. Their values are
1393! assigned in the 'makefile' to the CPPFLAGS macro.
1394!
1395#ifdef GIT_URL
1397#else
1398 git_url='https://github.com/myroms/roms'
1399#endif
1400#ifdef GIT_REV
1402#else
1403 git_rev=' '
1404#endif
1405!
1406#ifdef SVN_URL
1408#else
1409 svn_url='https://myroms.org/svn/trunk'
1410#endif
1411#ifdef SVN_REV
1413#else
1414 svn_rev=' '
1415#endif
1416!
1417!-----------------------------------------------------------------------
1418! Process ROMS Input/Output metadata file and define variables
1419! information arrays.
1420!-----------------------------------------------------------------------
1421!
1422 varid=0
1423 ldone=.false.
1424 firstpass=.true. ! initialize metadata processing
1425!
1426 metadata_loop : DO WHILE (.not.ldone)
1427!
1428! Load I/O metadata information.
1429!
1430 ldone = io_metadata(firstpass, vinfo, scale, add_offset)
1431 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1432 IF (ldone) EXIT
1433!
1434! Determine staggered C-grid variable.
1435!
1436 SELECT CASE (trim(adjustl(vinfo(7))))
1437 CASE ('p2dvar')
1438 gtype=p2dvar
1439 CASE ('r2dvar')
1440 gtype=r2dvar
1441 CASE ('u2dvar')
1442 gtype=u2dvar
1443 CASE ('v2dvar')
1444 gtype=v2dvar
1445 CASE ('p3dvar')
1446 gtype=p3dvar
1447 CASE ('r3dvar')
1448 gtype=r3dvar
1449 CASE ('u3dvar')
1450 gtype=u3dvar
1451 CASE ('v3dvar')
1452 gtype=v3dvar
1453 CASE ('w3dvar')
1454 gtype=w3dvar
1455 CASE ('b3dvar')
1456 gtype=b3dvar
1457#if defined ECOSIM && defined DIAGNOSTICS_BIO
1458 CASE ('l3dvar')
1459 gtype=l3dvar
1460 CASE ('l4dvar')
1461 gtype=l4dvar
1462#endif
1463#ifdef SPECTRAL_LIGHT
1464 CASE ('s3dvar')
1465 gtype=s3dvar
1466#endif
1467 CASE DEFAULT
1468 gtype=0
1469 END SELECT
1470!
1471! Assign identification indices.
1472!
1473 load=.true.
1474 varid=varid+1
1475 SELECT CASE (trim(adjustl(vinfo(8))))
1476 CASE ('idangR')
1477 idangr=varid
1478 CASE ('idbath')
1479 idbath=varid
1480 CASE ('idfcor')
1481 idfcor=varid
1482 CASE ('idtopo')
1483 idtopo=varid
1484 CASE ('idpmdx')
1485 idpmdx=varid
1486 CASE ('idpndy')
1487 idpndy=varid
1488 CASE ('idLonP')
1489 idlonp=varid
1490 CASE ('idLatP')
1491 idlatp=varid
1492 CASE ('idLonR')
1493 idlonr=varid
1494 CASE ('idLatR')
1495 idlatr=varid
1496 CASE ('idLonU')
1497 idlonu=varid
1498 CASE ('idLatU')
1499 idlatu=varid
1500 CASE ('idLonV')
1501 idlonv=varid
1502 CASE ('idLatV')
1503 idlatv=varid
1504 CASE ('idmskP')
1505 idmskp=varid
1506 CASE ('idmskR')
1507 idmskr=varid
1508 CASE ('idmskU')
1509 idmsku=varid
1510 CASE ('idmskV')
1511 idmskv=varid
1512 CASE ('idscoR')
1513 idscor=varid
1514 CASE ('idscoU')
1515 idscou=varid
1516 CASE ('idscoV')
1517 idscov=varid
1518 CASE ('idXgrP')
1519 idxgrp=varid
1520 CASE ('idYgrP')
1521 idygrp=varid
1522 CASE ('idXgrR')
1523 idxgrr=varid
1524 CASE ('idYgrR')
1525 idygrr=varid
1526 CASE ('idXgrU')
1527 idxgru=varid
1528 CASE ('idYgrU')
1529 idygru=varid
1530 CASE ('idXgrV')
1531 idxgrv=varid
1532 CASE ('idYgrV')
1533 idygrv=varid
1534 CASE ('idpthR')
1535 idpthr=varid
1536 CASE ('idpthU')
1537 idpthu=varid
1538 CASE ('idpthV')
1539 idpthv=varid
1540 CASE ('idpthW')
1541 idpthw=varid
1542 CASE ('idtime')
1543 idtime=varid
1544 CASE ('idFsur')
1545 idfsur=varid
1546 CASE ('idRzet')
1547 idrzet=varid
1548 CASE ('idUbar')
1549 idubar=varid
1550 CASE ('idu2dE')
1551 idu2de=varid
1552 CASE ('idRu2d')
1553 idru2d=varid
1554 CASE ('idVbar')
1555 idvbar=varid
1556 CASE ('idv2dN')
1557 idv2dn=varid
1558 CASE ('idRv2d')
1559 idrv2d=varid
1560 CASE ('idUsur')
1561 idusur=varid
1562 CASE ('idUsuE')
1563 idusue=varid
1564 CASE ('idUvel')
1565 iduvel=varid
1566 CASE ('idu3dE')
1567 idu3de=varid
1568 CASE ('idRu3d')
1569 idru3d=varid
1570 CASE ('idVsur')
1571 idvsur=varid
1572 CASE ('idVsuN')
1573 idvsun=varid
1574 CASE ('idVvel')
1575 idvvel=varid
1576 CASE ('idv3dN')
1577 idv3dn=varid
1578 CASE ('idRv3d')
1579 idrv3d=varid
1580 CASE ('idWvel')
1581 idwvel=varid
1582 CASE ('idOvil')
1583 idovil=varid
1584 CASE ('idOvel')
1585 idovel=varid
1586 CASE ('idDano')
1587 iddano=varid
1588 CASE ('idsurT(itemp)')
1589 idsurt(itemp)=varid
1590#ifdef SALINITY
1591 CASE ('idsurT(isalt)')
1592 idsurt(isalt)=varid
1593#endif
1594 CASE ('idTvar(itemp)')
1595 idtvar(itemp)=varid
1596#ifdef SALINITY
1597 CASE ('idTvar(isalt)')
1598 idtvar(isalt)=varid
1599#endif
1600 CASE ('idUsms')
1601 idusms=varid
1602 CASE ('idVsms')
1603 idvsms=varid
1604 CASE ('idUbms')
1605 idubms=varid
1606 CASE ('idVbms')
1607 idvbms=varid
1608 CASE ('idUbws')
1609 idubws=varid
1610 CASE ('idUbcs')
1611 idubcs=varid
1612 CASE ('idVbws')
1613 idvbws=varid
1614 CASE ('idVbcs')
1615 idvbcs=varid
1616 CASE ('idUVwc')
1617 iduvwc=varid
1618 CASE ('idTsur(itemp)')
1619 idtsur(itemp)=varid
1620 CASE ('iddQdT')
1621 iddqdt=varid
1622 CASE ('idsfwf')
1623 idsfwf=varid
1624#ifdef SALINITY
1625 CASE ('idTsur(isalt)')
1626 idtsur(isalt)=varid
1627#endif
1628 CASE ('idTbot(itemp)')
1629 idtbot(itemp)=varid
1630#ifdef SALINITY
1631 CASE ('idTbot(isalt)')
1632 idtbot(isalt)=varid
1633#endif
1634 CASE ('idGhat(itemp)')
1635 idghat(itemp)=varid
1636#ifdef SALINITY
1637 CASE ('idGhat(isalt)')
1638 idghat(isalt)=varid
1639#endif
1640 CASE ('idMtke')
1641 idmtke=varid
1642 CASE ('idMtls')
1643 idmtls=varid
1644 CASE ('idVvis')
1645 idvvis=varid
1646 CASE ('idTdif')
1647 idtdif=varid
1649#ifdef SALINITY
1650 CASE ('idSdif')
1651 idsdif=varid
1653#endif
1654 CASE ('idVmLS')
1655 idvmls=varid
1656 CASE ('idVmKK')
1657 idvmkk=varid
1658 CASE ('idVmKP')
1659 idvmkp=varid
1660 CASE ('idZbry(iwest)')
1661 idzbry(iwest)=varid
1662 CASE ('idZbry(ieast)')
1663 idzbry(ieast)=varid
1664 CASE ('idZbry(isouth)')
1665 idzbry(isouth)=varid
1666 CASE ('idZbry(inorth)')
1667 idzbry(inorth)=varid
1668 CASE ('idU2bc(iwest)')
1669 idu2bc(iwest)=varid
1670 CASE ('idU2bc(ieast)')
1671 idu2bc(ieast)=varid
1672 CASE ('idU2bc(isouth)')
1673 idu2bc(isouth)=varid
1674 CASE ('idU2bc(inorth)')
1675 idu2bc(inorth)=varid
1676 CASE ('idV2bc(iwest)')
1677 idv2bc(iwest)=varid
1678 CASE ('idV2bc(ieast)')
1679 idv2bc(ieast)=varid
1680 CASE ('idV2bc(isouth)')
1681 idv2bc(isouth)=varid
1682 CASE ('idV2bc(inorth)')
1683 idv2bc(inorth)=varid
1684 CASE ('idU3bc(iwest)')
1685 idu3bc(iwest)=varid
1686 CASE ('idU3bc(ieast)')
1687 idu3bc(ieast)=varid
1688 CASE ('idU3bc(isouth)')
1689 idu3bc(isouth)=varid
1690 CASE ('idU3bc(inorth)')
1691 idu3bc(inorth)=varid
1692 CASE ('idV3bc(iwest)')
1693 idv3bc(iwest)=varid
1694 CASE ('idV3bc(ieast)')
1695 idv3bc(ieast)=varid
1696 CASE ('idV3bc(isouth)')
1697 idv3bc(isouth)=varid
1698 CASE ('idV3bc(inorth)')
1699 idv3bc(inorth)=varid
1700 CASE ('idTbry(iwest,itemp)')
1701 idtbry(iwest,itemp)=varid
1702 CASE ('idTbry(ieast,itemp)')
1703 idtbry(ieast,itemp)=varid
1704 CASE ('idTbry(isouth,itemp)')
1705 idtbry(isouth,itemp)=varid
1706 CASE ('idTbry(inorth,itemp)')
1707 idtbry(inorth,itemp)=varid
1708#ifdef SALINITY
1709 CASE ('idTbry(iwest,isalt)')
1710 idtbry(iwest,isalt)=varid
1711 CASE ('idTbry(ieast,isalt)')
1712 idtbry(ieast,isalt)=varid
1713 CASE ('idTbry(isouth,isalt)')
1714 idtbry(isouth,isalt)=varid
1715 CASE ('idTbry(inorth,isalt)')
1716 idtbry(inorth,isalt)=varid
1717#endif
1718 CASE ('idPwet')
1719 idpwet=varid
1720 CASE ('idRwet')
1721 idrwet=varid
1722 CASE ('idUwet')
1723 iduwet=varid
1724 CASE ('idVwet')
1725 idvwet=varid
1726 CASE ('idPair')
1727 idpair=varid
1728 CASE ('idTair')
1729 idtair=varid
1730 CASE ('idQair')
1731 idqair=varid
1732 CASE ('idCfra')
1733 idcfra=varid
1734 CASE ('idSrad')
1735 idsrad=varid
1736 CASE ('idLdwn')
1737 idldwn=varid
1738 CASE ('idLrad')
1739 idlrad=varid
1740 CASE ('idLhea')
1741 idlhea=varid
1742 CASE ('idShea')
1743 idshea=varid
1744 CASE ('idrain')
1745 idrain=varid
1746 CASE ('idEmPf')
1747 idempf=varid
1748 CASE ('idevap')
1749 idevap=varid
1750 CASE ('idUair')
1751 iduair=varid
1752 CASE ('idVair')
1753 idvair=varid
1754 CASE ('idUaiE')
1755 iduaie=varid
1756 CASE ('idVaiN')
1757 idvain=varid
1758 CASE ('idWvds')
1759 idwvds=varid
1760 CASE ('idWvqp')
1761 idwvqp=varid
1762 CASE ('idUwav')
1763 iduwav=varid
1764 CASE ('idVwav')
1765 idvwav=varid
1766 CASE ('idWamp')
1767 idwamp=varid
1768 CASE ('idWam2')
1769 idwam2=varid
1770 CASE ('idWbrk')
1771 idwbrk=varid
1772 CASE ('idWdib')
1773 idwdib=varid
1774 CASE ('idWdif')
1775 idwdif=varid
1776 CASE ('idWdis')
1777 idwdis=varid
1778 CASE ('idWdir')
1779 idwdir=varid
1780 CASE ('idWdip')
1781 idwdip=varid
1782 CASE ('idWdiw')
1783 idwdiw=varid
1784 CASE ('idWztw')
1785 idwztw=varid
1786 CASE ('idWqsp')
1787 idwqsp=varid
1788 CASE ('idWbeh')
1789 idwbeh=varid
1790 CASE ('idWlen')
1791 idwlen=varid
1792 CASE ('idWlep')
1793 idwlep=varid
1794 CASE ('idWptp')
1795 idwptp=varid
1796 CASE ('idWpbt')
1797 idwpbt=varid
1798 CASE ('idWorb')
1799 idworb=varid
1800 CASE ('idWrol')
1801 idwrol=varid
1802 CASE ('idW2xx')
1803 idw2xx=varid
1804 CASE ('idW2xy')
1805 idw2xy=varid
1806 CASE ('idW2yy')
1807 idw2yy=varid
1808 CASE ('idW3xx')
1809 idw3xx=varid
1810 CASE ('idW3xy')
1811 idw3xy=varid
1812 CASE ('idW3yy')
1813 idw3yy=varid
1814 CASE ('idW3zx')
1815 idw3zx=varid
1816 CASE ('idW3zy')
1817 idw3zy=varid
1818 CASE ('idU2rs')
1819 idu2rs=varid
1820 CASE ('idV2rs')
1821 idv2rs=varid
1822 CASE ('idU2Sd')
1823 idu2sd=varid
1824 CASE ('idV2Sd')
1825 idv2sd=varid
1826 CASE ('idU3rs')
1827 idu3rs=varid
1828 CASE ('idV3rs')
1829 idv3rs=varid
1830 CASE ('idU3Sd')
1831 idu3sd=varid
1832 CASE ('idV3Sd')
1833 idv3sd=varid
1834 CASE ('idW3Sd')
1835 idw3sd=varid
1836 CASE ('idW3St')
1837 idw3st=varid
1838 CASE ('idTref')
1839 idtref=varid
1840 CASE ('idTper')
1841 idtper=varid
1842 CASE ('idTzam')
1843 idtzam=varid
1844 CASE ('idTzph')
1845 idtzph=varid
1846 CASE ('idTvph')
1847 idtvph=varid
1848 CASE ('idTvan')
1849 idtvan=varid
1850 CASE ('idTvma')
1851 idtvma=varid
1852 CASE ('idTvmi')
1853 idtvmi=varid
1854 CASE ('idRxpo')
1855 idrxpo=varid
1856 CASE ('idRepo')
1857 idrepo=varid
1858 CASE ('idRdir')
1859 idrdir=varid
1860 CASE ('idRvsh')
1861 idrvsh=varid
1862 CASE ('idRtra')
1863 idrtra=varid
1864 CASE ('idRflg')
1865 idrflg=varid
1866 CASE ('idRtrc(itemp)')
1867 idrtrc(itemp)=varid
1868#ifdef SALINITY
1869 CASE ('idRtrc(isalt)')
1870 idrtrc(isalt)=varid
1871#endif
1872 CASE ('idHsbl')
1873 idhsbl=varid
1874 CASE ('idHbbl')
1875 idhbbl=varid
1876 CASE ('idHzdz')
1877 idhzdz=varid
1878#ifdef UV_DRAG_GRID
1879 CASE ('idragL')
1880 idragl=varid
1881 CASE ('idragQ')
1882 idragq=varid
1883 CASE ('idZoBL')
1884 idzobl=varid
1885#endif
1886 CASE ('idUbot')
1887 idubot=varid
1888 CASE ('idVbot')
1889 idvbot=varid
1890 CASE ('idUbur')
1891 idubur=varid
1892 CASE ('idVbvr')
1893 idvbvr=varid
1894 CASE ('idUbrs')
1895 idubrs=varid
1896 CASE ('idVbrs')
1897 idvbrs=varid
1898 CASE ('idSSHc')
1899 idsshc=varid
1900 CASE ('idUbcl')
1901 idubcl=varid
1902 CASE ('idVbcl')
1903 idvbcl=varid
1904 CASE ('idUclm')
1905 iduclm=varid
1906 CASE ('idVclm')
1907 idvclm=varid
1908 CASE ('idSSSc')
1909 idsssc=varid
1910 CASE ('idSSTc')
1911 idsstc=varid
1912#if defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
1913 defined opt_observations || defined sensitivity_4dvar || \
1914 defined so_semi
1915 CASE ('idZads')
1916 idzads=varid
1917 CASE ('idUbas')
1918 idubas=varid
1919 CASE ('idVbas')
1920 idvbas=varid
1921 CASE ('idUads')
1922 iduads=varid
1923 CASE ('idVads')
1924 idvads=varid
1925 CASE ('idTads(itemp)')
1926 idtads(itemp)=varid
1927# ifdef T_PASSIVE
1928 CASE ('idTads(inert(i))')
1929 load=.true.
1930# endif
1931# ifdef SALINITY
1932 CASE ('idTads(isalt)')
1933 idtads(isalt)=varid
1934# endif
1935 CASE ('idWads')
1936 idwads=varid
1937#endif
1938#ifdef WEAK_CONSTRAINT
1939 CASE ('idZtlf')
1940 idztlf=varid
1941 CASE ('idUbtf')
1942 idubtf=varid
1943 CASE ('idVbtf')
1944 idvbtf=varid
1945 CASE ('idUtlf')
1946 idutlf=varid
1947 CASE ('idVtlf')
1948 idvtlf=varid
1949 CASE ('idTtlf(itemp)')
1950 idttlf(itemp)=varid
1951# ifdef SALINITY
1952 CASE ('idTtlf(isalt)')
1953 idttlf(isalt)=varid
1954# endif
1955#endif
1956 CASE ('idM2nc')
1957 idm2nc=varid
1958 CASE ('idM3nc')
1959 idm3nc=varid
1960 CASE ('idgTnc')
1961 idgtnc=varid
1962#ifdef AVERAGES_DETIDE
1963 CASE ('idCosW')
1964 idcosw=varid
1965 CASE ('idCos2')
1966 idcos2=varid
1967 CASE ('idSinW')
1968 idsinw=varid
1969 CASE ('idSin2')
1970 idsin2=varid
1971 CASE ('idSWCW')
1972 idswcw=varid
1973 CASE ('idFsuD')
1974 idfsud=varid
1975 CASE ('idFsuH')
1976 idfsuh=varid
1977 CASE ('idu2dD')
1978 idu2dd=varid
1979 CASE ('idu2dH')
1980 idu2dh=varid
1981 CASE ('idv2dD')
1982 idv2dd=varid
1983 CASE ('idv2dH')
1984 idv2dh=varid
1985# ifdef SOLVE3D
1986 CASE ('idu3dD')
1987 idu3dd=varid
1988 CASE ('idu3dH')
1989 idu3dh=varid
1990 CASE ('idv3dD')
1991 idv3dd=varid
1992 CASE ('idv3dH')
1993 idv3dh=varid
1994 CASE ('idTrcD(itemp)')
1995 idtrcd(itemp)=varid
1996 CASE ('idTrcH(itemp)')
1997 idtrch(itemp)=varid
1998# ifdef SALINITY
1999 CASE ('idTrcD(isalt)')
2000 idtrcd(isalt)=varid
2001 CASE ('idTrcH(isalt)')
2002 idtrch(isalt)=varid
2003# endif
2004# endif
2005#endif
2006 CASE ('idU2av')
2007 idu2av=varid
2008 CASE ('idV2av')
2009 idv2av=varid
2010 CASE ('idZZav')
2011 idzzav=varid
2012#ifdef SOLVE3D
2013 CASE ('idTTav(itrc)')
2014 load=.true.
2015 CASE ('iHUTav(itrc)')
2016 load=.true.
2017 CASE ('iHVTav(itrc)')
2018 load=.true.
2019 CASE ('idUTav(itrc)')
2020 load=.true.
2021 CASE ('idVTav(itrc)')
2022 load=.true.
2023 CASE ('idHUav')
2024 idhuav=varid
2025 CASE ('idHVav')
2026 idhvav=varid
2027 CASE ('idUUav')
2028 iduuav=varid
2029 CASE ('idUVav')
2030 iduvav=varid
2031 CASE ('idVVav')
2032 idvvav=varid
2033#endif
2034#ifdef T_PASSIVE
2035 CASE ('idTvar(inert(i))')
2036 load=.true.
2037 CASE ('idTbry(iwest,inert(i))')
2038 load=.true.
2039 CASE ('idTbry(ieast,inert(i))')
2040 load=.true.
2041 CASE ('idTbry(isouth,inert(i))')
2042 load=.true.
2043 CASE ('idTbry(inorth,inert(i))')
2044 load=.true.
2045 CASE ('idRtrc(inert(i))')
2046 load=.true.
2047#endif
2048 CASE ('id2dPV')
2049 id2dpv=varid
2050 CASE ('id2dRV')
2051 id2drv=varid
2052 CASE ('id3dPV')
2053 id3dpv=varid
2054 CASE ('id3dRV')
2055 id3drv=varid
2056#ifdef DIAGNOSTICS_UV
2057 CASE ('idDu2d(M2pgrd)')
2058 iddu2d(m2pgrd)=varid
2059 CASE ('idDv2d(M2pgrd)')
2060 iddv2d(m2pgrd)=varid
2061 CASE ('idDu2d(M2sstr)')
2062 iddu2d(m2sstr)=varid
2063 CASE ('idDu2d(M2bstr)')
2064 iddu2d(m2bstr)=varid
2065 CASE ('idDv2d(M2sstr)')
2066 iddv2d(m2sstr)=varid
2067 CASE ('idDv2d(M2bstr)')
2068 iddv2d(m2bstr)=varid
2069 CASE ('idDu2d(M2rate)')
2070 iddu2d(m2rate)=varid
2071 CASE ('idDv2d(M2rate)')
2072 iddv2d(m2rate)=varid
2073# ifdef UV_ADV
2074 CASE ('idDu2d(M2xadv)')
2075 iddu2d(m2xadv)=varid
2076 CASE ('idDu2d(M2yadv)')
2077 iddu2d(m2yadv)=varid
2078 CASE ('idDu2d(M2hadv)')
2079 iddu2d(m2hadv)=varid
2080 CASE ('idDv2d(M2xadv)')
2081 iddv2d(m2xadv)=varid
2082 CASE ('idDv2d(M2yadv)')
2083 iddv2d(m2yadv)=varid
2084 CASE ('idDv2d(M2hadv)')
2085 iddv2d(m2hadv)=varid
2086# endif
2087# ifdef WEC_VF
2088 CASE ('idDu2d(M2hjvf)')
2089 iddu2d(m2hjvf)=varid
2090 CASE ('idDv2d(M2hjvf)')
2091 iddv2d(m2hjvf)=varid
2092 CASE ('idDu2d(M2kvrf)')
2093 iddu2d(m2kvrf)=varid
2094 CASE ('idDv2d(M2kvrf)')
2095 iddv2d(m2kvrf)=varid
2096# ifdef UV_COR
2097 CASE ('idDu2d(M2fsco)')
2098 iddu2d(m2fsco)=varid
2099 CASE ('idDv2d(M2fsco)')
2100 iddv2d(m2fsco)=varid
2101# endif
2102# ifdef BOTTOM_STREAMING
2103 CASE ('idDu2d(M2bstm)')
2104 iddu2d(m2bstm)=varid
2105 CASE ('idDv2d(M2bstm)')
2106 iddv2d(m2bstm)=varid
2107# endif
2108# ifdef SURFACE_STREAMING
2109 CASE ('idDu2d(M2sstm)')
2110 iddu2d(m2sstm)=varid
2111 CASE ('idDv2d(M2sstm)')
2112 iddv2d(m2sstm)=varid
2113# endif
2114 CASE ('idDu2d(M2wrol)')
2115 iddu2d(m2wrol)=varid
2116 CASE ('idDv2d(M2wrol)')
2117 iddv2d(m2wrol)=varid
2118 CASE ('idDu2d(M2wbrk)')
2119 iddu2d(m2wbrk)=varid
2120 CASE ('idDv2d(M2wbrk)')
2121 iddv2d(m2wbrk)=varid
2122 CASE ('idDu2d(M2zeta)')
2123 iddu2d(m2zeta)=varid
2124 CASE ('idDv2d(M2zeta)')
2125 iddv2d(m2zeta)=varid
2126 CASE ('idDu2d(M2zetw)')
2127 iddu2d(m2zetw)=varid
2128 CASE ('idDv2d(M2zetw)')
2129 iddv2d(m2zetw)=varid
2130 CASE ('idDu2d(M2zqsp)')
2131 iddu2d(m2zqsp)=varid
2132 CASE ('idDv2d(M2zqsp)')
2133 iddv2d(m2zqsp)=varid
2134 CASE ('idDu2d(M2zbeh)')
2135 iddu2d(m2zbeh)=varid
2136 CASE ('idDv2d(M2zbeh)')
2137 iddv2d(m2zbeh)=varid
2138# endif
2139# ifdef UV_COR
2140 CASE ('idDu2d(M2fcor)')
2141 iddu2d(m2fcor)=varid
2142 CASE ('idDv2d(M2fcor)')
2143 iddv2d(m2fcor)=varid
2144# endif
2145# if defined UV_VIS2 || defined UV_VIS4
2146 CASE ('idDu2d(M2hvis)')
2147 iddu2d(m2hvis)=varid
2148 CASE ('idDu2d(M2xvis)')
2149 iddu2d(m2xvis)=varid
2150 CASE ('idDu2d(M2yvis)')
2151 iddu2d(m2yvis)=varid
2152 CASE ('idDv2d(M2hvis)')
2153 iddv2d(m2hvis)=varid
2154 CASE ('idDv2d(M2xvis)')
2155 iddv2d(m2xvis)=varid
2156 CASE ('idDv2d(M2yvis)')
2157 iddv2d(m2yvis)=varid
2158# endif
2159# ifdef SOLVE3D
2160 CASE ('idDu3d(M3pgrd)')
2161 iddu3d(m3pgrd)=varid
2162 CASE ('idDv3d(M3pgrd)')
2163 iddv3d(m3pgrd)=varid
2164 CASE ('idDu3d(M3vvis)')
2165 iddu3d(m3vvis)=varid
2166 CASE ('idDv3d(M3vvis)')
2167 iddv3d(m3vvis)=varid
2168 CASE ('idDu3d(M3rate)')
2169 iddu3d(m3rate)=varid
2170 CASE ('idDv3d(M3rate)')
2171 iddv3d(m3rate)=varid
2172# ifdef UV_ADV
2173 CASE ('idDu3d(M3xadv)')
2174 iddu3d(m3xadv)=varid
2175 CASE ('idDu3d(M3yadv)')
2176 iddu3d(m3yadv)=varid
2177 CASE ('idDu3d(M3hadv)')
2178 iddu3d(m3hadv)=varid
2179 CASE ('idDv3d(M3xadv)')
2180 iddv3d(m3xadv)=varid
2181 CASE ('idDv3d(M3yadv)')
2182 iddv3d(m3yadv)=varid
2183 CASE ('idDv3d(M3hadv)')
2184 iddv3d(m3hadv)=varid
2185 CASE ('idDu3d(M3vadv)')
2186 iddu3d(m3vadv)=varid
2187 CASE ('idDv3d(M3vadv)')
2188 iddv3d(m3vadv)=varid
2189# endif
2190# ifdef WEC_VF
2191 CASE ('idDu3d(M3vjvf)')
2192 iddu3d(m3vjvf)=varid
2193 CASE ('idDv3d(M3vjvf)')
2194 iddv3d(m3vjvf)=varid
2195 CASE ('idDu3d(M3hjvf)')
2196 iddu3d(m3hjvf)=varid
2197 CASE ('idDv3d(M3hjvf)')
2198 iddv3d(m3hjvf)=varid
2199 CASE ('idDu3d(M3kvrf)')
2200 iddu3d(m3kvrf)=varid
2201 CASE ('idDv3d(M3kvrf)')
2202 iddv3d(m3kvrf)=varid
2203# ifdef UV_COR
2204 CASE ('idDu3d(M3fsco)')
2205 iddu3d(m3fsco)=varid
2206 CASE ('idDv3d(M3fsco)')
2207 iddv3d(m3fsco)=varid
2208# endif
2209# ifdef BOTTOM_STREAMING
2210 CASE ('idDu3d(M3bstm)')
2211 iddu3d(m3bstm)=varid
2212 CASE ('idDv3d(M3bstm)')
2213 iddv3d(m3bstm)=varid
2214# endif
2215# ifdef SURFACE_STREAMING
2216 CASE ('idDu3d(M3sstm)')
2217 iddu3d(m3sstm)=varid
2218 CASE ('idDv3d(M3sstm)')
2219 iddv3d(m3sstm)=varid
2220# endif
2221 CASE ('idDu3d(M3wrol)')
2222 iddu3d(m3wrol)=varid
2223 CASE ('idDv3d(M3wrol)')
2224 iddv3d(m3wrol)=varid
2225 CASE ('idDu3d(M3wbrk)')
2226 iddu3d(m3wbrk)=varid
2227 CASE ('idDv3d(M3wbrk)')
2228 iddv3d(m3wbrk)=varid
2229# endif
2230# ifdef UV_COR
2231 CASE ('idDu3d(M3fcor)')
2232 iddu3d(m3fcor)=varid
2233 CASE ('idDv3d(M3fcor)')
2234 iddv3d(m3fcor)=varid
2235# endif
2236# if defined UV_VIS2 || defined UV_VIS4
2237 CASE ('idDu3d(M3hvis)')
2238 iddu3d(m3hvis)=varid
2239 CASE ('idDu3d(M3xvis)')
2240 iddu3d(m3xvis)=varid
2241 CASE ('idDu3d(M3yvis)')
2242 iddu3d(m3yvis)=varid
2243 CASE ('idDv3d(M3hvis)')
2244 iddv3d(m3hvis)=varid
2245 CASE ('idDv3d(M3xvis)')
2246 iddv3d(m3xvis)=varid
2247 CASE ('idDv3d(M3yvis)')
2248 iddv3d(m3yvis)=varid
2249# endif
2250# endif
2251#endif
2252#ifdef DIAGNOSTICS_TS
2253 CASE ('idDtrc(iTrate)')
2254 load=.true.
2255 CASE ('idDtrc(iThadv)')
2256 load=.true.
2257 CASE ('idDtrc(iTxadv)')
2258 load=.true.
2259 CASE ('idDtrc(iTyadv)')
2260 load=.true.
2261 CASE ('idDtrc(iTvadv)')
2262 load=.true.
2263# if defined TS_DIF2 || defined TS_DIF4
2264 CASE ('idDtrc(iThdif)')
2265 load=.true.
2266 CASE ('idDtrc(iTxdif)')
2267 load=.true.
2268 CASE ('idDtrc(iTydif)')
2269 load=.true.
2270# if defined MIX_GEO_TS || defined MIX_ISO_TS
2271 CASE ('idDtrc(iTsdif)')
2272 load=.true.
2273# endif
2274# endif
2275 CASE ('idDtrc(iTvdif)')
2276 load=.true.
2277#endif
2278#if defined FORWARD_READ || defined FORWARD_WRITE
2279 CASE ('idRuct')
2280 idruct=varid
2281 CASE ('idRvct')
2282 idrvct=varid
2283 CASE ('idUfx1')
2284 idufx1=varid
2285 CASE ('idUfx2')
2286 idufx2=varid
2287 CASE ('idVfx1')
2288 idvfx1=varid
2289 CASE ('idVfx2')
2290 idvfx2=varid
2291#endif
2292#if defined FOUR_DVAR || defined VERIFICATION
2293 CASE ('idBgEr')
2294 idbger=varid
2295 CASE ('idBgTh')
2296 idbgth=varid
2297 CASE ('idIncr')
2298 idincr=varid
2299 CASE ('idInno')
2300 idinno=varid
2301 CASE ('idNLmf')
2302 idnlmf=varid
2303 CASE ('idNLmi')
2304 idnlmi=varid
2305 CASE ('idNLmo')
2306 idnlmo=varid
2307 CASE ('idNLmp')
2308 idnlmp=varid
2309 CASE ('idNLmu')
2310 idnlmu=varid
2311 CASE ('idNobs')
2312 idnobs=varid
2313 CASE ('idObsD')
2314 idobsd=varid
2315 CASE ('idObsS')
2316 idobss=varid
2317 CASE ('idObsT')
2318 idobst=varid
2319 CASE ('idObsX')
2320 idobsx=varid
2321 CASE ('idObsY')
2322 idobsy=varid
2323 CASE ('idObsZ')
2324 idobsz=varid
2325 CASE ('idOday')
2326 idoday=varid
2327 CASE ('idOerr')
2328 idoerr=varid
2329 CASE ('idOlat')
2330 idolat=varid
2331 CASE ('idOlon')
2332 idolon=varid
2333 CASE ('idOmet')
2334 idomet=varid
2335 CASE ('idOpro')
2336 idopro=varid
2337 CASE ('idOtyp')
2338 idotyp=varid
2339 CASE ('idOval')
2340 idoval=varid
2341 CASE ('idResi')
2342 idresi=varid
2343 CASE ('idKhor')
2344 idkhor=varid
2345 CASE ('idKver')
2346 idkver=varid
2347 CASE ('idTLmo')
2348 idtlmo=varid
2349 CASE ('idMOMi')
2350 idmomi=varid
2351 CASE ('idMOMf')
2352 idmomf=varid
2353#endif
2354
2355#ifdef SEAICE
2356# include <ice_var.h>
2357#endif
2358
2359#ifdef BIOLOGY
2360# if defined BIO_FENNEL
2361# include <fennel_var.h>
2362# elif defined ECOSIM
2363# include <ecosim_var.h>
2364# elif defined HYPOXIA_SRM
2365# include <hypoxia_srm_var.h>
2366# elif defined NEMURO
2367# include <nemuro_var.h>
2368# elif defined NPZD_FRANKS
2369# include <npzd_Franks_var.h>
2370# elif defined NPZD_POWELL
2371# include <npzd_Powell_var.h>
2372# elif defined NPZD_IRON
2373# include <npzd_iron_var.h>
2374# elif defined RED_TIDE
2375# include <red_tide_var.h>
2376# endif
2377#endif
2378
2379#if defined SEDIMENT || defined BBL_MODEL
2380# include <sediment_var.h>
2381#endif
2382
2383 CASE DEFAULT
2384 load=.false.
2385 END SELECT
2386!
2387! Load variable data into information arrays.
2388!
2389 IF (load) THEN
2390 load=.false.
2391 IF (varid.gt.mv) THEN
2392 WRITE (stdout,10) mv, varid
2393 stop
2394 END IF
2395 DO i=1,6
2396 vname(i,varid)=trim(adjustl(vinfo(i)))
2397 END DO
2398 DO ng=1,ngrids
2399 iinfo(1,varid,ng)=gtype
2400 fscale(varid,ng)=scale
2401 END DO
2402
2403#ifdef T_PASSIVE
2404!
2405! Adjust information for all inert passive tracers.
2406!
2407 SELECT CASE (trim(adjustl(vinfo(8))))
2408 CASE ('idTvar(inert(i))')
2409 IF (npt.gt.0) THEN
2410 varid=varid-1
2411# ifdef AGE_MEAN
2412 ic=0
2413 DO i=1,npt,2
2414 varid=varid+1
2415 ic=ic+1
2416 idtvar(inert(i))=varid
2417 DO ng=1,ngrids
2418 fscale(varid,ng)=scale
2419 iinfo(1,varid,ng)=gtype
2420 END DO
2421 WRITE (vname(1,varid),'(a,i2.2)') &
2422 & trim(adjustl(vinfo(1))), ic
2423 WRITE (vname(2,varid),'(a,a,i2.2)') &
2424 & trim(adjustl(vinfo(2))), ', type ', ic
2425 WRITE (vname(3,varid),'(a)') &
2426 & trim(adjustl(vinfo(3)))
2427 WRITE (vname(4,varid),'(a,i2.2)') &
2428 & trim(adjustl(vinfo(4))), ic
2429 WRITE (vname(5,varid),'(a)') &
2430 & trim(adjustl(vinfo(5)))
2431 WRITE (vname(6,varid),'(a,i2.2)') &
2432 & trim(adjustl(vinfo(6))), ic
2433 END DO
2434!
2435 ic=0
2436 DO i=2,npt,2
2437 varid=varid+1
2438 ic=ic+1
2439 idtvar(inert(i))=varid
2440 DO ng=1,ngrids
2441 fscale(varid,ng)=scale
2442 iinfo(1,varid,ng)=gtype
2443 END DO
2444 WRITE (vname(1,varid),'(a,i2.2,a)') &
2445 & trim(adjustl(vinfo(1))), ic, '_age'
2446 WRITE (vname(2,varid),'(a,i2.2)') &
2447 & 'age concentration, type ', ic
2448 WRITE (vname(3,varid),'(a)') &
2449 & 'second kilogram meter-3'
2450 WRITE (vname(4,varid),'(a,i2.2,a)') &
2451 & trim(adjustl(vinfo(4))), ic, '_age'
2452 WRITE (vname(5,varid),'(a)') &
2453 & trim(adjustl(vinfo(5)))
2454 WRITE (vname(6,varid),'(a,i2.2,a)') &
2455 & trim(adjustl(vinfo(6))), ic, '_age'
2456 END DO
2457# else
2458 DO i=1,npt
2459 varid=varid+1
2460 idtvar(inert(i))=varid
2461 DO ng=1,ngrids
2462 fscale(varid,ng)=scale
2463 iinfo(1,varid,ng)=gtype
2464 END DO
2465 WRITE (vname(1,varid),'(a,i2.2)') &
2466 & trim(adjustl(vinfo(1))), i
2467 WRITE (vname(2,varid),'(a,a,i2.2)') &
2468 & trim(adjustl(vinfo(2))), ', type ', i
2469 WRITE (vname(3,varid),'(a)') &
2470 & trim(adjustl(vinfo(3)))
2471 WRITE (vname(4,varid),'(a,i2.2)') &
2472 & trim(adjustl(vinfo(4))), i
2473 WRITE (vname(5,varid),'(a)') &
2474 & trim(adjustl(vinfo(5)))
2475 WRITE (vname(6,varid),'(a,i2.2)') &
2476 & trim(adjustl(vinfo(6))), i
2477 END DO
2478# endif
2479 END IF
2480
2481# if defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
2482 defined opt_observations || defined sensitivity_4dvar || \
2483 defined so_semi
2484 CASE ('idTads(inert(i))')
2485 IF (npt.gt.0) THEN
2486 varid=varid-1
2487 DO i=1,npt
2488 varid=varid+1
2489 idtads(inert(i))=varid
2490 DO ng=1,ngrids
2491 fscale(varid,ng)=scale
2492 iinfo(1,varid,ng)=gtype
2493 END DO
2494 WRITE (vname(1,varid),'(a,i2.2)') &
2495 & trim(adjustl(vinfo(1))), i
2496 WRITE (vname(2,varid),'(a,a,i2.2)') &
2497 & trim(adjustl(vinfo(2))), ', type ', i
2498 WRITE (vname(3,varid),'(a)') &
2499 & trim(adjustl(vinfo(3)))
2500 WRITE (vname(4,varid),'(a,i2.2)') &
2501 & trim(adjustl(vinfo(4))), i
2502 WRITE (vname(5,varid),'(a)') &
2503 & trim(adjustl(vinfo(5)))
2504 WRITE (vname(6,varid),'(a,i2.2)') &
2505 & trim(adjustl(vinfo(6))), i
2506 END DO
2507 END IF
2508# endif
2509 CASE ('idTbry(iwest,inert(i))')
2510 IF (npt.gt.0) THEN
2511 varid=varid-1
2512 DO i=1,npt
2513 varid=varid+1
2514 idtbry(iwest,inert(i))=varid
2515 DO ng=1,ngrids
2516 fscale(varid,ng)=scale
2517 iinfo(1,varid,ng)=gtype
2518 END DO
2519 WRITE (vname(1,varid),'(a,i2.2)') &
2520 & trim(adjustl(vinfo(1))), i
2521 WRITE (vname(2,varid),'(a,a,i2.2)') &
2522 & trim(adjustl(vinfo(2))), ', type ', i
2523 WRITE (vname(3,varid),'(a)') &
2524 & trim(adjustl(vinfo(3)))
2525 WRITE (vname(4,varid),'(a,i2.2,a)') &
2526 & trim(adjustl(vinfo(1))), i, ' western_boundary'
2527 WRITE (vname(5,varid),'(a)') &
2528 & trim(adjustl(vinfo(5)))
2529 WRITE (vname(6,varid),'(a,i2.2)') &
2530 & trim(adjustl(vinfo(6))), i
2531 END DO
2532 END IF
2533 CASE ('idTbry(ieast,inert(i))')
2534 IF (npt.gt.0) THEN
2535 varid=varid-1
2536 DO i=1,npt
2537 varid=varid+1
2538 idtbry(ieast,inert(i))=varid
2539 DO ng=1,ngrids
2540 fscale(varid,ng)=scale
2541 iinfo(1,varid,ng)=gtype
2542 END DO
2543 WRITE (vname(1,varid),'(a,i2.2)') &
2544 & trim(adjustl(vinfo(1))), i
2545 WRITE (vname(2,varid),'(a,a,i2.2)') &
2546 & trim(adjustl(vinfo(2))), ', type ', i
2547 WRITE (vname(3,varid),'(a)') &
2548 & trim(adjustl(vinfo(3)))
2549 WRITE (vname(4,varid),'(a,i2.2,a)') &
2550 & trim(adjustl(vinfo(1))), i, ' eastern_boundary'
2551 WRITE (vname(5,varid),'(a)') &
2552 & trim(adjustl(vinfo(5)))
2553 WRITE (vname(6,varid),'(a,i2.2)') &
2554 & trim(adjustl(vinfo(6))), i
2555 END DO
2556 END IF
2557 CASE ('idTbry(isouth,inert(i))')
2558 IF (npt.gt.0) THEN
2559 varid=varid-1
2560 DO i=1,npt
2561 varid=varid+1
2562 idtbry(isouth,inert(i))=varid
2563 DO ng=1,ngrids
2564 fscale(varid,ng)=scale
2565 iinfo(1,varid,ng)=gtype
2566 END DO
2567 WRITE (vname(1,varid),'(a,i2.2)') &
2568 & trim(adjustl(vinfo(1))), i
2569 WRITE (vname(2,varid),'(a,a,i2.2)') &
2570 & trim(adjustl(vinfo(2))), ', type ', i
2571 WRITE (vname(3,varid),'(a)') &
2572 & trim(adjustl(vinfo(3)))
2573 WRITE (vname(4,varid),'(a,i2.2,a)') &
2574 & trim(adjustl(vinfo(1))), i, ' southern_boundary'
2575 WRITE (vname(5,varid),'(a)') &
2576 & trim(adjustl(vinfo(5)))
2577 WRITE (vname(6,varid),'(a,i2.2)') &
2578 & trim(adjustl(vinfo(6))), i
2579 END DO
2580 END IF
2581 CASE ('idTbry(inorth,inert(i))')
2582 IF (npt.gt.0) THEN
2583 varid=varid-1
2584 DO i=1,npt
2585 varid=varid+1
2586 idtbry(inorth,inert(i))=varid
2587 DO ng=1,ngrids
2588 fscale(varid,ng)=scale
2589 iinfo(1,varid,ng)=gtype
2590 END DO
2591 WRITE (vname(1,varid),'(a,i2.2)') &
2592 & trim(adjustl(vinfo(1))), i
2593 WRITE (vname(2,varid),'(a,a,i2.2)') &
2594 & trim(adjustl(vinfo(2))), ', type ', i
2595 WRITE (vname(3,varid),'(a)') &
2596 & trim(adjustl(vinfo(3)))
2597 WRITE (vname(4,varid),'(a,i2.2,a)') &
2598 & trim(adjustl(vinfo(1))), i, ' northern_boundary'
2599 WRITE (vname(5,varid),'(a)') &
2600 & trim(adjustl(vinfo(5)))
2601 WRITE (vname(6,varid),'(a,i2.2)') &
2602 & trim(adjustl(vinfo(6))), i
2603 END DO
2604 END IF
2605 CASE ('idRtrc(inert(i))')
2606 IF (npt.gt.0) THEN
2607 varid=varid-1
2608 DO i=1,npt
2609 varid=varid+1
2610 idrtrc(inert(i))=varid
2611 DO ng=1,ngrids
2612 fscale(varid,ng)=scale
2613 iinfo(1,varid,ng)=gtype
2614 END DO
2615 WRITE (vname(1,varid),'(a,i2.2)') &
2616 & trim(adjustl(vinfo(1))), i
2617 WRITE (vname(2,varid),'(a,a,i2.2)') &
2618 & trim(adjustl(vinfo(2))), ', type ', i
2619 WRITE (vname(3,varid),'(a)') &
2620 & trim(adjustl(vinfo(3)))
2621 WRITE (vname(4,varid),'(a,i2.2)') &
2622 & trim(adjustl(vinfo(4))), i
2623 WRITE (vname(5,varid),'(a)') &
2624 & trim(adjustl(vinfo(5)))
2625 WRITE (vname(6,varid),'(a,i2.2)') &
2626 & trim(adjustl(vinfo(6))), i
2627 END DO
2628 END IF
2629 END SELECT
2630#endif
2631#ifdef DIAGNOSTICS_TS
2632!
2633! Adjust information for tracer diagnostic variables. This needs to be
2634! done last because it needs all the tracers variable names.
2635!
2636 SELECT CASE (vinfo(1))
2637 CASE ('_rate')
2638 varid=varid-1
2639 DO i=1,mt
2640 varid=varid+1
2641 iddtrc(i,itrate)=varid
2642 DO ng=1,ngrids
2643 fscale(varid,ng)=scale
2644 iinfo(1,varid,ng)=gtype
2645 END DO
2646 WRITE (vname(1,varid),'(a,a)') &
2647 & trim(adjustl(vname(1,idtvar(i)))), &
2648 & trim(adjustl(vinfo(1)))
2649 WRITE (vname(2,varid),'(a,", ",a)') &
2650 & trim(adjustl(vname(2,idtvar(i)))), &
2651 & trim(adjustl(vinfo(2)))
2652 WRITE (vname(3,varid),'(a,1x,a)') &
2653 & trim(adjustl(vname(3,idtvar(i)))), &
2654 & trim(adjustl(vinfo(3)))
2655 WRITE (vname(4,varid),'(a,1x,a)') &
2656 & trim(adjustl(vname(1,idtvar(i)))), &
2657 & trim(adjustl(vinfo(4)))
2658 WRITE (vname(5,varid),'(a)') &
2659 & trim(adjustl(vinfo(5)))
2660 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
2661 & prefix='sea_water_', &
2662 & suffix=vinfo(6))
2663 END DO
2664 CASE ('_hadv')
2665 varid=varid-1
2666 DO i=1,mt
2667 varid=varid+1
2668 iddtrc(i,ithadv)=varid
2669 DO ng=1,ngrids
2670 fscale(varid,ng)=scale
2671 iinfo(1,varid,ng)=gtype
2672 END DO
2673 WRITE (vname(1,varid),'(a,a)') &
2674 & trim(adjustl(vname(1,idtvar(i)))), &
2675 & trim(adjustl(vinfo(1)))
2676 WRITE (vname(2,varid),'(a,", ",a)') &
2677 & trim(adjustl(vname(2,idtvar(i)))), &
2678 & trim(adjustl(vinfo(2)))
2679 WRITE (vname(3,varid),'(a,1x,a)') &
2680 & trim(adjustl(vname(3,idtvar(i)))), &
2681 & trim(adjustl(vinfo(3)))
2682 WRITE (vname(4,varid),'(a,1x,a)') &
2683 & trim(adjustl(vname(1,idtvar(i)))), &
2684 & trim(adjustl(vinfo(4)))
2685 WRITE (vname(5,varid),'(a)') &
2686 & trim(adjustl(vinfo(5)))
2687 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
2688 & prefix='sea_water_', &
2689 & suffix=vinfo(6))
2690 END DO
2691 CASE ('_xadv')
2692 varid=varid-1
2693 DO i=1,mt
2694 varid=varid+1
2695 iddtrc(i,itxadv)=varid
2696 DO ng=1,ngrids
2697 fscale(varid,ng)=scale
2698 iinfo(1,varid,ng)=gtype
2699 END DO
2700 WRITE (vname(1,varid),'(a,a)') &
2701 & trim(adjustl(vname(1,idtvar(i)))), &
2702 & trim(adjustl(vinfo(1)))
2703 WRITE (vname(2,varid),'(a,", ",a)') &
2704 & trim(adjustl(vname(2,idtvar(i)))), &
2705 & trim(adjustl(vinfo(2)))
2706 WRITE (vname(3,varid),'(a,1x,a)') &
2707 & trim(adjustl(vname(3,idtvar(i)))), &
2708 & trim(adjustl(vinfo(3)))
2709 WRITE (vname(4,varid),'(a,1x,a)') &
2710 & trim(adjustl(vname(1,idtvar(i)))), &
2711 & trim(adjustl(vinfo(4)))
2712 WRITE (vname(5,varid),'(a)') &
2713 & trim(adjustl(vinfo(5)))
2714 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
2715 & prefix='sea_water_', &
2716 & suffix=vinfo(6))
2717 END DO
2718 CASE ('_yadv')
2719 varid=varid-1
2720 DO i=1,mt
2721 varid=varid+1
2722 iddtrc(i,ityadv)=varid
2723 DO ng=1,ngrids
2724 fscale(varid,ng)=scale
2725 iinfo(1,varid,ng)=gtype
2726 END DO
2727 WRITE (vname(1,varid),'(a,a)') &
2728 & trim(adjustl(vname(1,idtvar(i)))), &
2729 & trim(adjustl(vinfo(1)))
2730 WRITE (vname(2,varid),'(a,", ",a)') &
2731 & trim(adjustl(vname(2,idtvar(i)))), &
2732 & trim(adjustl(vinfo(2)))
2733 WRITE (vname(3,varid),'(a,1x,a)') &
2734 & trim(adjustl(vname(3,idtvar(i)))), &
2735 & trim(adjustl(vinfo(3)))
2736 WRITE (vname(4,varid),'(a,1x,a)') &
2737 & trim(adjustl(vname(1,idtvar(i)))), &
2738 & trim(adjustl(vinfo(4)))
2739 WRITE (vname(5,varid),'(a)') &
2740 & trim(adjustl(vinfo(5)))
2741 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
2742 & prefix='sea_water_', &
2743 & suffix=vinfo(6))
2744 END DO
2745 CASE ('_vadv')
2746 varid=varid-1
2747 DO i=1,mt
2748 varid=varid+1
2749 iddtrc(i,itvadv)=varid
2750 DO ng=1,ngrids
2751 fscale(varid,ng)=scale
2752 iinfo(1,varid,ng)=gtype
2753 END DO
2754 WRITE (vname(1,varid),'(a,a)') &
2755 & trim(adjustl(vname(1,idtvar(i)))), &
2756 & trim(adjustl(vinfo(1)))
2757 WRITE (vname(2,varid),'(a,", ",a)') &
2758 & trim(adjustl(vname(2,idtvar(i)))), &
2759 & trim(adjustl(vinfo(2)))
2760 WRITE (vname(3,varid),'(a,1x,a)') &
2761 & trim(adjustl(vname(3,idtvar(i)))), &
2762 & trim(adjustl(vinfo(3)))
2763 WRITE (vname(4,varid),'(a,1x,a)') &
2764 & trim(adjustl(vname(1,idtvar(i)))), &
2765 & trim(adjustl(vinfo(4)))
2766 WRITE (vname(5,varid),'(a)') &
2767 & trim(adjustl(vinfo(5)))
2768 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
2769 & prefix='sea_water_', &
2770 & suffix=vinfo(6))
2771 END DO
2772# if defined TS_DIF2 || defined TS_DIF4
2773 CASE ('_hdiff')
2774 varid=varid-1
2775 DO i=1,mt
2776 varid=varid+1
2777 iddtrc(i,ithdif)=varid
2778 DO ng=1,ngrids
2779 fscale(varid,ng)=scale
2780 iinfo(1,varid,ng)=gtype
2781 END DO
2782 WRITE (vname(1,varid),'(a,a)') &
2783 & trim(adjustl(vname(1,idtvar(i)))), &
2784 & trim(adjustl(vinfo(1)))
2785 WRITE (vname(2,varid),'(a,", ",a)') &
2786 & trim(adjustl(vname(2,idtvar(i)))), &
2787 & trim(adjustl(vinfo(2)))
2788 WRITE (vname(3,varid),'(a,1x,a)') &
2789 & trim(adjustl(vname(3,idtvar(i)))), &
2790 & trim(adjustl(vinfo(3)))
2791 WRITE (vname(4,varid),'(a,1x,a)') &
2792 & trim(adjustl(vname(1,idtvar(i)))), &
2793 & trim(adjustl(vinfo(4)))
2794 WRITE (vname(5,varid),'(a)') &
2795 & trim(adjustl(vinfo(5)))
2796 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
2797 & prefix='sea_water_', &
2798 & suffix=vinfo(6))
2799 END DO
2800 CASE ('_xdiff')
2801 varid=varid-1
2802 DO i=1,mt
2803 varid=varid+1
2804 iddtrc(i,itxdif)=varid
2805 DO ng=1,ngrids
2806 fscale(varid,ng)=scale
2807 iinfo(1,varid,ng)=gtype
2808 END DO
2809 WRITE (vname(1,varid),'(a,a)') &
2810 & trim(adjustl(vname(1,idtvar(i)))), &
2811 & trim(adjustl(vinfo(1)))
2812 WRITE (vname(2,varid),'(a,", ",a)') &
2813 & trim(adjustl(vname(2,idtvar(i)))), &
2814 & trim(adjustl(vinfo(2)))
2815 WRITE (vname(3,varid),'(a,1x,a)') &
2816 & trim(adjustl(vname(3,idtvar(i)))), &
2817 & trim(adjustl(vinfo(3)))
2818 WRITE (vname(4,varid),'(a,1x,a)') &
2819 & trim(adjustl(vname(1,idtvar(i)))), &
2820 & trim(adjustl(vinfo(4)))
2821 WRITE (vname(5,varid),'(a)') &
2822 & trim(adjustl(vinfo(5)))
2823 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
2824 & prefix='sea_water_', &
2825 & suffix=vinfo(6))
2826 END DO
2827 CASE ('_ydiff')
2828 varid=varid-1
2829 DO i=1,mt
2830 varid=varid+1
2831 iddtrc(i,itydif)=varid
2832 DO ng=1,ngrids
2833 fscale(varid,ng)=scale
2834 iinfo(1,varid,ng)=gtype
2835 END DO
2836 WRITE (vname(1,varid),'(a,a)') &
2837 & trim(adjustl(vname(1,idtvar(i)))), &
2838 & trim(adjustl(vinfo(1)))
2839 WRITE (vname(2,varid),'(a,", ",a)') &
2840 & trim(adjustl(vname(2,idtvar(i)))), &
2841 & trim(adjustl(vinfo(2)))
2842 WRITE (vname(3,varid),'(a,1x,a)') &
2843 & trim(adjustl(vname(3,idtvar(i)))), &
2844 & trim(adjustl(vinfo(3)))
2845 WRITE (vname(4,varid),'(a,1x,a)') &
2846 & trim(adjustl(vname(1,idtvar(i)))), &
2847 & trim(adjustl(vinfo(4)))
2848 WRITE (vname(5,varid),'(a)') &
2849 & trim(adjustl(vinfo(5)))
2850 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
2851 & prefix='sea_water_', &
2852 & suffix=vinfo(6))
2853 END DO
2854# if defined MIX_GEO_TS || defined MIX_ISO_TS
2855 CASE ('_sdiff')
2856 varid=varid-1
2857 DO i=1,mt
2858 varid=varid+1
2859 iddtrc(i,itsdif)=varid
2860 DO ng=1,ngrids
2861 fscale(varid,ng)=scale
2862 iinfo(1,varid,ng)=gtype
2863 END DO
2864 WRITE (vname(1,varid),'(a,a)') &
2865 & trim(adjustl(vname(1,idtvar(i)))), &
2866 & trim(adjustl(vinfo(1)))
2867 WRITE (vname(2,varid),'(a,", ",a)') &
2868 & trim(adjustl(vname(2,idtvar(i)))), &
2869 & trim(adjustl(vinfo(2)))
2870 WRITE (vname(3,varid),'(a,1x,a)') &
2871 & trim(adjustl(vname(3,idtvar(i)))), &
2872 & trim(adjustl(vinfo(3)))
2873 WRITE (vname(4,varid),'(a,1x,a)') &
2874 & trim(adjustl(vname(1,idtvar(i)))), &
2875 & trim(adjustl(vinfo(4)))
2876 WRITE (vname(5,varid),'(a)') &
2877 & trim(adjustl(vinfo(5)))
2878 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
2879 & prefix='sea_water_', &
2880 & suffix=vinfo(6))
2881 END DO
2882# endif
2883# endif
2884 CASE ('_vdiff')
2885 varid=varid-1
2886 DO i=1,mt
2887 varid=varid+1
2888 iddtrc(i,itvdif)=varid
2889 DO ng=1,ngrids
2890 fscale(varid,ng)=scale
2891 iinfo(1,varid,ng)=gtype
2892 END DO
2893 WRITE (vname(1,varid),'(a,a)') &
2894 & trim(adjustl(vname(1,idtvar(i)))), &
2895 & trim(adjustl(vinfo(1)))
2896 WRITE (vname(2,varid),'(a,", ",a)') &
2897 & trim(adjustl(vname(2,idtvar(i)))), &
2898 & trim(adjustl(vinfo(2)))
2899 WRITE (vname(3,varid),'(a,1x,a)') &
2900 & trim(adjustl(vname(3,idtvar(i)))), &
2901 & trim(adjustl(vinfo(3)))
2902 WRITE (vname(4,varid),'(a,1x,a)') &
2903 & trim(adjustl(vname(1,idtvar(i)))), &
2904 & trim(adjustl(vinfo(4)))
2905 WRITE (vname(5,varid),'(a)') &
2906 & trim(adjustl(vinfo(5)))
2907 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
2908 & prefix='sea_water_', &
2909 & suffix=vinfo(6))
2910 END DO
2911 END SELECT
2912#endif
2913#if defined SOLVE3D && (defined AVERAGES || defined AD_AVERAGES)
2914!
2915! Determine metadata for quadratic tracer averages.
2916!
2917 SELECT CASE (vinfo(1))
2918 CASE ('tracer2')
2919 varid=varid-1
2920 DO i=1,mt
2921 varid=varid+1
2922 idttav(i)=varid
2923 DO ng=1,ngrids
2924 fscale(varid,ng)=scale
2925 iinfo(1,varid,ng)=gtype
2926 END DO
2927 WRITE (vname(1,varid),'(a,a)') &
2928 & trim(adjustl(vname(1,idtvar(i)))), '_2'
2929 WRITE (vname(2,varid),'(a,1x,a)') &
2930 & 'squared', &
2931 & trim(adjustl(vname(2,idtvar(i))))
2932 IF (trim(adjustl(vname(3,idtvar(i)))).eq. &
2933 & 'nondimensional') THEN
2934 WRITE (vname(3,varid),'(a)') &
2935 & trim(adjustl(vname(3,idtvar(i))))
2936 ELSE
2937 WRITE (vname(3,varid),'(a,a)') &
2938 & trim(adjustl(vname(3,idtvar(i)))), '2'
2939 END IF
2940 WRITE (vname(4,varid),'(a,1x,a)') &
2941 & trim(adjustl(vname(2,idtvar(i)))), &
2942 & trim(adjustl(vinfo(4)))
2943 WRITE (vname(5,varid),'(a)') &
2944 & trim(adjustl(vinfo(5)))
2945 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
2946 & prefix=vinfo(6), &
2947 & suffix='_in_sea_water')
2948 END DO
2949 CASE ('Huontracer')
2950 varid=varid-1
2951 DO i=1,mt
2952 varid=varid+1
2953 ihutav(i)=varid
2954 DO ng=1,ngrids
2955 fscale(varid,ng)=scale
2956 iinfo(1,varid,ng)=gtype
2957 END DO
2958 WRITE (vname(1,varid),'(a,a)') &
2959 & 'Huon_', trim(adjustl(vname(1,idtvar(i))))
2960 WRITE (vname(2,varid),'(a,1x,a)') &
2961 & trim(adjustl(vname(2,idtvar(i)))), &
2962 & 'u-volume flux'
2963 IF (trim(adjustl(vname(3,idtvar(i)))).eq. &
2964 & 'nondimensional') THEN
2965 WRITE (vname(3,varid),'(a)') &
2966 & 'meter3 second-1'
2967 ELSE
2968 WRITE (vname(3,varid),'(a,1x,a)') &
2969 & 'meter3 second-1', &
2970 & trim(adjustl(vname(3,idtvar(i))))
2971 END IF
2972 WRITE (vname(4,varid),'(a,1x,a)') &
2973 & trim(adjustl(vname(2,idtvar(i)))), &
2974 & trim(adjustl(vinfo(4)))
2975 WRITE (vname(5,varid),'(a)') &
2976 & trim(adjustl(vinfo(5)))
2977 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
2978 & prefix=vinfo(6))
2979 END DO
2980 CASE ('utracer')
2981 varid=varid-1
2982 DO i=1,mt
2983 varid=varid+1
2984 idutav(i)=varid
2985 DO ng=1,ngrids
2986 fscale(varid,ng)=scale
2987 iinfo(1,varid,ng)=gtype
2988 END DO
2989 WRITE (vname(1,varid),'(a,a)') &
2990 & 'u_', trim(adjustl(vname(1,idtvar(i))))
2991 WRITE (vname(2,varid),'(a,1x,a)') &
2992 & 'u-momentum times', &
2993 & trim(adjustl(vname(2,idtvar(i))))
2994 IF (trim(adjustl(vname(3,idtvar(i)))).eq. &
2995 & 'nondimensional') THEN
2996 WRITE (vname(3,varid),'(a)') &
2997 & 'meter second-1'
2998 ELSE
2999 WRITE (vname(3,varid),'(a,1x,a)') &
3000 & 'meter second-1', &
3001 & trim(adjustl(vname(3,idtvar(i))))
3002 END IF
3003 WRITE (vname(4,varid),'(a,1x,a)') &
3004 & trim(adjustl(vinfo(4))), &
3005 & trim(adjustl(vname(2,idtvar(i))))
3006 vname(5,varid)='ocean_time'
3007 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
3008 & prefix=vinfo(6), &
3009 & suffix='_in_sea_water')
3010 END DO
3011 CASE ('Hvomtracer')
3012 varid=varid-1
3013 DO i=1,mt
3014 varid=varid+1
3015 ihvtav(i)=varid
3016 DO ng=1,ngrids
3017 fscale(varid,ng)=scale
3018 iinfo(1,varid,ng)=gtype
3019 END DO
3020 WRITE (vname(1,varid),'(a,a)') &
3021 & 'Hvom_', trim(adjustl(vname(1,idtvar(i))))
3022 WRITE (vname(2,varid),'(a,1x,a)') &
3023 & trim(adjustl(vname(2,idtvar(i)))), &
3024 & 'v-volume flux'
3025 IF (trim(adjustl(vname(3,idtvar(i)))).eq. &
3026 & 'nondimensional') THEN
3027 WRITE (vname(3,varid),'(a)') &
3028 & 'meter3 second-1'
3029 ELSE
3030 WRITE (vname(3,varid),'(a,1x,a)') &
3031 & 'meter3 second-1', &
3032 & trim(adjustl(vname(3,idtvar(i))))
3033 END IF
3034 WRITE (vname(4,varid),'(a,1x,a)') &
3035 & trim(adjustl(vname(2,idtvar(i)))), &
3036 & trim(adjustl(vinfo(4)))
3037 WRITE (vname(5,varid),'(a)') &
3038 & trim(adjustl(vinfo(5)))
3039 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
3040 & prefix=vinfo(6))
3041 END DO
3042 CASE ('vtracer')
3043 varid=varid-1
3044 DO i=1,mt
3045 varid=varid+1
3046 idvtav(i)=varid
3047 DO ng=1,ngrids
3048 fscale(varid,ng)=scale
3049 iinfo(1,varid,ng)=gtype
3050 END DO
3051 WRITE (vname(1,varid),'(a,a)') &
3052 & 'v_', trim(adjustl(vname(1,idtvar(i))))
3053 WRITE (vname(2,varid),'(a,1x,a)') &
3054 & 'v-momentum times', &
3055 & trim(adjustl(vname(2,idtvar(i))))
3056 IF (trim(adjustl(vname(3,idtvar(i)))).eq. &
3057 & 'nondimensional') THEN
3058 WRITE (vname(3,varid),'(a)') &
3059 & 'meter second-1'
3060 ELSE
3061 WRITE (vname(3,varid),'(a,1x,a)') &
3062 & 'meter second-1', &
3063 & trim(adjustl(vname(3,idtvar(i))))
3064 END IF
3065 WRITE (vname(4,varid),'(a,1x,a)') &
3066 & trim(adjustl(vinfo(4))), &
3067 & trim(adjustl(vname(2,idtvar(i))))
3068 vname(5,varid)='ocean_time'
3069 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
3070 & prefix=vinfo(6), &
3071 & suffix='_in_sea_water')
3072 END DO
3073 END SELECT
3074#endif
3075 ELSE
3076 varid=varid-1
3077 END IF
3078 END DO metadata_loop
3079
3080#ifdef SOLVE3D
3081!
3082!-----------------------------------------------------------------------
3083! Set passive tracers surface flux metadata. The variable name is the
3084! same as the basic tracer but with the _sflux suffix.
3085!-----------------------------------------------------------------------
3086!
3087 DO i=nat+1,mt
3088 varid=varid+1
3089 IF (varid.gt.mv) THEN
3090 WRITE (stdout,10) mv, varid
3091 stop
3092 END IF
3093 idtsur(i)=varid
3094 DO ng=1,ngrids
3095 fscale(varid,ng)=1.0_r8
3096 iinfo(1,varid,ng)=r2dvar
3097 END DO
3098 WRITE (vname(1,varid),'(a,a)') &
3099 & trim(adjustl(vname(1,idtvar(i)))), '_sflux'
3100 WRITE (vname(2,varid),'(a,a)') &
3101 & trim(adjustl(vname(2,idtvar(i)))), ', surface flux'
3102 WRITE (vname(3,varid),'(a,1x,a)') &
3103 & trim(adjustl(vname(3,idtvar(i)))), 'meter second-1'
3104 WRITE (vname(4,varid),'(3a)') 'surface ', &
3105 & trim(adjustl(vname(2,idtvar(i)))), ' flux'
3106 WRITE (vname(5,varid),'(a)') &
3107 & trim(adjustl(vname(1,idtvar(i))))
3108 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
3109 & prefix='sea_surface_', &
3110 & suffix='_flux')
3111 END DO
3112!
3113!-----------------------------------------------------------------------
3114! Set passive model surface tracers metadata. The variable name is the
3115! same as the basic tracer but with the _sur suffix.
3116!-----------------------------------------------------------------------
3117!
3118 DO i=nat+1,mt
3119 varid=varid+1
3120 IF (varid.gt.mv) THEN
3121 WRITE (stdout,10) mv, varid
3122 stop
3123 END IF
3124 idsurt(i)=varid
3125 DO ng=1,ngrids
3126 fscale(varid,ng)=1.0_r8
3127 iinfo(1,varid,ng)=r2dvar
3128 END DO
3129 WRITE (vname(1,varid),'(a,a)') &
3130 & trim(adjustl(vname(1,idtvar(i)))), '_sur'
3131 WRITE (vname(2,varid),'(2a)') 'surface ', &
3132 & trim(adjustl(vname(2,idtvar(i))))
3133 WRITE (vname(3,varid),'(a)') &
3134 & trim(adjustl(vname(3,idtvar(i))))
3135 WRITE (vname(4,varid),'(a)') &
3136 & trim(vname(2,varid))
3137 WRITE (vname(5,varid),'(a)') &
3138 & trim(adjustl(vname(5,idtvar(i))))
3139 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
3140 & prefix='sea_surface_')
3141 END DO
3142#endif
3143#ifdef WEAK_CONSTRAINT
3144!
3145!-----------------------------------------------------------------------
3146! Set passive tracers impulse forcing. The metadata values are the
3147! same as the basic tracer but with different indices sinc they are
3148! used at the same time. This allows flexibility in the time
3149! interpolation.
3150!-----------------------------------------------------------------------
3151!
3152 DO i=nat+1,mt
3153 varid=varid+1
3154 IF (varid.gt.mv) THEN
3155 WRITE (stdout,10) mv, varid
3156 stop
3157 END IF
3158 idttlf(i)=varid
3159 DO ng=1,ngrids
3160 fscale(varid,ng)=1.0_r8
3161 iinfo(1,varid,ng)=r3dvar
3162 END DO
3163 WRITE (vname(1,varid),'(a)') &
3164 & trim(adjustl(vname(1,idtvar(i))))
3165 WRITE (vname(2,varid),'(a,a)') &
3166 & trim(adjustl(vname(2,idtvar(i)))), ' impulse forcing'
3167 WRITE (vname(3,varid),'(a)') &
3168 & trim(adjustl(vname(3,idtvar(i))))
3169 WRITE (vname(4,varid),'(a,a)') &
3170 & trim(adjustl(vname(2,idtvar(i)))), ' impulse'
3171 WRITE (vname(5,varid),'(a)') &
3172 & trim(adjustl(vname(5,idtvar(i))))
3173 CALL standardname (vname(6,varid), vname(2,idtvar(i)), &
3174 & prefix='sea_water_', &
3175 & suffix='_impulse')
3176 END DO
3177#endif
3178!
3179!-----------------------------------------------------------------------
3180! Set model state variables metadata indices.
3181!-----------------------------------------------------------------------
3182!
3186#ifdef SOLVE3D
3189 DO i=1,mt
3190 idsvar(istvar(i))=idtvar(i)
3191 END DO
3192#endif
3193#if defined ADJUST_WSTRESS || defined FORCING_SV || \
3194 defined hessian_fsv || defined so_semi || \
3195 defined stochastic_opt
3198#endif
3199#ifdef SOLVE3D
3200# if defined ADJUST_STFLUX || defined FORCING_SV || \
3201 defined hessian_fsv || defined so_semi || \
3202 defined stochastic_opt
3203 DO i=1,mt
3204 idsvar(istsur(i))=idtsur(i)
3205 END DO
3206# endif
3207#endif
3208#ifdef WEC
3209 idsvar(isu2sd)=idu2sd
3210 idsvar(isv2sd)=idv2sd
3211# if defined SOLVE3D
3212 idsvar(isu3sd)=idu3sd
3213 idsvar(isv3sd)=idv3sd
3214# endif
3215#endif
3216#ifdef SOLVE3D
3217# if defined GLS_MIXING || defined MY25_MIXING
3219# endif
3221#endif
3222!
3223!-----------------------------------------------------------------------
3224! Set model lateral boundary variables index.
3225!-----------------------------------------------------------------------
3226!
3230#ifdef SOLVE3D
3233 DO i=1,mt
3234 idbvar(istvar(i))=idtvar(i)
3235 END DO
3236# if defined GLS_MIXING || defined MY25_MIXING
3238# endif
3239#endif
3240#ifdef WEC
3241 idbvar(isu2sd)=idu2sd
3242 idbvar(isv2sd)=idv2sd
3243# if defined SOLVE3D
3244 idbvar(isu3sd)=idu3sd
3245 idbvar(isv3sd)=idv3sd
3246# endif
3247#endif
3248#ifdef ICE_MODEL
3249!
3250! Set ice model state boundary indices. Currently, the last ice model
3251! LBC state variable is isVice=11.
3252!
3253 DO i=1,nices
3254 ibice(i)=i
3255 END DO
3256 ic=ic_brylast
3257 DO i=1,isvice
3258 ic=ic+1
3259 idbvar(ic)=isice(i)
3260 END DO
3261#endif
3262#ifdef ADJUST_BOUNDARY
3263!
3264!-----------------------------------------------------------------------
3265! If adjusting open boundaries, set metadata variables. The variable
3266! name is the same as the state variable but with the _obc suffix.
3267!-----------------------------------------------------------------------
3268!
3269 DO i=1,nlbcvar
3270 IF (idbvar(i).gt.0 ) THEN
3271 varid=varid+1
3272 IF (varid.gt.mv) THEN
3273 WRITE (stdout,10) mv, varid
3274 stop
3275 END IF
3276 idsbry(i)=varid
3277 DO ng=1,ngrids
3278 fscale(varid,ng)=1.0_r8
3279 iinfo(1,varid,ng)=0
3280 END DO
3281 WRITE (vname(1,varid),'(a,a)') &
3282 & trim(adjustl(vname(1,idsvar(i)))), '_obc'
3283 WRITE (vname(2,varid),'(a,a)') &
3284 & trim(adjustl(vname(2,idsvar(i)))), ', open boundaries'
3285 WRITE (vname(3,varid),'(a)') &
3286 & trim(adjustl(vname(3,idsvar(i))))
3287 WRITE (vname(4,varid),'(a,a)') &
3288 & trim(vname(1,varid)), ', scalar, series'
3289 WRITE (vname(5,varid),'(a)') &
3290 & trim(adjustl(vname(5,idsvar(i))))
3291 END IF
3292 END DO
3293#endif
3294!
3295! Save last variable ID counter used.
3296!
3297 last_varid=varid
3298 dmem(1)=dmem(1)+real(varid,r8)
3299!
3300 10 FORMAT (/,' MOD_NCPARAM - too small dimension ', &
3301 & 'parameter, MV = ',2i5,/,15x, &
3302 & 'change file mod_ncparam.F and recompile.')
3303!
3304 RETURN
3305 END SUBROUTINE initialize_ncparam
3306!
3307 END MODULE mod_ncparam
logical function, public io_metadata(firstpass, vinfo, scale, offset)
integer, parameter isvice
Definition ice_mod.h:147
integer, dimension(nices) ibice
Definition ice_mod.h:162
integer, dimension(nices) isice
Definition ice_mod.h:135
integer, parameter nices
Definition ice_mod.h:130
integer stdout
integer iddano
integer idoerr
integer idnlmo
integer iddqdt
integer idvair
integer idwqsp
integer idvmls
integer idobss
integer, dimension(:), allocatable idttav
logical, dimension(:,:), allocatable hout
integer, dimension(:), allocatable nxyp
integer idtlmo
integer idubtf
integer idevap
integer idvbrs
integer, dimension(:), allocatable riub
integer, dimension(2) iddiff
integer idobst
integer, dimension(:), allocatable ihvtav
integer, dimension(:), allocatable iddu2d
integer, parameter io_nf90
Definition mod_ncparam.F:95
integer, dimension(:), allocatable rjlb
integer, dimension(:,:), allocatable clmncid
integer, dimension(:), allocatable nxyu
integer idu2dh
type(file_desc_t), dimension(:,:), pointer frcpiofile
real(r8), dimension(:), allocatable rymin
integer idu3dd
integer idzzav
integer idu2av
integer, dimension(4) idu3bc
integer idv2rs
character(len=5) version
integer idw2yy
integer idrtra
integer iduvwc
integer idwdis
integer idm3nc
integer, dimension(:), allocatable idefadj
integer idwdif
character(len=256), dimension(:,:), allocatable cinfo
integer idv3sd
integer idlatp
integer idinno
integer idhzdz
integer idrv3d
integer idubar
integer, dimension(4) idzbry
integer idlonp
integer idwvel
integer idvvel
integer idv3dd
integer idubur
integer idvbed
integer idxgrr
integer idolat
integer idopro
integer idtopo
integer, dimension(:), allocatable vjlb
integer idlonv
integer, dimension(:), allocatable ihutav
integer idhsbl
integer idsin2
integer, dimension(4) idu2bc
integer idvsur
integer idw3zy
integer, dimension(:), allocatable idefqck
integer idw3zx
integer idtzph
integer idvsms
integer idglat
integer, dimension(:), allocatable iddv2d
character(len=80) git_rev
integer, parameter nv
integer idobsy
integer idtper
logical, dimension(:,:,:), allocatable linfo
integer idusue
integer idw3yy
integer idobsd
integer idcfra
integer idpthw
integer idnlmi
integer idwlen
integer idolon
integer idwdiw
integer idnlmf
subroutine, public deallocate_ncparam
integer isvvel
integer, dimension(:), allocatable idsbry
integer, dimension(:), allocatable idefavg
integer idmskv
integer, parameter io_pio
Definition mod_ncparam.F:96
integer idlonr
integer idubas
integer, dimension(:), allocatable idutav
integer idvbvr
integer idu3dh
integer, dimension(:), allocatable idefdia
real(r8), dimension(:), allocatable vymin
integer, dimension(:), allocatable iddu3d
integer iduads
integer idwsin
integer idlatv
integer, dimension(:), allocatable idsurt
integer idw2xx
integer idglon
integer isvbar
integer idvclm
integer idangr
integer, dimension(:), allocatable idbvar
integer, dimension(:), allocatable idrtrc
integer idomet
integer idpair
integer id3dpv
integer, dimension(:), allocatable uilb
integer idrwet
type(my_vardesc), dimension(:,:,:), pointer dinfo
integer, dimension(:), allocatable nwaterv
integer idwlep
integer idw3st
integer isvstr
integer idvbas
integer idu2rs
integer isbp2d
integer idmsku
integer idv2dn
integer idvbot
integer idsdif
integer, dimension(:), allocatable idtbot
integer idoval
integer isbu2d
integer, dimension(:), allocatable ideftlm
character(len=256) git_url
integer idragl
integer idvfx2
real(r8), dimension(:), allocatable rymax
integer idv3dh
integer idvsun
integer id3drv
integer idwrol
real(dp), dimension(:,:,:), allocatable vtime
integer, dimension(:), allocatable idtsur
integer idlatu
real(r8), dimension(:), allocatable uymin
integer idru2d
integer id2drv
real(r8), dimension(:), allocatable vymax
real(r8), dimension(:), allocatable uxmin
integer idvmkp
integer idempf
character(len=44) date_str
integer idvain
character(len=maxlen) history
integer idcos2
real(r8), dimension(:), allocatable uxmax
integer idpndy
integer, dimension(:), allocatable nxyv
real(r8), dimension(:), allocatable rxmax
integer idtdif
integer, dimension(:), allocatable idtclm
integer, dimension(:,:), allocatable frcncid
integer idfsur
integer idw3xy
integer, dimension(:), allocatable vilb
integer idwbrk
integer, dimension(:), allocatable nwateru
integer idfsud
integer, dimension(:), allocatable idtvar
integer iddpth
integer, dimension(:), allocatable istvar
integer idrflg
integer idtvmi
integer idrepo
integer idhbbl
integer idusur
integer idobsz
integer, dimension(:,:), allocatable bryncid
integer idvbws
real(dp), dimension(:,:,:), allocatable tintrp
integer idtzam
integer idvfx1
integer idldwn
integer isuvel
integer idtvph
real(r8), dimension(:), allocatable uymax
real(r8), dimension(:), allocatable vxmin
integer idufx2
integer, parameter mv
integer idsssc
integer idm2nc
subroutine, public initialize_ncparam
integer isfsur
integer iduclm
logical lanafile
integer idztlf
integer idsize
integer idxgrv
integer iduwav
integer idsfwf
integer, dimension(:), allocatable vjub
real(dp), dimension(:,:,:), allocatable fpoint
integer idvbtf
integer, dimension(:), allocatable rjub
integer idw2xy
integer idbath
integer idzads
integer idvbms
integer, dimension(4) idv3bc
integer idpbar
real(dp), dimension(:,:), allocatable fscale
integer idxgrd
integer iduair
integer idpmdx
integer idwbio
integer idzobl
integer idu2da
integer idygrv
integer idswcw
integer, dimension(:), allocatable idtrcd
integer idgtnc
integer, dimension(:), allocatable idttlf
integer idmtke
integer idwads
integer iduvel
integer idresi
integer isbv2d
character(len=46), dimension(0:nv) tname
integer idmskr
character(len=80) svn_rev
integer idhuav
character(len=40), dimension(mv) varnam
integer idzgrd
integer idv3dn
integer, dimension(:), allocatable ujlb
integer, dimension(:), allocatable idefxtr
integer, dimension(:), allocatable idtrch
integer idfcor
integer, dimension(2) idghat
subroutine, public allocate_ncparam
integer idtvan
integer isustr
logical, dimension(:,:), allocatable qout
integer isbu3d
integer idhvav
integer idcosw
integer idovel
integer idv3rs
integer idygrr
integer idygru
integer idvvav
integer idubed
integer idrvsh
integer idwam2
integer idkver
integer idxgru
real(dp), dimension(:,:,:), allocatable finfo
integer, dimension(:), allocatable idtnud
integer, dimension(:), allocatable iddv3d
integer iduwet
integer idv2dd
integer, dimension(:), allocatable ujub
character(len=maxlen), dimension(6, 0:nv) vname
integer idbgth
integer idqair
integer, dimension(:), allocatable idsvar
integer ismtke
integer idlonu
integer idu3rs
integer inp_lib
Definition mod_ncparam.F:98
integer idtime
integer idutlf
integer idscor
integer idtref
integer idnlmu
integer idoday
integer isubar
integer idshea
integer idygrp
integer, dimension(:,:,:), allocatable iinfo
integer, dimension(:), allocatable idtads
integer idubcl
integer idpwet
integer, dimension(4) idv2bc
integer idlrad
integer idwdip
integer idvtlf
integer idbger
integer idv2av
integer idru3d
integer idrxpo
integer idmomi
integer idpthu
integer idusms
integer idvbcs
integer idobsx
integer idwbeh
integer idvmkk
logical, dimension(:,:), allocatable sout
integer, parameter ndimid
integer idwamp
real(r8), dimension(:), allocatable vxmax
integer, dimension(:), allocatable istsur
integer, dimension(:), allocatable nwaterr
integer idwdir
integer idtvma
integer idscov
integer idlatr
integer idvvis
integer idwptp
integer iswvel
integer last_varid
integer idu3de
integer idnlmp
integer idpthv
integer idwdib
integer, dimension(:), allocatable rilb
integer, dimension(:), allocatable idvtav
integer, dimension(:), allocatable uiub
integer idvads
logical, dimension(:,:), allocatable dout
integer id2dpv
integer idv2sd
integer idrzet
integer isbw3d
integer idincr
type(file_desc_t), dimension(:,:), pointer clmpiofile
integer idrvct
integer isbr3d
integer idubcs
integer idmadh
integer idufx1
integer idu2de
integer idlhea
type(file_desc_t), dimension(:,:), pointer brypiofile
integer idubot
integer idrain
integer idubms
integer idvbcl
integer idubrs
integer idovil
integer idvwet
integer idygrd
integer idsrad
integer idmtls
integer, parameter maxlen
character(len=256), dimension(39) ananame
integer idxgrp
integer idragq
integer idswim
integer idkhor
integer idv2dh
integer idubws
integer isbv3d
integer isbr2d
integer iduuav
integer idsshc
integer idwpbt
integer isradial
integer idu2dd
integer idruct
integer out_lib
Definition mod_ncparam.F:99
integer idfsuh
character(len=256) svn_url
integer idworb
integer idu3sd
integer, dimension(:), allocatable idefhis
integer idsstc
integer idu2sd
integer idsinw
integer idotyp
integer iduaie
integer, dimension(:,:), allocatable idtbry
integer idvwav
integer idjwty
integer idpthr
integer idwvds
integer idscou
integer, dimension(:), allocatable viub
integer, dimension(:), allocatable nxyr
integer idtair
logical, dimension(:,:), allocatable aout
integer idw3xx
integer idw3sd
integer idmomf
integer idrv2d
integer iduvav
integer idwvqp
integer idmskp
integer idwztw
real(r8), dimension(:), allocatable rxmin
integer isbp3d
integer idnobs
integer idvbar
integer, dimension(:,:), allocatable iddtrc
integer idwmsk
integer idrdir
integer nat
Definition mod_param.F:499
integer, dimension(:), allocatable nsv
Definition mod_param.F:636
integer mtc
Definition mod_param.F:564
real(r8), dimension(:), allocatable dmem
Definition mod_param.F:137
integer nlbcvar
Definition mod_param.F:355
integer ndm3d
Definition mod_param.F:579
integer ngrids
Definition mod_param.F:113
integer ndt
Definition mod_param.F:574
integer mt
Definition mod_param.F:490
integer ndm2d
Definition mod_param.F:578
integer m3vvis
integer m2fcor
integer ityadv
integer m3hadv
integer m3xadv
integer m2pgrd
integer, parameter iwest
integer m2xadv
integer m2yadv
integer itxdif
integer ithadv
integer itvadv
integer m3vadv
integer m3xvis
integer exit_flag
integer itrate
integer isalt
integer m2hvis
integer m3hvis
integer itemp
integer m3rate
integer, parameter isouth
integer m3yadv
integer itsdif
integer m3yvis
integer m2rate
integer itvdif
integer, dimension(:), pointer inert
integer m2yvis
integer m3fcor
integer m2sstr
integer, parameter ieast
integer m2hadv
integer itydif
integer, parameter inorth
integer m3pgrd
integer m2xvis
integer m2bstr
integer itxadv
integer noerror
integer ithdif
subroutine, public standardname(sname, variable, prefix, suffix)
Definition strings.F:299
logical function, public founderror(flag, noerr, line, routine)
Definition strings.F:52