ROMS
Loading...
Searching...
No Matches
def_avg.F
Go to the documentation of this file.
1#include "cppdefs.h"
3#if defined AVERAGES || \
4 (defined ad_averages && defined adjoint) || \
5 (defined rp_averages && defined tl_ioms) || \
6 (defined tl_averages && defined tangent)
7!
8!git $Id$
9!================================================== Hernan G. Arango ===
10! Copyright (c) 2002-2025 The ROMS Group !
11! Licensed under a MIT/X style license !
12! See License_ROMS.md !
13!=======================================================================
14! !
15! This module creates output TIME-AVERAGED file using either the !
16! standard NetCDF library or the Parallel-IO (PIO) library. It !
17! defines its dimensions, attributes, and variables. !
18! !
19!=======================================================================
20!
21 USE mod_param
22 USE mod_parallel
23# ifdef BIOLOGY
24 USE mod_biology
25# endif
26# ifdef FOUR_DVAR
27 USE mod_fourdvar
28# endif
29 USE mod_iounits
30 USE mod_ncparam
31 USE mod_netcdf
32 USE mod_scalars
33# ifdef SEDIMENT
34 USE mod_sediment
35# endif
36!
37# if (defined BBL_MODEL || defined WAVES_OUTPUT) && defined SOLVE3D
39# if defined PIO_LIB && defined DISTRIBUTE
40 USE bbl_output_mod, ONLY : bbl_def_pio
41# endif
42# endif
43 USE def_dim_mod, ONLY : def_dim
44 USE def_info_mod, ONLY : def_info
45 USE def_var_mod, ONLY : def_var
46# if defined ICE_MODEL && defined SOLVE3D
47 USE ice_output_mod, ONLY : ice_def_nf90
48# if defined PIO_LIB && defined DISTRIBUTE
49 USE ice_output_mod, ONLY : ice_def_pio
50# endif
51# endif
52# if defined SEDIMENT && defined SOLVE3D
54# if defined PIO_LIB && defined DISTRIBUTE
56# endif
57# endif
58 USE strings_mod, ONLY : founderror
59# if defined WEC_VF && defined SOLVE3D
60 USE wec_output_mod, ONLY : wec_def_nf90
61# if defined PIO_LIB && defined DISTRIBUTE
62 USE wec_output_mod, ONLY : wec_def_pio
63# endif
64# endif
65 USE wrt_info_mod, ONLY : wrt_info
66!
67 implicit none
68!
69 PUBLIC :: def_avg
70 PRIVATE :: def_avg_nf90
71# if defined PIO_LIB && defined DISTRIBUTE
72 PRIVATE :: def_avg_pio
73# endif
74!
75 CONTAINS
76!
77!***********************************************************************
78 SUBROUTINE def_avg (ng, ldef)
79!***********************************************************************
80!
81! Imported variable declarations.
82!
83 logical, intent(in) :: ldef
84!
85 integer, intent(in) :: ng
86!
87! Local variable declarations.
88!
89 integer :: model
90!
91 character (len=*), parameter :: myfile = &
92 & __FILE__
93!
94!-----------------------------------------------------------------------
95! Create a new time-averaged file according to IO type.
96!-----------------------------------------------------------------------
97!
98# ifdef ADJOINT
99 model=iadm
100# else
101 model=inlm
102# endif
103!
104 SELECT CASE (avg(ng)%IOtype)
105 CASE (io_nf90)
106 CALL def_avg_nf90 (ng, model, ldef)
107
108# if defined PIO_LIB && defined DISTRIBUTE
109 CASE (io_pio)
110 CALL def_avg_pio (ng, model, ldef)
111# endif
112 CASE DEFAULT
113 IF (master) WRITE (stdout,10) avg(ng)%IOtype
114 exit_flag=3
115 END SELECT
116 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
117!
118 10 FORMAT (' DEF_AVG - Illegal output file type, io_type = ',i0, &
119 & /,11x,'Check KeyWord ''OUT_LIB'' in ''roms.in''.')
120!
121 RETURN
122 END SUBROUTINE def_avg
123!
124!***********************************************************************
125 SUBROUTINE def_avg_nf90 (ng, model, ldef)
126!***********************************************************************
127!
128 USE mod_netcdf
129!
130! Imported variable declarations.
131!
132 integer, intent(in) :: ng, model
133!
134 logical, intent(in) :: ldef
135!
136! Local variable declarations.
137!
138 logical :: got_var(nv)
139!
140 integer, parameter :: natt = 25
141
142 integer :: i, ifield, itrc, j, nvd3, nvd4
143# if defined WRITE_WATER && defined MASKING
144 integer :: xy_pdim, xyz_pdim
145# endif
146 integer :: recdim, status
147
148 integer :: dimids(ndimid)
149 integer :: p2dgrd(3), t2dgrd(3), u2dgrd(3), v2dgrd(3)
150
151# ifdef SOLVE3D
152# ifdef SEDIMENT
153 integer :: b3dgrd(4)
154# endif
155 integer :: p3dgrd(4), t3dgrd(4), u3dgrd(4), v3dgrd(4), w3dgrd(4)
156# endif
157!
158 real(r8) :: aval(6)
159!
160# ifdef ADJOINT
161 character (len=21) :: prefix
162# else
163 character (len=13) :: prefix
164# endif
165 character (len=256) :: ncname
166 character (len=MaxLen) :: vinfo(natt)
167
168 character (len=*), parameter :: myfile = &
169 & __FILE__//", def_avg_nf90"
170!
171 sourcefile=myfile
172!
173!-----------------------------------------------------------------------
174! Set and report file name.
175!-----------------------------------------------------------------------
176!
177 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
178 ncname=avg(ng)%name
179!
180 IF (master) THEN
181 IF (ldef) THEN
182 WRITE (stdout,10) ng, trim(ncname)
183 ELSE
184 WRITE (stdout,20) ng, trim(ncname)
185 END IF
186 END IF
187!
188!=======================================================================
189! Create a new averages file.
190!=======================================================================
191!
192 define : IF (ldef) THEN
193 CALL netcdf_create (ng, model, trim(ncname), avg(ng)%ncid)
194 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
195 IF (master) WRITE (stdout,30) trim(ncname)
196 RETURN
197 END IF
198!
199!-----------------------------------------------------------------------
200! Define file dimensions.
201!-----------------------------------------------------------------------
202!
203 dimids=0
204!
205 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xi_rho', &
206 & iobounds(ng)%xi_rho, dimids( 1))
207 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
208
209 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xi_u', &
210 & iobounds(ng)%xi_u, dimids( 2))
211 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
212
213 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xi_v', &
214 & iobounds(ng)%xi_v, dimids( 3))
215 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
216
217 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xi_psi', &
218 & iobounds(ng)%xi_psi, dimids( 4))
219 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
220
221 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'eta_rho', &
222 & iobounds(ng)%eta_rho, dimids( 5))
223 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
224
225 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'eta_u', &
226 & iobounds(ng)%eta_u, dimids( 6))
227 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
228
229 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'eta_v', &
230 & iobounds(ng)%eta_v, dimids( 7))
231 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
232
233 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'eta_psi', &
234 & iobounds(ng)%eta_psi, dimids( 8))
235 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
236
237# if defined WRITE_WATER && defined MASKING
238 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xy_rho', &
239 & iobounds(ng)%xy_rho, dimids(17))
240 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
241
242 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xy_u', &
243 & iobounds(ng)%xy_u, dimids(18))
244 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
245
246 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xy_v', &
247 & iobounds(ng)%xy_v, dimids(19))
248 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
249
250 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xy_psi', &
251 & iobounds(ng)%xy_psi, xy_pdim)
252 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
253# endif
254
255# ifdef SOLVE3D
256# if defined WRITE_WATER && defined MASKING
257 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xyz_rho', &
258 & iobounds(ng)%xy_rho*n(ng), dimids(20))
259 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
260
261 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xyz_u', &
262 & iobounds(ng)%xy_u*n(ng), dimids(21))
263 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
264
265 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xyz_v', &
266 & iobounds(ng)%xy_v*n(ng), dimids(22))
267 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
268
269 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xyz_w', &
270 & iobounds(ng)%xy_rho*(n(ng)+1), dimids(23))
271 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
272
273 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xyz_psi', &
274 & iobounds(ng)%xy_psi*n(ng), xyz_pdim)
275 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
276# endif
277
278 status=def_dim(ng, model, avg(ng)%ncid, ncname, 's_rho', &
279 & n(ng), dimids( 9))
280 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
281
282 status=def_dim(ng, model, avg(ng)%ncid, ncname, 's_w', &
283 & n(ng)+1, dimids(10))
284 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
285
286 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'tracer', &
287 & nt(ng), dimids(11))
288 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
289
290# ifdef SEDIMENT
291 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'NST', &
292 & nst, dimids(32))
293 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
294
295 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'Nbed', &
296 & nbed, dimids(16))
297 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
298
299# if defined WRITE_WATER && defined MASKING
300 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'xybed', &
301 & iobounds(ng)%xy_rho*nbed, dimids(24))
302 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
303# endif
304# endif
305
306# ifdef ECOSIM
307 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'Nbands', &
308 & nbands, dimids(33))
309 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
310
311 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'Nphy', &
312 & nphy, dimids(25))
313 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
314
315 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'Nbac', &
316 & nbac, dimids(26))
317 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
318
319 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'Ndom', &
320 & ndom, dimids(27))
321 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
322
323 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'Nfec', &
324 & nfec, dimids(28))
325 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
326# endif
327# endif
328
329 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'boundary', &
330 & 4, dimids(14))
331 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
332
333# ifdef FOUR_DVAR
334 status=def_dim(ng, model, avg(ng)%ncid, ncname, 'Nstate', &
335 & nstatevar(ng), dimids(29))
336 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
337# endif
338
339 status=def_dim(ng, model, avg(ng)%ncid, ncname, &
340 & trim(adjustl(vname(5,idtime))), &
341 & nf90_unlimited, dimids(12))
342 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
343
344 recdim=dimids(12)
345!
346! Set number of dimensions for output variables.
347!
348# if defined WRITE_WATER && defined MASKING
349 nvd3=2
350 nvd4=2
351# else
352 nvd3=3
353 nvd4=4
354# endif
355!
356! Define dimension vectors for staggered tracer type variables.
357!
358# if defined WRITE_WATER && defined MASKING
359 t2dgrd(1)=dimids(17)
360 t2dgrd(2)=dimids(12)
361# ifdef SOLVE3D
362 t3dgrd(1)=dimids(20)
363 t3dgrd(2)=dimids(12)
364# endif
365# else
366 t2dgrd(1)=dimids( 1)
367 t2dgrd(2)=dimids( 5)
368 t2dgrd(3)=dimids(12)
369# ifdef SOLVE3D
370 t3dgrd(1)=dimids( 1)
371 t3dgrd(2)=dimids( 5)
372 t3dgrd(3)=dimids( 9)
373 t3dgrd(4)=dimids(12)
374# endif
375# endif
376!
377! Define dimension vectors for staggered u-momentum type variables.
378!
379# if defined WRITE_WATER && defined MASKING
380 u2dgrd(1)=dimids(18)
381 u2dgrd(2)=dimids(12)
382# ifdef SOLVE3D
383 u3dgrd(1)=dimids(21)
384 u3dgrd(2)=dimids(12)
385# endif
386# else
387 u2dgrd(1)=dimids( 2)
388 u2dgrd(2)=dimids( 6)
389 u2dgrd(3)=dimids(12)
390# ifdef SOLVE3D
391 u3dgrd(1)=dimids( 2)
392 u3dgrd(2)=dimids( 6)
393 u3dgrd(3)=dimids( 9)
394 u3dgrd(4)=dimids(12)
395# endif
396# endif
397!
398! Define dimension vectors for staggered v-momentum type variables.
399!
400# if defined WRITE_WATER && defined MASKING
401 v2dgrd(1)=dimids(19)
402 v2dgrd(2)=dimids(12)
403# ifdef SOLVE3D
404 v3dgrd(1)=dimids(22)
405 v3dgrd(2)=dimids(12)
406# endif
407# else
408 v2dgrd(1)=dimids( 3)
409 v2dgrd(2)=dimids( 7)
410 v2dgrd(3)=dimids(12)
411# ifdef SOLVE3D
412 v3dgrd(1)=dimids( 3)
413 v3dgrd(2)=dimids( 7)
414 v3dgrd(3)=dimids( 9)
415 v3dgrd(4)=dimids(12)
416# endif
417# endif
418!
419! Define dimension vectors for staggered variables at PSI-points.
420!
421# if defined WRITE_WATER && defined MASKING
422 p2dgrd(1)=xy_pdim
423 p2dgrd(2)=dimids(12)
424# ifdef SOLVE3D
425 p3dgrd(1)=xyz_pdim
426 p3dgrd(2)=dimids(12)
427# endif
428# else
429 p2dgrd(1)=dimids( 4)
430 p2dgrd(2)=dimids( 8)
431 p2dgrd(3)=dimids(12)
432# ifdef SOLVE3D
433 p3dgrd(1)=dimids( 4)
434 p3dgrd(2)=dimids( 8)
435 p3dgrd(3)=dimids( 9)
436 p3dgrd(4)=dimids(12)
437# endif
438# endif
439# ifdef SOLVE3D
440!
441! Define dimension vector for staggered w-momentum type variables.
442!
443# if defined WRITE_WATER && defined MASKING
444 w3dgrd(1)=dimids(23)
445 w3dgrd(2)=dimids(12)
446# else
447 w3dgrd(1)=dimids( 1)
448 w3dgrd(2)=dimids( 5)
449 w3dgrd(3)=dimids(10)
450 w3dgrd(4)=dimids(12)
451# endif
452# ifdef SEDIMENT
453!
454! Define dimension vector for sediment bed layer type variables.
455!
456# if defined WRITE_WATER && defined MASKING
457 b3dgrd(1)=dimids(24)
458 b3dgrd(2)=dimids(12)
459# else
460 b3dgrd(1)=dimids( 1)
461 b3dgrd(2)=dimids( 5)
462 b3dgrd(3)=dimids(16)
463 b3dgrd(4)=dimids(12)
464# endif
465# endif
466# endif
467!
468! Initialize unlimited time record dimension.
469!
470 avg(ng)%Rindex=0
471!
472! Initialize local information variable arrays.
473!
474 DO i=1,natt
475 DO j=1,len(vinfo(1))
476 vinfo(i)(j:j)=' '
477 END DO
478 END DO
479 DO i=1,6
480 aval(i)=0.0_r8
481 END DO
482!
483! Set long name prefix string.
484!
485# ifdef ADJOINT
486!! Prefix='time-averaged adjoint'
487 prefix='adjoint'
488# else
489!! Prefix='time-averaged'
490 prefix=char(32) ! blank space
491# endif
492!
493!-----------------------------------------------------------------------
494! Define time-recordless information variables.
495!-----------------------------------------------------------------------
496!
497 CALL def_info (ng, model, avg(ng)%ncid, ncname, dimids)
498 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
499!
500!-----------------------------------------------------------------------
501! Define time-varying variables.
502!-----------------------------------------------------------------------
503!
504! Define model time.
505!
506 vinfo( 1)=vname(1,idtime)
507 WRITE (vinfo( 2),'(a,a)') 'averaged ', trim(vname(2,idtime))
508 WRITE (vinfo( 3),'(a,a)') 'seconds since ', trim(rclock%string)
509 vinfo( 4)=trim(rclock%calendar)
510 vinfo(14)=vname(4,idtime)
511 vinfo(21)=vname(6,idtime)
512 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idtime), &
513 & nf_tout, 1, (/recdim/), aval, vinfo, ncname, &
514 & setparaccess = .true.)
515 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
516!
517! Define free-surface.
518!
519 IF (aout(idfsur,ng)) THEN
520 vinfo( 1)=vname(1,idfsur)
521 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idfsur))
522 vinfo( 3)=vname(3,idfsur)
523 vinfo(14)=vname(4,idfsur)
524 vinfo(16)=vname(1,idtime)
525# if !defined WET_DRY && (defined WRITE_WATER && defined MASKING)
526 vinfo(20)='mask_rho'
527# endif
528 vinfo(21)=vname(6,idfsur)
529 vinfo(22)='coordinates'
530 aval(5)=real(iinfo(1,idfsur,ng),r8)
531 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idfsur), &
532 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
533 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
534 END IF
535
536# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
537!
538! Define detided free-surface.
539!
540 IF (aout(idfsud,ng)) THEN
541 vinfo( 1)=vname(1,idfsud)
542 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idfsud))
543 vinfo( 3)=vname(3,idfsud)
544 vinfo(14)=vname(4,idfsud)
545 vinfo(16)=vname(1,idtime)
546# if defined WRITE_WATER && defined MASKING
547 vinfo(20)='mask_rho'
548# endif
549 vinfo(21)=vname(6,idfsud)
550 vinfo(22)='coordinates'
551 aval(5)=real(iinfo(1,idfsud,ng),r8)
552 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idfsud), &
553 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
554 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
555 END IF
556# endif
557!
558! Define 2D momentum in the XI-direction.
559!
560 IF (aout(idubar,ng)) THEN
561 vinfo( 1)=vname(1,idubar)
562 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idubar))
563 vinfo( 3)=vname(3,idubar)
564 vinfo(14)=vname(4,idubar)
565 vinfo(16)=vname(1,idtime)
566# if defined WRITE_WATER && defined MASKING
567 vinfo(20)='mask_u'
568# endif
569 vinfo(21)=vname(6,idubar)
570 vinfo(22)='coordinates'
571 aval(5)=real(iinfo(1,idubar,ng),r8)
572 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idubar), &
573 & nf_fout, nvd3, u2dgrd, aval, vinfo, ncname)
574 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
575 END IF
576
577# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
578!
579! Define detided 2D momentum in the XI-direction.
580!
581 IF (aout(idu2dd,ng)) THEN
582 vinfo( 1)=vname(1,idu2dd)
583 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idu2dd))
584 vinfo( 3)=vname(3,idu2dd)
585 vinfo(14)=vname(4,idu2dd)
586 vinfo(16)=vname(1,idtime)
587# if defined WRITE_WATER && defined MASKING
588 vinfo(20)='mask_u'
589# endif
590 vinfo(21)=vname(6,idu2dd)
591 vinfo(22)='coordinates'
592 aval(5)=real(iinfo(1,idu2dd,ng),r8)
593 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idu2dd), &
594 & nf_fout, nvd3, u2dgrd, aval, vinfo, ncname)
595 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
596 END IF
597# endif
598!
599! Define 2D momentum in the ETA-direction.
600!
601 IF (aout(idvbar,ng)) THEN
602 vinfo( 1)=vname(1,idvbar)
603 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvbar))
604 vinfo( 3)=vname(3,idvbar)
605 vinfo(14)=vname(4,idvbar)
606 vinfo(16)=vname(1,idtime)
607# if defined WRITE_WATER && defined MASKING
608 vinfo(20)='mask_v'
609# endif
610 vinfo(21)=vname(6,idvbar)
611 vinfo(22)='coordinates'
612 aval(5)=real(iinfo(1,idvbar,ng),r8)
613 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idvbar), &
614 & nf_fout, nvd3, v2dgrd, aval, vinfo, ncname)
615 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
616 END IF
617
618# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
619!
620! Define detided 2D momentum in the ETA-direction.
621!
622 IF (aout(idv2dd,ng)) THEN
623 vinfo( 1)=vname(1,idv2dd)
624 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idv2dd))
625 vinfo( 3)=vname(3,idv2dd)
626 vinfo(14)=vname(4,idv2dd)
627 vinfo(16)=vname(1,idtime)
628# if defined WRITE_WATER && defined MASKING
629 vinfo(20)='mask_v'
630# endif
631 vinfo(21)=vname(6,idv2dd)
632 vinfo(22)='coordinates'
633 aval(5)=real(iinfo(1,idv2dd,ng),r8)
634 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idv2dd), &
635 & nf_fout, nvd3, v2dgrd, aval, vinfo, ncname)
636 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
637 END IF
638# endif
639!
640! Define 2D Eastward momentum component at RHO-points.
641!
642 IF (aout(idu2de,ng)) THEN
643 vinfo( 1)=vname(1,idu2de)
644 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idu2de))
645 vinfo( 3)=vname(3,idu2de)
646 vinfo(14)=vname(4,idu2de)
647 vinfo(16)=vname(1,idtime)
648# if defined WRITE_WATER && defined MASKING
649 vinfo(20)='mask_rho'
650# endif
651 vinfo(21)=vname(6,idu2de)
652 vinfo(22)='coordinates'
653 aval(5)=real(iinfo(1,idu2de,ng),r8)
654 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idu2de), &
655 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
656 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
657 END IF
658!
659! Define 2D Northward momentum component at RHO-points.
660!
661 IF (aout(idv2dn,ng)) THEN
662 vinfo( 1)=vname(1,idv2dn)
663 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idv2dn))
664 vinfo( 3)=vname(3,idv2dn)
665 vinfo(14)=vname(4,idv2dn)
666 vinfo(16)=vname(1,idtime)
667# if defined WRITE_WATER && defined MASKING
668 vinfo(20)='mask_rho'
669# endif
670 vinfo(21)=vname(6,idv2dn)
671 vinfo(22)='coordinates'
672 aval(5)=real(iinfo(1,idv2dn,ng),r8)
673 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idv2dn), &
674 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
675 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
676 END IF
677
678# ifdef SOLVE3D
679# ifdef FORWARD_WRITE
680!
681! Define time-averaged mass fluxes for 3D momentum coupling.
682!
683 IF (aout(idufx1,ng)) THEN
684 vinfo( 1)=vname(1,idufx1)
685 vinfo( 2)=vname(2,idufx1)
686 vinfo( 3)=vname(3,idufx1)
687 vinfo(14)=vname(4,idufx1)
688 vinfo(16)=vname(1,idtime)
689# if defined WRITE_WATER && defined MASKING
690 vinfo(20)='mask_u'
691# endif
692 vinfo(21)=vname(6,idufx1)
693 vinfo(22)='coordinates'
694 aval(5)=real(u2dvar,r8)
695 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idufx1), &
696 & nf_fout, nvd3, u2dgrd, aval, vinfo, ncname)
697 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
698 END IF
699!
700 IF (aout(idufx2,ng)) THEN
701 vinfo( 1)=vname(1,idufx2)
702 vinfo( 2)=vname(2,idufx2)
703 vinfo( 3)=vname(3,idufx2)
704 vinfo(14)=vname(4,idufx2)
705 vinfo(16)=vname(1,idtime)
706# if defined WRITE_WATER && defined MASKING
707 vinfo(20)='mask_u'
708# endif
709 vinfo(21)=vname(6,idufx2)
710 vinfo(22)='coordinates'
711 aval(5)=real(u2dvar,r8)
712 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idufx2), &
713 & nf_fout, nvd3, u2dgrd, aval, vinfo, ncname)
714 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
715 END IF
716!
717 IF (aout(idvfx1,ng)) THEN
718 vinfo( 1)=vname(1,idvfx1)
719 vinfo( 2)=vname(2,idvfx1)
720 vinfo( 3)=vname(3,idvfx1)
721 vinfo(14)=vname(4,idvfx1)
722 vinfo(16)=vname(1,idtime)
723# if defined WRITE_WATER && defined MASKING
724 vinfo(20)='mask_v'
725# endif
726 vinfo(21)=vname(6,idvfx1)
727 vinfo(22)='coordinates'
728 aval(5)=real(v2dvar,r8)
729 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idvfx1), &
730 & nf_fout, nvd3, v2dgrd, aval, vinfo, ncname)
731 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
732 END IF
733!
734 IF (aout(idvfx2,ng)) THEN
735 vinfo( 1)=vname(1,idvfx2)
736 vinfo( 2)=vname(2,idvfx2)
737 vinfo( 3)=vname(3,idvfx2)
738 vinfo(14)=vname(4,idvfx2)
739 vinfo(16)=vname(1,idtime)
740# if defined WRITE_WATER && defined MASKING
741 vinfo(20)='mask_v'
742# endif
743 vinfo(21)=vname(6,idvfx2)
744 vinfo(22)='coordinates'
745 aval(5)=real(v2dvar,r8)
746 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idvfx2), &
747 & nf_fout, nvd3, v2dgrd, aval, vinfo, ncname)
748 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
749 END IF
750# endif
751!
752! Define 3D momentum component in the XI-direction.
753!
754 IF (aout(iduvel,ng)) THEN
755 vinfo( 1)=vname(1,iduvel)
756 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,iduvel))
757 vinfo( 3)=vname(3,iduvel)
758 vinfo(14)=vname(4,iduvel)
759 vinfo(16)=vname(1,idtime)
760# if defined WRITE_WATER && defined MASKING
761 vinfo(20)='mask_u'
762# endif
763 vinfo(21)=vname(6,iduvel)
764 vinfo(22)='coordinates'
765 aval(5)=real(iinfo(1,iduvel,ng),r8)
766 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(iduvel), &
767 & nf_fout, nvd4, u3dgrd, aval, vinfo, ncname)
768 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
769 END IF
770
771# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
772!
773! Define detided 3D momentum component in the XI-direction.
774!
775 IF (aout(idu3dd,ng)) THEN
776 vinfo( 1)=vname(1,idu3dd)
777 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idu3dd))
778 vinfo( 3)=vname(3,idu3dd)
779 vinfo(14)=vname(4,idu3dd)
780 vinfo(16)=vname(1,idtime)
781# if defined WRITE_WATER && defined MASKING
782 vinfo(20)='mask_u'
783# endif
784 vinfo(21)=vname(6,idu3dd)
785 vinfo(22)='coordinates'
786 aval(5)=real(iinfo(1,idu3dd,ng),r8)
787 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idu3dd), &
788 & nf_fout, nvd4, u3dgrd, aval, vinfo, ncname)
789 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
790 END IF
791# endif
792!
793! Define 3D momentum component in the ETA-direction.
794!
795 IF (aout(idvvel,ng)) THEN
796 vinfo( 1)=vname(1,idvvel)
797 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvvel))
798 vinfo( 3)=vname(3,idvvel)
799 vinfo(14)=vname(4,idvvel)
800 vinfo(16)=vname(1,idtime)
801# if defined WRITE_WATER && defined MASKING
802 vinfo(20)='mask_v'
803# endif
804 vinfo(21)=vname(6,idvvel)
805 vinfo(22)='coordinates'
806 aval(5)=real(iinfo(1,idvvel,ng),r8)
807 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idvvel), &
808 & nf_fout, nvd4, v3dgrd, aval, vinfo, ncname)
809 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
810 END IF
811
812# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
813!
814! Define detided 3D momentum component in the ETA-direction.
815!
816 IF (aout(idv3dd,ng)) THEN
817 vinfo( 1)=vname(1,idv3dd)
818 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idv3dd))
819 vinfo( 3)=vname(3,idv3dd)
820 vinfo(14)=vname(4,idv3dd)
821 vinfo(16)=vname(1,idtime)
822# if defined WRITE_WATER && defined MASKING
823 vinfo(20)='mask_v'
824# endif
825 vinfo(21)=vname(6,idv3dd)
826 vinfo(22)='coordinates'
827 aval(5)=real(iinfo(1,idv3dd,ng),r8)
828 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idv3dd), &
829 & nf_fout, nvd4, v3dgrd, aval, vinfo, ncname)
830 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
831 END IF
832# endif
833!
834! Define 3D Eastward momentum component at RHO-points.
835!
836 IF (aout(idu3de,ng)) THEN
837 vinfo( 1)=vname(1,idu3de)
838 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idu3de))
839 vinfo( 3)=vname(3,idu3de)
840 vinfo(14)=vname(4,idu3de)
841 vinfo(16)=vname(1,idtime)
842# if defined WRITE_WATER && defined MASKING
843 vinfo(20)='mask_rho'
844# endif
845 vinfo(21)=vname(6,idu3de)
846 vinfo(22)='coordinates'
847 aval(5)=real(iinfo(1,idu3de,ng),r8)
848 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idu3de), &
849 & nf_fout, nvd4, t3dgrd, aval, vinfo, ncname)
850 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
851 END IF
852!
853! Define 3D Northward momentum component at RHO-points.
854!
855 IF (aout(idv3dn,ng)) THEN
856 vinfo( 1)=vname(1,idv3dn)
857 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idv3dn))
858 vinfo( 3)=vname(3,idv3dn)
859 vinfo(14)=vname(4,idv3dn)
860 vinfo(16)=vname(1,idtime)
861# if defined WRITE_WATER && defined MASKING
862 vinfo(20)='mask_rho'
863# endif
864 vinfo(21)=vname(6,idv3dn)
865 vinfo(22)='coordinates'
866 aval(5)=real(iinfo(1,idv3dn,ng),r8)
867 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idv3dn), &
868 & nf_fout, nvd4, t3dgrd, aval, vinfo, ncname)
869 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
870 END IF
871!
872! Define S-coordinate vertical "omega" momentum component.
873!
874 IF (aout(idovel,ng)) THEN
875 vinfo( 1)=vname(1,idovel)
876 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idovel))
877 vinfo( 3)=vname(3,idovel)
878 vinfo(14)=vname(4,idovel)
879 vinfo(16)=vname(1,idtime)
880# if defined WRITE_WATER && defined MASKING
881 vinfo(20)='mask_rho'
882# endif
883 vinfo(21)=vname(6,idovel)
884 vinfo(22)='coordinates'
885 aval(5)=real(iinfo(1,idovel,ng),r8)
886 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idovel), &
887 & nf_fout, nvd4, w3dgrd, aval, vinfo, ncname)
888 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
889 END IF
890!
891! Define "true" vertical momentum component.
892!
893 IF (aout(idwvel,ng)) THEN
894 vinfo( 1)=vname(1,idwvel)
895 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idwvel))
896 vinfo( 3)=vname(3,idwvel)
897 vinfo(14)=vname(4,idwvel)
898 vinfo(16)=vname(1,idtime)
899# if defined WRITE_WATER && defined MASKING
900 vinfo(20)='mask_rho'
901# endif
902 vinfo(21)=vname(6,idwvel)
903 vinfo(22)='coordinates'
904 aval(5)=real(iinfo(1,idwvel,ng),r8)
905 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idwvel), &
906 & nf_fout, nvd4, w3dgrd, aval, vinfo, ncname)
907 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
908 END IF
909!
910! Define tracer type variables.
911!
912 DO itrc=1,nt(ng)
913 IF (aout(idtvar(itrc),ng)) THEN
914 vinfo( 1)=vname(1,idtvar(itrc))
915 WRITE (vinfo( 2),'(a,1x,a)') prefix, &
916 & trim(vname(2,idtvar(itrc)))
917 vinfo( 3)=vname(3,idtvar(itrc))
918 vinfo(14)=vname(4,idtvar(itrc))
919 vinfo(16)=vname(1,idtime)
920# ifdef SEDIMENT
921 DO i=1,nst
922 IF (itrc.eq.idsed(i)) THEN
923 WRITE (vinfo(19),40) 1000.0_r8*sd50(i,ng)
924 END IF
925 END DO
926# endif
927# if defined WRITE_WATER && defined MASKING
928 vinfo(20)='mask_rho'
929# endif
930 vinfo(21)=vname(6,idtvar(itrc))
931 vinfo(22)='coordinates'
932 aval(5)=real(r3dvar,r8)
933 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Tid(itrc), &
934 & nf_fout, nvd4, t3dgrd, aval, vinfo, ncname)
935 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
936 END IF
937 END DO
938
939# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
940!
941! Define detided temperature and salinity.
942!
943 DO itrc=1,nat
944 IF (aout(idtrcd(itrc),ng)) THEN
945 ifield=idtrcd(itrc)
946 vinfo( 1)=vname(1,ifield)
947 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,ifield))
948 vinfo( 3)=vname(3,ifield)
949 vinfo(14)=vname(4,ifield)
950 vinfo(16)=vname(1,idtime)
951# if defined WRITE_WATER && defined MASKING
952 vinfo(20)='mask_rho'
953# endif
954 vinfo(21)=vname(6,ifield)
955 vinfo(22)='coordinates'
956 aval(5)=real(r3dvar,r8)
957 status=def_var(ng, model, avg(ng)%ncid, &
958 & avg(ng)%Vid(ifield), nf_fout, &
959 & nvd4, t3dgrd, aval, vinfo, ncname)
960 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
961 END IF
962 END DO
963# endif
964!
965! Define density anomaly.
966!
967 IF (aout(iddano,ng)) THEN
968 vinfo( 1)=vname(1,iddano)
969 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,iddano))
970 vinfo( 3)=vname(3,iddano)
971 vinfo(14)=vname(4,iddano)
972 vinfo(16)=vname(1,idtime)
973# if defined WRITE_WATER && defined MASKING
974 vinfo(20)='mask_rho'
975# endif
976 vinfo(21)=vname(6,iddano)
977 vinfo(22)='coordinates'
978 aval(5)=real(iinfo(1,iddano,ng),r8)
979 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(iddano), &
980 & nf_fout, nvd4, t3dgrd, aval, vinfo, ncname)
981 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
982 END IF
983
984# ifdef LMD_SKPP
985!
986! Define depth of surface boundary layer.
987!
988 IF (aout(idhsbl,ng)) THEN
989 vinfo( 1)=vname(1,idhsbl)
990 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idhsbl))
991 vinfo( 3)=vname(3,idhsbl)
992 vinfo(14)=vname(4,idhsbl)
993 vinfo(16)=vname(1,idtime)
994# if defined WRITE_WATER && defined MASKING
995 vinfo(20)='mask_rho'
996# endif
997 vinfo(21)=vname(6,idhsbl)
998 vinfo(22)='coordinates'
999 aval(5)=real(iinfo(1,idhsbl,ng),r8)
1000 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idhsbl), &
1001 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1002 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1003 END IF
1004# endif
1005# ifdef LMD_BKPP
1006!
1007! Define depth of bottom boundary layer.
1008!
1009 IF (aout(idhbbl,ng)) THEN
1010 vinfo( 1)=vname(1,idhbbl)
1011 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idhbbl))
1012 vinfo( 3)=vname(3,idhbbl)
1013 vinfo(14)=vname(4,idhbbl)
1014 vinfo(16)=vname(1,idtime)
1015# if defined WRITE_WATER && defined MASKING
1016 vinfo(20)='mask_rho'
1017# endif
1018 vinfo(21)=vname(6,idhbbl)
1019 vinfo(22)='coordinates'
1020 aval(5)=real(iinfo(1,idhbbl,ng),r8)
1021 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idhbbl), &
1022 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1023 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1024 END IF
1025# endif
1026# endif
1027!
1028! Define 2D potential vorticity.
1029!
1030 IF (aout(id2dpv,ng)) THEN
1031 vinfo( 1)=vname(1,id2dpv)
1032 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,id2dpv))
1033 vinfo( 3)=vname(3,id2dpv)
1034 vinfo(14)=vname(4,id2dpv)
1035 vinfo(16)=vname(1,idtime)
1036# if defined WRITE_WATER && defined MASKING
1037 vinfo(20)='mask_psi'
1038# endif
1039 vinfo(21)=vname(6,id2dpv)
1040 vinfo(22)='coordinates'
1041 aval(5)=real(p2dvar,r8)
1042 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(id2dpv), &
1043 & nf_fout, nvd3, p2dgrd, aval, vinfo, ncname)
1044 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1045 END IF
1046!
1047! Define 2D relative vorticity.
1048!
1049 IF (aout(id2drv,ng)) THEN
1050 vinfo( 1)=vname(1,id2drv)
1051 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,id2drv))
1052 vinfo( 3)=vname(3,id2drv)
1053 vinfo(14)=vname(4,id2drv)
1054 vinfo(16)=vname(1,idtime)
1055# if defined WRITE_WATER && defined MASKING
1056 vinfo(20)='mask_psi'
1057# endif
1058 vinfo(21)=vname(6,id2drv)
1059 vinfo(22)='coordinates'
1060 aval(5)=real(p2dvar,r8)
1061 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(id2drv), &
1062 & nf_fout, nvd3, p2dgrd, aval, vinfo, ncname)
1063 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1064 END IF
1065
1066# ifdef SOLVE3D
1067!
1068! Define 3D potential vorticity.
1069!
1070 IF (aout(id3dpv,ng)) THEN
1071 vinfo( 1)=vname(1,id3dpv)
1072 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,id3dpv))
1073 vinfo( 3)=vname(3,id3dpv)
1074 vinfo(14)=vname(4,id3dpv)
1075 vinfo(16)=vname(1,idtime)
1076# if defined WRITE_WATER && defined MASKING
1077 vinfo(20)='mask_psi'
1078# endif
1079 vinfo(21)=vname(6,id3dpv)
1080 vinfo(22)='coordinates'
1081 aval(5)=real(p3dvar,r8)
1082 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(id3dpv), &
1083 & nf_fout, nvd4, p3dgrd, aval, vinfo, ncname)
1084 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1085 END IF
1086!
1087! Define 3D relative vorticity.
1088!
1089 IF (aout(id3drv,ng)) THEN
1090 vinfo( 1)=vname(1,id3drv)
1091 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,id3drv))
1092 vinfo( 3)=vname(3,id3drv)
1093 vinfo(14)=vname(4,id3drv)
1094 vinfo(16)=vname(1,idtime)
1095# if defined WRITE_WATER && defined MASKING
1096 vinfo(20)='mask_psi'
1097# endif
1098 vinfo(21)=vname(6,id3drv)
1099 vinfo(22)='coordinates'
1100 aval(5)=real(p3dvar,r8)
1101 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(id3drv), &
1102 & nf_fout, nvd4, p3dgrd, aval, vinfo, ncname)
1103 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1104 END IF
1105# endif
1106!
1107! Define quadratic <zeta*zeta> term.
1108!
1109 IF (aout(idzzav,ng)) THEN
1110 vinfo( 1)=vname(1,idzzav)
1111 vinfo( 2)=trim(vname(2,idzzav))
1112 vinfo( 3)=vname(3,idzzav)
1113 vinfo(14)=vname(4,idzzav)
1114 vinfo(16)=vname(1,idtime)
1115# if defined WRITE_WATER && defined MASKING
1116 vinfo(20)='mask_rho'
1117# endif
1118 vinfo(21)=vname(6,idzzav)
1119 vinfo(22)='coordinates'
1120 aval(5)=real(r2dvar,r8)
1121 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idzzav), &
1122 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1123 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1124 END IF
1125!
1126! Define quadratic <ubar*ubar> term.
1127!
1128 IF (aout(idu2av,ng)) THEN
1129 vinfo( 1)=vname(1,idu2av)
1130 vinfo( 2)=trim(vname(2,idu2av))
1131 vinfo( 3)=vname(3,idu2av)
1132 vinfo(14)=vname(4,idu2av)
1133 vinfo(16)=vname(1,idtime)
1134# if defined WRITE_WATER && defined MASKING
1135 vinfo(20)='mask_u'
1136# endif
1137 vinfo(21)=vname(6,idu2av)
1138 vinfo(22)='coordinates'
1139 aval(5)=real(u2dvar,r8)
1140 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idu2av), &
1141 & nf_fout, nvd3, u2dgrd, aval, vinfo, ncname)
1142 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1143 END IF
1144!
1145! Define quadratic <vbar*vbar> term.
1146!
1147 IF (aout(idv2av,ng)) THEN
1148 vinfo( 1)=vname(1,idv2av)
1149 vinfo( 2)=trim(vname(2,idv2av))
1150 vinfo( 3)=vname(3,idv2av)
1151 vinfo(14)=vname(4,idv2av)
1152 vinfo(16)=vname(1,idtime)
1153# if defined WRITE_WATER && defined MASKING
1154 vinfo(20)='mask_v'
1155# endif
1156 vinfo(21)=vname(6,idv2av)
1157 vinfo(22)='coordinates'
1158 aval(5)=real(v2dvar,r8)
1159 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idv2av), &
1160 & nf_fout, nvd3, v2dgrd, aval, vinfo, ncname)
1161 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1162 END IF
1163
1164# ifdef SOLVE3D
1165!
1166! Define u-volume flux.
1167!
1168 IF (aout(idhuav,ng)) THEN
1169 vinfo( 1)=vname(1,idhuav)
1170 vinfo( 2)=trim(vname(2,idhuav))
1171 vinfo( 3)=vname(3,idhuav)
1172 vinfo(14)=vname(4,idhuav)
1173 vinfo(16)=vname(1,idtime)
1174# if defined WRITE_WATER && defined MASKING
1175 vinfo(20)='mask_u'
1176# endif
1177 vinfo(21)=vname(6,idhuav)
1178 vinfo(22)='coordinates'
1179 aval(5)=real(u3dvar,r8)
1180 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idhuav), &
1181 & nf_fout, nvd4, u3dgrd, aval, vinfo, ncname)
1182 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1183 END IF
1184!
1185! Define v-volume flux.
1186!
1187 IF (aout(idhvav,ng)) THEN
1188 vinfo( 1)=vname(1,idhvav)
1189 vinfo( 2)=trim(vname(2,idhvav))
1190 vinfo( 3)=vname(3,idhvav)
1191 vinfo(14)=vname(4,idhvav)
1192 vinfo(16)=vname(1,idtime)
1193# if defined WRITE_WATER && defined MASKING
1194 vinfo(20)='mask_v'
1195# endif
1196 vinfo(21)=vname(6,idhvav)
1197 vinfo(22)='coordinates'
1198 aval(5)=real(v3dvar,r8)
1199 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idhvav), &
1200 & nf_fout, nvd4, v3dgrd, aval, vinfo, ncname)
1201 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1202 END IF
1203!
1204! Define quadratic <u*u> term.
1205!
1206 IF (aout(iduuav,ng)) THEN
1207 vinfo( 1)=vname(1,iduuav)
1208 vinfo( 2)=trim(vname(2,iduuav))
1209 vinfo( 3)=vname(3,iduuav)
1210 vinfo(14)=vname(4,iduuav)
1211 vinfo(16)=vname(1,idtime)
1212# if defined WRITE_WATER && defined MASKING
1213 vinfo(20)='mask_u'
1214# endif
1215 vinfo(21)=vname(6,iduuav)
1216 vinfo(22)='coordinates'
1217 aval(5)=real(u3dvar,r8)
1218 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(iduuav), &
1219 & nf_fout, nvd4, u3dgrd, aval, vinfo, ncname)
1220 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1221 END IF
1222!
1223! Define quadratic <u*v> term.
1224!
1225 IF (aout(iduvav,ng)) THEN
1226 vinfo( 1)=vname(1,iduvav)
1227 vinfo( 2)=trim(vname(2,iduvav))
1228 vinfo( 3)=vname(3,iduvav)
1229 vinfo(14)=vname(4,iduvav)
1230 vinfo(16)=vname(1,idtime)
1231# if defined WRITE_WATER && defined MASKING
1232 vinfo(20)='mask_rho'
1233# endif
1234 vinfo(21)=vname(6,iduvav)
1235 vinfo(22)='coordinates'
1236 aval(5)=real(r3dvar,r8)
1237 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(iduvav), &
1238 & nf_fout, nvd4, t3dgrd, aval, vinfo, ncname)
1239 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1240 END IF
1241!
1242! Define quadratic <v*v> term.
1243!
1244 IF (aout(idvvav,ng)) THEN
1245 vinfo( 1)=vname(1,idvvav)
1246 vinfo( 2)=trim(vname(2,idvvav))
1247 vinfo( 3)=vname(3,idvvav)
1248 vinfo(14)=vname(4,idvvav)
1249 vinfo(16)=vname(1,idtime)
1250# if defined WRITE_WATER && defined MASKING
1251 vinfo(20)='mask_v'
1252# endif
1253 vinfo(21)=vname(6,idvvav)
1254 vinfo(22)='coordinates'
1255 aval(5)=real(v3dvar,r8)
1256 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idvvav), &
1257 & nf_fout, nvd4, v3dgrd, aval, vinfo, ncname)
1258 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1259 END IF
1260!
1261! Define quadratic <t*t> terms.
1262!
1263 DO itrc=1,nt(ng)
1264 IF (aout(idttav(itrc),ng)) THEN
1265 vinfo( 1)=vname(1,idttav(itrc))
1266 vinfo( 2)=trim(vname(2,idttav(itrc)))
1267 vinfo( 3)=vname(3,idttav(itrc))
1268 vinfo(14)=vname(4,idttav(itrc))
1269 vinfo(16)=vname(1,idtime)
1270# if defined WRITE_WATER && defined MASKING
1271 vinfo(20)='mask_rho'
1272# endif
1273 vinfo(21)=vname(6,idttav(itrc))
1274 vinfo(22)='coordinates'
1275 aval(5)=real(r3dvar,r8)
1276 status=def_var(ng, model, avg(ng)%ncid, &
1277 & avg(ng)%Vid(idttav(itrc)), nf_fout, &
1278 & nvd4, t3dgrd, aval, vinfo, ncname)
1279 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1280 END IF
1281 END DO
1282!
1283! Define active tracers volume fluxes.
1284!
1285 DO itrc=1,nt(ng)
1286 IF (aout(ihutav(itrc),ng)) THEN
1287 vinfo( 1)=vname(1,ihutav(itrc))
1288 vinfo( 2)=trim(vname(2,ihutav(itrc)))
1289 vinfo( 3)=vname(3,ihutav(itrc))
1290 vinfo(14)=vname(4,ihutav(itrc))
1291 vinfo(16)=vname(1,idtime)
1292# if defined WRITE_WATER && defined MASKING
1293 vinfo(20)='mask_u'
1294# endif
1295 vinfo(21)=vname(6,ihutav(itrc))
1296 vinfo(22)='coordinates'
1297 aval(5)=real(u3dvar,r8)
1298 status=def_var(ng, model, avg(ng)%ncid, &
1299 & avg(ng)%Vid(ihutav(itrc)), nf_fout, &
1300 & nvd4, u3dgrd, aval, vinfo, ncname)
1301 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1302 END IF
1303!
1304 IF (aout(ihvtav(itrc),ng)) THEN
1305 vinfo( 1)=vname(1,ihvtav(itrc))
1306 vinfo( 2)=trim(vname(2,ihvtav(itrc)))
1307 vinfo( 3)=vname(3,ihvtav(itrc))
1308 vinfo(14)=vname(4,ihvtav(itrc))
1309 vinfo(16)=vname(1,idtime)
1310# if defined WRITE_WATER && defined MASKING
1311 vinfo(20)='mask_v'
1312# endif
1313 vinfo(21)=vname(6,ihvtav(itrc))
1314 vinfo(22)='coordinates'
1315 aval(5)=real(v3dvar,r8)
1316 status=def_var(ng, model, avg(ng)%ncid, &
1317 & avg(ng)%Vid(ihvtav(itrc)), nf_fout, &
1318 & nvd4, v3dgrd, aval, vinfo, ncname)
1319 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1320 END IF
1321 END DO
1322!
1323! Define quadratic <u*t> and <v*t> terms.
1324!
1325 DO itrc=1,nt(ng)
1326 IF (aout(idutav(itrc),ng)) THEN
1327 vinfo( 1)=vname(1,idutav(itrc))
1328 vinfo( 2)=trim(vname(2,idutav(itrc)))
1329 vinfo( 3)=vname(3,idutav(itrc))
1330 vinfo(14)=vname(4,idutav(itrc))
1331 vinfo(16)=vname(1,idtime)
1332# if defined WRITE_WATER && defined MASKING
1333 vinfo(20)='mask_u'
1334# endif
1335 vinfo(21)=vname(6,idutav(itrc))
1336 vinfo(22)='coordinates'
1337 aval(5)=real(u3dvar,r8)
1338 status=def_var(ng, model, avg(ng)%ncid, &
1339 & avg(ng)%Vid(idutav(itrc)), nf_fout, &
1340 & nvd4, u3dgrd, aval, vinfo, ncname)
1341 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1342 END IF
1343!
1344 IF (aout(idvtav(itrc),ng)) THEN
1345 vinfo( 1)=vname(1,idvtav(itrc))
1346 vinfo( 2)=trim(vname(2,idvtav(itrc)))
1347 vinfo( 3)=vname(3,idvtav(itrc))
1348 vinfo(14)=vname(4,idvtav(itrc))
1349 vinfo(16)=vname(1,idtime)
1350# if defined WRITE_WATER && defined MASKING
1351 vinfo(20)='mask_v'
1352# endif
1353 vinfo(21)=vname(6,idvtav(itrc))
1354 vinfo(22)='coordinates'
1355 aval(5)=real(v3dvar,r8)
1356 status=def_var(ng, model, avg(ng)%ncid, &
1357 & avg(ng)%Vid(idvtav(itrc)), nf_fout, &
1358 & nvd4, v3dgrd, aval, vinfo, ncname)
1359 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1360 END IF
1361 END DO
1362
1363# if defined LMD_MIXING || defined MY25_MIXING || defined GLS_MIXING
1364!
1365! Define vertical viscosity coefficient.
1366!
1367 IF (aout(idvvis,ng)) THEN
1368 vinfo( 1)=vname(1,idvvis)
1369 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvvis))
1370 vinfo( 3)=vname(3,idvvis)
1371 vinfo(14)=vname(4,idvvis)
1372 vinfo(16)=vname(1,idtime)
1373 vinfo(21)=vname(6,idvvis)
1374 vinfo(22)='coordinates'
1375 aval(5)=real(iinfo(1,idvvis,ng),r8)
1376 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idvvis), &
1377 & nf_fout, nvd4, w3dgrd, aval, vinfo, ncname, &
1378 & setfillval = .false.)
1379 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1380 END IF
1381!
1382! Define vertical diffusion coefficient for potential temperature.
1383!
1384 IF (aout(idtdif,ng)) THEN
1385 vinfo( 1)=vname(1,idtdif)
1386 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idtdif))
1387 vinfo( 3)=vname(3,idtdif)
1388 vinfo(14)=vname(4,idtdif)
1389 vinfo(16)=vname(1,idtime)
1390 vinfo(21)=vname(6,idtdif)
1391 vinfo(22)='coordinates'
1392 aval(5)=real(iinfo(1,idtdif,ng),r8)
1393 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idtdif), &
1394 & nf_fout, nvd4, w3dgrd, aval, vinfo, ncname, &
1395 & setfillval = .false.)
1396 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1397 END IF
1398
1399# ifdef SALINITY
1400!
1401! Define vertical diffusion coefficient for salinity.
1402!
1403 IF (aout(idsdif,ng)) THEN
1404 vinfo( 1)=vname(1,idsdif)
1405 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idsdif))
1406 vinfo( 3)=vname(3,idsdif)
1407 vinfo(14)=vname(4,idsdif)
1408 vinfo(16)=vname(1,idtime)
1409 vinfo(21)=vname(6,idsdif)
1410 vinfo(22)='coordinates'
1411 aval(5)=real(iinfo(1,idsdif,ng),r8)
1412 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idsdif), &
1413 & nf_fout, nvd4, w3dgrd, aval, vinfo, ncname, &
1414 & setfillval = .false.)
1415 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1416 END IF
1417# endif
1418# endif
1419# if defined BULK_FLUXES || defined ECOSIM || defined ATM_PRESS
1420!
1421! Define surface air pressure.
1422!
1423 IF (aout(idpair,ng)) THEN
1424 vinfo( 1)=vname(1,idpair)
1425 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idpair))
1426 vinfo( 3)=vname(3,idpair)
1427 vinfo(14)=vname(4,idpair)
1428 vinfo(16)=vname(1,idtime)
1429# if defined WRITE_WATER && defined MASKING
1430 vinfo(20)='mask_rho'
1431# endif
1432 vinfo(21)=vname(6,idpair)
1433 vinfo(22)='coordinates'
1434 aval(5)=real(iinfo(1,idpair,ng),r8)
1435 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idpair), &
1436 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1437 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1438 END IF
1439# endif
1440# if defined BULK_FLUXES
1441!
1442! Define surface air temperature.
1443!
1444 IF (aout(idtair,ng)) THEN
1445 vinfo( 1)=vname(1,idtair)
1446 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idtair))
1447 vinfo( 3)=vname(3,idtair)
1448 vinfo(14)=vname(4,idtair)
1449 vinfo(16)=vname(1,idtime)
1450# if defined WRITE_WATER && defined MASKING
1451 vinfo(20)='mask_rho'
1452# endif
1453 vinfo(21)=vname(6,idtair)
1454 vinfo(22)='coordinates'
1455 aval(5)=real(iinfo(1,idtair,ng),r8)
1456 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idtair), &
1457 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1458 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1459 END IF
1460# endif
1461# if defined BULK_FLUXES || defined ECOSIM
1462!
1463! Define surface winds.
1464!
1465 IF (aout(iduair,ng)) THEN
1466 vinfo( 1)=vname(1,iduair)
1467 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,iduair))
1468 vinfo( 3)=vname(3,iduair)
1469 vinfo(14)=vname(4,iduair)
1470 vinfo(16)=vname(1,idtime)
1471# if defined WRITE_WATER && defined MASKING
1472 vinfo(20)='mask_rho'
1473# endif
1474 vinfo(21)=vname(6,iduair)
1475 vinfo(22)='coordinates'
1476 aval(5)=real(iinfo(1,iduair,ng),r8)
1477 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(iduair), &
1478 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1479 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1480 END IF
1481!
1482 IF (aout(idvair,ng)) THEN
1483 vinfo( 1)=vname(1,idvair)
1484 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvair))
1485 vinfo( 3)=vname(3,idvair)
1486 vinfo(14)=vname(4,idvair)
1487 vinfo(16)=vname(1,idtime)
1488# if defined WRITE_WATER && defined MASKING
1489 vinfo(20)='mask_rho'
1490# endif
1491 vinfo(21)=vname(6,idvair)
1492 vinfo(22)='coordinates'
1493 aval(5)=real(iinfo(1,idvair,ng),r8)
1494 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idvair), &
1495 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1496 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1497 END IF
1498!
1499! Define Eastward/Northward surface wind at RHO-points.
1500!
1501 IF (aout(iduaie,ng)) THEN
1502 vinfo( 1)=vname(1,iduaie)
1503 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,iduaie))
1504 vinfo( 3)=vname(3,iduaie)
1505 vinfo(14)=vname(4,iduaie)
1506 vinfo(16)=vname(1,idtime)
1507# if defined WRITE_WATER && defined MASKING
1508 vinfo(20)='mask_rho'
1509# endif
1510 vinfo(21)=vname(6,iduaie)
1511 vinfo(22)='coordinates'
1512 aval(5)=real(iinfo(1,iduaie,ng),r8)
1513 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(iduaie), &
1514 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1515 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1516 END IF
1517!
1518 IF (aout(idvain,ng)) THEN
1519 vinfo( 1)=vname(1,idvain)
1520 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvain))
1521 vinfo( 3)=vname(3,idvain)
1522 vinfo(14)=vname(4,idvain)
1523 vinfo(16)=vname(1,idtime)
1524# if defined WRITE_WATER && defined MASKING
1525 vinfo(20)='mask_rho'
1526# endif
1527 vinfo(21)=vname(6,idvain)
1528 vinfo(22)='coordinates'
1529 aval(5)=real(iinfo(1,idvain,ng),r8)
1530 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idvain), &
1531 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1532 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1533 END IF
1534# endif
1535!
1536! Define surface net heat flux.
1537!
1538 IF (aout(idtsur(itemp),ng)) THEN
1539 vinfo( 1)=vname(1,idtsur(itemp))
1540 WRITE (vinfo( 2),'(a,1x,a)') prefix, &
1541 & trim(vname(2,idtsur(itemp)))
1542 vinfo( 3)=vname(3,idtsur(itemp))
1543 vinfo(11)='upward flux, cooling'
1544 vinfo(12)='downward flux, heating'
1545 vinfo(14)=vname(4,idtsur(itemp))
1546 vinfo(16)=vname(1,idtime)
1547# if defined WRITE_WATER && defined MASKING
1548 vinfo(20)='mask_rho'
1549# endif
1550 vinfo(21)=vname(6,idtsur(itemp))
1551 vinfo(22)='coordinates'
1552 aval(5)=real(iinfo(1,idtsur(itemp),ng),r8)
1553 status=def_var(ng, model, avg(ng)%ncid, &
1554 & avg(ng)%Vid(idtsur(itemp)), nf_fout, &
1555 & nvd3, t2dgrd, aval, vinfo, ncname)
1556 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1557 END IF
1558
1559# ifdef SALINITY
1560!
1561! Define surface net salt flux.
1562!
1563 IF (aout(idtsur(isalt),ng)) THEN
1564 vinfo( 1)=vname(1,idtsur(isalt))
1565 WRITE (vinfo( 2),'(a,1x,a)') prefix, &
1566 & trim(vname(2,idtsur(isalt)))
1567 vinfo( 3)=vname(3,idtsur(isalt))
1568 vinfo(11)='upward flux, freshening (net precipitation)'
1569 vinfo(12)='downward flux, salting (net evaporation)'
1570 vinfo(14)=vname(4,idtsur(isalt))
1571 vinfo(16)=vname(1,idtime)
1572# if defined WRITE_WATER && defined MASKING
1573 vinfo(20)='mask_rho'
1574# endif
1575 vinfo(21)=vname(6,idtsur(isalt))
1576 vinfo(22)='coordinates'
1577 aval(5)=real(iinfo(1,idtsur(isalt),ng),r8)
1578 status=def_var(ng, model, avg(ng)%ncid, &
1579 & avg(ng)%Vid(idtsur(isalt)), nf_fout, &
1580 & nvd3, t2dgrd, aval, vinfo, ncname)
1581 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1582 END IF
1583# endif
1584
1585# if defined BULK_FLUXES || defined FRC_COUPLING
1586!
1587! Define latent heat flux.
1588!
1589 IF (aout(idlhea,ng)) THEN
1590 vinfo( 1)=vname(1,idlhea)
1591 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idlhea))
1592 vinfo( 3)=vname(3,idlhea)
1593 vinfo(11)='upward flux, cooling'
1594 vinfo(12)='downward flux, heating'
1595 vinfo(14)=vname(4,idlhea)
1596 vinfo(16)=vname(1,idtime)
1597# if defined WRITE_WATER && defined MASKING
1598 vinfo(20)='mask_rho'
1599# endif
1600 vinfo(21)=vname(6,idlhea)
1601 vinfo(22)='coordinates'
1602 aval(5)=real(iinfo(1,idlhea,ng),r8)
1603 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idlhea), &
1604 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1605 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1606 END IF
1607!
1608! Define sensible heat flux.
1609!
1610 IF (aout(idshea,ng)) THEN
1611 vinfo( 1)=vname(1,idshea)
1612 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idshea))
1613 vinfo( 3)=vname(3,idshea)
1614 vinfo(11)='upward flux, cooling'
1615 vinfo(12)='downward flux, heating'
1616 vinfo(14)=vname(4,idshea)
1617 vinfo(16)=vname(1,idtime)
1618# if defined WRITE_WATER && defined MASKING
1619 vinfo(20)='mask_rho'
1620# endif
1621 vinfo(21)=vname(6,idshea)
1622 vinfo(22)='coordinates'
1623 aval(5)=real(iinfo(1,idshea,ng),r8)
1624 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idshea), &
1625 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1626 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1627 END IF
1628!
1629! Define net longwave radiation flux.
1630!
1631 IF (aout(idlrad,ng)) THEN
1632 vinfo( 1)=vname(1,idlrad)
1633 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idlrad))
1634 vinfo( 3)=vname(3,idlrad)
1635 vinfo(11)='upward flux, cooling'
1636 vinfo(12)='downward flux, heating'
1637 vinfo(14)=vname(4,idlrad)
1638 vinfo(16)=vname(1,idtime)
1639# if defined WRITE_WATER && defined MASKING
1640 vinfo(20)='mask_rho'
1641# endif
1642 vinfo(21)=vname(6,idlrad)
1643 vinfo(22)='coordinates'
1644 aval(5)=real(iinfo(1,idlrad,ng),r8)
1645 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idlrad), &
1646 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1647 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1648 END IF
1649# endif
1650
1651# ifdef BULK_FLUXES
1652# ifdef EMINUSP
1653!
1654! Define evaporation rate.
1655!
1656 IF (aout(idevap,ng)) THEN
1657 vinfo( 1)=vname(1,idevap)
1658 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idevap))
1659 vinfo( 3)=vname(3,idevap)
1660 vinfo(11)='downward flux, freshening (condensation)'
1661 vinfo(12)='upward flux, salting (evaporation)'
1662 vinfo(14)=vname(4,idevap)
1663 vinfo(16)=vname(1,idtime)
1664# if defined WRITE_WATER && defined MASKING
1665 vinfo(20)='mask_rho'
1666# endif
1667 vinfo(21)=vname(6,idevap)
1668 vinfo(22)='coordinates'
1669 aval(5)=real(iinfo(1,idevap,ng),r8)
1670 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idevap), &
1671 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1672 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1673 END IF
1674!
1675! Define precipitation rate.
1676!
1677 IF (aout(idrain,ng)) THEN
1678 vinfo( 1)=vname(1,idrain)
1679 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idrain))
1680 vinfo( 3)=vname(3,idrain)
1681 vinfo(12)='downward flux, freshening (precipitation)'
1682 vinfo(14)=vname(4,idrain)
1683 vinfo(16)=vname(1,idtime)
1684# if defined WRITE_WATER && defined MASKING
1685 vinfo(20)='mask_rho'
1686# endif
1687 vinfo(21)=vname(6,idrain)
1688 vinfo(22)='coordinates'
1689 aval(5)=real(iinfo(1,idrain,ng),r8)
1690 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idrain), &
1691 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1692 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1693 END IF
1694# endif
1695# endif
1696# ifdef SHORTWAVE
1697!
1698! Define net shortwave radiation flux.
1699!
1700 IF (aout(idsrad,ng)) THEN
1701 vinfo( 1)=vname(1,idsrad)
1702 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idsrad))
1703 vinfo( 3)=vname(3,idsrad)
1704 vinfo(11)='upward flux, cooling'
1705 vinfo(12)='downward flux, heating'
1706 vinfo(14)=vname(4,idsrad)
1707 vinfo(16)=vname(1,idtime)
1708# if defined WRITE_WATER && defined MASKING
1709 vinfo(20)='mask_rho'
1710# endif
1711 vinfo(21)=vname(6,idsrad)
1712 vinfo(22)='coordinates'
1713 aval(5)=real(iinfo(1,idsrad,ng),r8)
1714 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idsrad), &
1715 & nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1716 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1717 END IF
1718# endif
1719# endif
1720!
1721! Define surface u-momentum stress.
1722!
1723 IF (aout(idusms,ng)) THEN
1724 vinfo( 1)=vname(1,idusms)
1725 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idusms))
1726 vinfo( 3)=vname(3,idusms)
1727 vinfo(14)=vname(4,idusms)
1728 vinfo(16)=vname(1,idtime)
1729# if defined WRITE_WATER && defined MASKING
1730 vinfo(20)='mask_u'
1731# endif
1732 vinfo(21)=vname(6,idusms)
1733 vinfo(22)='coordinates'
1734 aval(5)=real(iinfo(1,idusms,ng),r8)
1735 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idusms), &
1736 & nf_fout, nvd3, u2dgrd, aval, vinfo, ncname)
1737 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1738 END IF
1739!
1740! Define surface v-momentum stress.
1741!
1742 IF (aout(idvsms,ng)) THEN
1743 vinfo( 1)=vname(1,idvsms)
1744 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvsms))
1745 vinfo( 3)=vname(3,idvsms)
1746 vinfo(14)=vname(4,idvsms)
1747 vinfo(16)=vname(1,idtime)
1748# if defined WRITE_WATER && defined MASKING
1749 vinfo(20)='mask_v'
1750# endif
1751 vinfo(21)=vname(6,idvsms)
1752 vinfo(22)='coordinates'
1753 aval(5)=real(iinfo(1,idvsms,ng),r8)
1754 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idvsms), &
1755 & nf_fout, nvd3, v2dgrd, aval, vinfo, ncname)
1756 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1757 END IF
1758!
1759! Define bottom u-momentum stress.
1760!
1761 IF (aout(idubms,ng)) THEN
1762 vinfo( 1)=vname(1,idubms)
1763 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idubms))
1764 vinfo( 3)=vname(3,idubms)
1765 vinfo(14)=vname(4,idubms)
1766 vinfo(16)=vname(1,idtime)
1767# if defined WRITE_WATER && defined MASKING
1768 vinfo(20)='mask_u'
1769# endif
1770 vinfo(21)=vname(6,idubms)
1771 vinfo(22)='coordinates'
1772 aval(5)=real(iinfo(1,idubms,ng),r8)
1773 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idubms), &
1774 & nf_fout, nvd3, u2dgrd, aval, vinfo, ncname)
1775 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1776 END IF
1777!
1778! Define bottom v-momentum stress.
1779!
1780 IF (aout(idvbms,ng)) THEN
1781 vinfo( 1)=vname(1,idvbms)
1782 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvbms))
1783 vinfo( 3)=vname(3,idvbms)
1784 vinfo(14)=vname(4,idvbms)
1785 vinfo(16)=vname(1,idtime)
1786# if defined WRITE_WATER && defined MASKING
1787 vinfo(20)='mask_v'
1788# endif
1789 vinfo(21)=vname(6,idvbms)
1790 vinfo(22)='coordinates'
1791 aval(5)=real(iinfo(1,idvbms,ng),r8)
1792 status=def_var(ng, model, avg(ng)%ncid, avg(ng)%Vid(idvbms), &
1793 & nf_fout, nvd3, v2dgrd, aval, vinfo, ncname)
1794 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1795 END IF
1796
1797# if (defined BBL_MODEL || defined WAVES_OUTPUT) && defined SOLVE3D
1798!
1799!-----------------------------------------------------------------------
1800! Define the bottom boundary layer model or waves variables.
1801!-----------------------------------------------------------------------
1802!
1803 CALL bbl_def_nf90 (ng, model, ldef, aout, avg, &
1804 & t2dgrd, u2dgrd, v2dgrd)
1805 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1806# endif
1807
1808# if defined ICE_MODEL && defined SOLVE3D
1809!
1810!-----------------------------------------------------------------------
1811! Define the sea-ice model variables.
1812!-----------------------------------------------------------------------
1813!
1814 CALL ice_def_nf90 (ng, model, ldef, aout, avg, &
1815 & t2dgrd, u2dgrd, v2dgrd)
1816 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1817# endif
1818
1819# if defined SEDIMENT && defined SOLVE3D
1820!
1821!-----------------------------------------------------------------------
1822! Define the sediment model variables.
1823!-----------------------------------------------------------------------
1824!
1825 CALL sediment_def_nf90 (ng, model, ldef, aout, avg, &
1826 & t2dgrd, u2dgrd, v2dgrd, &
1827 & b3dgrd)
1828 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1829# endif
1830
1831# if defined WEC_VF && defined SOLVE3D
1832!
1833!-----------------------------------------------------------------------
1834! Define the Waves Effect on Currents variables.
1835!-----------------------------------------------------------------------
1836!
1837 CALL wec_def_nf90 (ng, model, ldef, aout, avg, &
1838 & t2dgrd, u2dgrd, v2dgrd, &
1839 & t3dgrd, u3dgrd, v3dgrd, w3dgrd)
1840 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1841# endif
1842!
1843!-----------------------------------------------------------------------
1844! Leave definition mode.
1845!-----------------------------------------------------------------------
1846!
1847 CALL netcdf_enddef (ng, model, ncname, avg(ng)%ncid)
1848 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1849!
1850!-----------------------------------------------------------------------
1851! Write out time-recordless, information variables.
1852!-----------------------------------------------------------------------
1853!
1854 CALL wrt_info (ng, model, avg(ng)%ncid, ncname)
1855 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1856 END IF define
1857!
1858!=======================================================================
1859! Open an existing averages file, check its contents, and prepare
1860! for appending data.
1861!=======================================================================
1862!
1863 query : IF (.not.ldef) THEN
1864 ncname=avg(ng)%name
1865!
1866! Open averages file for read/write.
1867!
1868 CALL netcdf_open (ng, model, ncname, 1, avg(ng)%ncid)
1869 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
1870 WRITE (stdout,50) trim(ncname)
1871 RETURN
1872 END IF
1873!
1874! Inquire about the dimensions and check for consistency.
1875!
1876 CALL netcdf_check_dim (ng, model, ncname, &
1877 & ncid = avg(ng)%ncid)
1878 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1879!
1880! Inquire about the variables.
1881!
1882 CALL netcdf_inq_var (ng, model, ncname, &
1883 & ncid = avg(ng)%ncid)
1884 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1885!
1886! Initialize logical switches.
1887!
1888 DO i=1,nv
1889 got_var(i)=.false.
1890 END DO
1891!
1892! Scan variable list from input NetCDF and activate switches for
1893! average variables. Get variable IDs.
1894!
1895 DO i=1,n_var
1896 IF (trim(var_name(i)).eq.trim(vname(1,idtime))) THEN
1897 got_var(idtime)=.true.
1898 avg(ng)%Vid(idtime)=var_id(i)
1899# ifdef WET_DRY
1900 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrwet))) THEN
1901 got_var(idrwet)=.true.
1902 avg(ng)%Vid(idrwet)=var_id(i)
1903# endif
1904 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idfsur))) THEN
1905 got_var(idfsur)=.true.
1906 avg(ng)%Vid(idfsur)=var_id(i)
1907 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubar))) THEN
1908 got_var(idubar)=.true.
1909 avg(ng)%Vid(idubar)=var_id(i)
1910 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbar))) THEN
1911 got_var(idvbar)=.true.
1912 avg(ng)%Vid(idvbar)=var_id(i)
1913# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
1914 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idfsud))) THEN
1915 got_var(idfsud)=.true.
1916 avg(ng)%Vid(idfsud)=var_id(i)
1917 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu2dd))) THEN
1918 got_var(idu2dd)=.true.
1919 avg(ng)%Vid(idu2dd)=var_id(i)
1920 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv2dd))) THEN
1921 got_var(idv2dd)=.true.
1922 avg(ng)%Vid(idv2dd)=var_id(i)
1923# endif
1924 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu2de))) THEN
1925 got_var(idu2de)=.true.
1926 avg(ng)%Vid(idu2de)=var_id(i)
1927 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv2dn))) THEN
1928 got_var(idv2dn)=.true.
1929 avg(ng)%Vid(idv2dn)=var_id(i)
1930# ifdef SOLVE3D
1931# ifdef FORWARD_WRITE
1932 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idufx1))) THEN
1933 got_var(idufx1)=.true.
1934 avg(ng)%Vid(idufx1)=var_id(i)
1935 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idufx2))) THEN
1936 got_var(idufx2)=.true.
1937 avg(ng)%Vid(idufx2)=var_id(i)
1938 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvfx1))) THEN
1939 got_var(idvfx1)=.true.
1940 avg(ng)%Vid(idvfx1)=var_id(i)
1941 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvfx2))) THEN
1942 got_var(idvfx2)=.true.
1943 avg(ng)%Vid(idvfx2)=var_id(i)
1944# endif
1945 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduvel))) THEN
1946 got_var(iduvel)=.true.
1947 avg(ng)%Vid(iduvel)=var_id(i)
1948 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvel))) THEN
1949 got_var(idvvel)=.true.
1950 avg(ng)%Vid(idvvel)=var_id(i)
1951# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
1952 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu3dd))) THEN
1953 got_var(idu3dd)=.true.
1954 avg(ng)%Vid(idu3dd)=var_id(i)
1955 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv3dd))) THEN
1956 got_var(idv3dd)=.true.
1957 avg(ng)%Vid(idv3dd)=var_id(i)
1958# endif
1959 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu3de))) THEN
1960 got_var(idu3de)=.true.
1961 avg(ng)%Vid(idu3de)=var_id(i)
1962 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv3dn))) THEN
1963 got_var(idv3dn)=.true.
1964 avg(ng)%Vid(idv3dn)=var_id(i)
1965 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idovel))) THEN
1966 got_var(idovel)=.true.
1967 avg(ng)%Vid(idovel)=var_id(i)
1968 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idwvel))) THEN
1969 got_var(idwvel)=.true.
1970 avg(ng)%Vid(idwvel)=var_id(i)
1971 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iddano))) THEN
1972 got_var(iddano)=.true.
1973 avg(ng)%Vid(iddano)=var_id(i)
1974# ifdef LMD_SKPP
1975 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idhsbl))) THEN
1976 got_var(idhsbl)=.true.
1977 avg(ng)%Vid(idhsbl)=var_id(i)
1978# endif
1979# ifdef LMD_BKPP
1980 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idhbbl))) THEN
1981 got_var(idhbbl)=.true.
1982 avg(ng)%Vid(idhbbl)=var_id(i)
1983# endif
1984# endif
1985 ELSE IF (trim(var_name(i)).eq.trim(vname(1,id2dpv))) THEN
1986 got_var(id2dpv)=.true.
1987 avg(ng)%Vid(id2dpv)=var_id(i)
1988 ELSE IF (trim(var_name(i)).eq.trim(vname(1,id2drv))) THEN
1989 got_var(id2drv)=.true.
1990 avg(ng)%Vid(id2drv)=var_id(i)
1991# ifdef SOLVE3D
1992 ELSE IF (trim(var_name(i)).eq.trim(vname(1,id3dpv))) THEN
1993 got_var(id3dpv)=.true.
1994 avg(ng)%Vid(id3dpv)=var_id(i)
1995 ELSE IF (trim(var_name(i)).eq.trim(vname(1,id3drv))) THEN
1996 got_var(id3drv)=.true.
1997 avg(ng)%Vid(id3drv)=var_id(i)
1998# endif
1999 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idzzav))) THEN
2000 got_var(idzzav)=.true.
2001 avg(ng)%Vid(idzzav)=var_id(i)
2002 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu2av))) THEN
2003 got_var(idu2av)=.true.
2004 avg(ng)%Vid(idu2av)=var_id(i)
2005 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv2av))) THEN
2006 got_var(idv2av)=.true.
2007 avg(ng)%Vid(idv2av)=var_id(i)
2008# ifdef SOLVE3D
2009 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idhuav))) THEN
2010 got_var(idhuav)=.true.
2011 avg(ng)%Vid(idhuav)=var_id(i)
2012 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idhvav))) THEN
2013 got_var(idhvav)=.true.
2014 avg(ng)%Vid(idhvav)=var_id(i)
2015 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduuav))) THEN
2016 got_var(iduuav)=.true.
2017 avg(ng)%Vid(iduuav)=var_id(i)
2018 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduvav))) THEN
2019 got_var(iduvav)=.true.
2020 avg(ng)%Vid(iduvav)=var_id(i)
2021 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvav))) THEN
2022 got_var(idvvav)=.true.
2023 avg(ng)%Vid(idvvav)=var_id(i)
2024# if defined LMD_MIXING || defined MY25_MIXING || defined GLS_MIXING
2025 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvis))) THEN
2026 got_var(idvvis)=.true.
2027 avg(ng)%Vid(idvvis)=var_id(i)
2028 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idtdif))) THEN
2029 got_var(idtdif)=.true.
2030 avg(ng)%Vid(idtdif)=var_id(i)
2031# ifdef SALINITY
2032 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idsdif))) THEN
2033 got_var(idsdif)=.true.
2034 avg(ng)%Vid(idsdif)=var_id(i)
2035# endif
2036# endif
2037# if defined BULK_FLUXES || defined ECOSIM || defined ATM_PRESS
2038 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idpair))) THEN
2039 got_var(idpair)=.true.
2040 avg(ng)%Vid(idpair)=var_id(i)
2041# endif
2042# if defined BULK_FLUXES || defined ECOSIM
2043 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduair))) THEN
2044 got_var(iduair)=.true.
2045 avg(ng)%Vid(iduair)=var_id(i)
2046 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvair))) THEN
2047 got_var(idvair)=.true.
2048 avg(ng)%Vid(idvair)=var_id(i)
2049 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduaie))) THEN
2050 got_var(iduaie)=.true.
2051 avg(ng)%Vid(iduaie)=var_id(i)
2052 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvain))) THEN
2053 got_var(idvain)=.true.
2054 avg(ng)%Vid(idvain)=var_id(i)
2055# endif
2056 ELSE IF (trim(var_name(i)).eq. &
2057 & trim(vname(1,idtsur(itemp)))) THEN
2058 got_var(idtsur(itemp))=.true.
2059 avg(ng)%Vid(idtsur(itemp))=var_id(i)
2060# ifdef SALINITY
2061 ELSE IF (trim(var_name(i)).eq. &
2062 & trim(vname(1,idtsur(isalt)))) THEN
2063 got_var(idtsur(isalt))=.true.
2064 avg(ng)%Vid(idtsur(isalt))=var_id(i)
2065# endif
2066# if defined BULK_FLUXES || defined FRC_COUPLING
2067 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idlhea))) THEN
2068 got_var(idlhea)=.true.
2069 avg(ng)%Vid(idlhea)=var_id(i)
2070 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idshea))) THEN
2071 got_var(idshea)=.true.
2072 avg(ng)%Vid(idshea)=var_id(i)
2073 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idlrad))) THEN
2074 got_var(idlrad)=.true.
2075 avg(ng)%Vid(idlrad)=var_id(i)
2076# endif
2077# ifdef BULK_FLUXES
2078 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idtair))) THEN
2079 got_var(idtair)=.true.
2080 avg(ng)%Vid(idtair)=var_id(i)
2081# ifdef EMINUSP
2082 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idevap))) THEN
2083 got_var(idevap)=.true.
2084 avg(ng)%Vid(idevap)=var_id(i)
2085 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrain))) THEN
2086 got_var(idrain)=.true.
2087 avg(ng)%Vid(idrain)=var_id(i)
2088# endif
2089# endif
2090# ifdef SHORTWAVE
2091 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idsrad))) THEN
2092 got_var(idsrad)=.true.
2093 avg(ng)%Vid(idsrad)=var_id(i)
2094# endif
2095# endif
2096 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idusms))) THEN
2097 got_var(idusms)=.true.
2098 avg(ng)%Vid(idusms)=var_id(i)
2099 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvsms))) THEN
2100 got_var(idvsms)=.true.
2101 avg(ng)%Vid(idvsms)=var_id(i)
2102 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubms))) THEN
2103 got_var(idubms)=.true.
2104 avg(ng)%Vid(idubms)=var_id(i)
2105 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbms))) THEN
2106 got_var(idvbms)=.true.
2107 avg(ng)%Vid(idvbms)=var_id(i)
2108 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubrs))) THEN
2109 got_var(idubrs)=.true.
2110 avg(ng)%Vid(idubrs)=var_id(i)
2111 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbrs))) THEN
2112 got_var(idvbrs)=.true.
2113 avg(ng)%Vid(idvbrs)=var_id(i)
2114 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubws))) THEN
2115 got_var(idubws)=.true.
2116 avg(ng)%Vid(idubws)=var_id(i)
2117 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbws))) THEN
2118 got_var(idvbws)=.true.
2119 avg(ng)%Vid(idvbws)=var_id(i)
2120 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubcs))) THEN
2121 got_var(idubcs)=.true.
2122 avg(ng)%Vid(idubcs)=var_id(i)
2123 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbcs))) THEN
2124 got_var(idvbcs)=.true.
2125 avg(ng)%Vid(idvbcs)=var_id(i)
2126 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduvwc))) THEN
2127 got_var(iduvwc)=.true.
2128 avg(ng)%Vid(iduvwc)=var_id(i)
2129 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubot))) THEN
2130 got_var(idubot)=.true.
2131 avg(ng)%Vid(idubot)=var_id(i)
2132 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbot))) THEN
2133 got_var(idvbot)=.true.
2134 avg(ng)%Vid(idvbot)=var_id(i)
2135 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubur))) THEN
2136 got_var(idubur)=.true.
2137 avg(ng)%Vid(idubur)=var_id(i)
2138 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbvr))) THEN
2139 got_var(idvbvr)=.true.
2140 avg(ng)%Vid(idvbvr)=var_id(i)
2141 END IF
2142# ifdef SOLVE3D
2143 DO itrc=1,nt(ng)
2144 IF (trim(var_name(i)).eq.trim(vname(1,idtvar(itrc)))) THEN
2145 got_var(idtvar(itrc))=.true.
2146 avg(ng)%Tid(itrc)=var_id(i)
2147 END IF
2148 END DO
2149 DO itrc=1,nat
2150 IF (trim(var_name(i)).eq.trim(vname(1,ihutav(itrc)))) THEN
2151 got_var(ihutav(itrc))=.true.
2152 avg(ng)%Vid(ihutav(itrc))=var_id(i)
2153 ELSE IF (trim(var_name(i)).eq. &
2154 & trim(vname(1,ihvtav(itrc)))) THEN
2155 got_var(ihvtav(itrc))=.true.
2156 avg(ng)%Vid(ihvtav(itrc))=var_id(i)
2157 ELSE IF (trim(var_name(i)).eq. &
2158 & trim(vname(1,idutav(itrc)))) THEN
2159 got_var(idutav(itrc))=.true.
2160 avg(ng)%Vid(idutav(itrc))=var_id(i)
2161 ELSE IF (trim(var_name(i)).eq. &
2162 & trim(vname(1,idvtav(itrc)))) THEN
2163 got_var(idvtav(itrc))=.true.
2164 avg(ng)%Vid(idvtav(itrc))=var_id(i)
2165 ELSE IF (trim(var_name(i)).eq. &
2166 & trim(vname(1,idttav(itrc)))) THEN
2167 got_var(idttav(itrc))=.true.
2168 avg(ng)%Vid(idttav(itrc))=var_id(i)
2169 END IF
2170 END DO
2171# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
2172 DO itrc=1,nat
2173 IF (trim(var_name(i)).eq.trim(vname(1,idtrcd(itrc)))) THEN
2174 got_var(idtrcd(itrc))=.true.
2175 avg(ng)%Vid(idtrcd(itrc))=var_id(i)
2176 END IF
2177 END DO
2178# endif
2179# endif
2180 END DO
2181!
2182! Check if averages variables are available in input NetCDF file.
2183!
2184 IF (.not.got_var(idtime)) THEN
2185 IF (master) WRITE (stdout,60) trim(vname(1,idtime)), &
2186 & trim(ncname)
2187 exit_flag=3
2188 RETURN
2189 END IF
2190 IF (.not.got_var(idfsur).and.aout(idfsur,ng)) THEN
2191 IF (master) WRITE (stdout,60) trim(vname(1,idfsur)), &
2192 & trim(ncname)
2193 exit_flag=3
2194 RETURN
2195 END IF
2196 IF (.not.got_var(idubar).and.aout(idubar,ng)) THEN
2197 IF (master) WRITE (stdout,60) trim(vname(1,idubar)), &
2198 & trim(ncname)
2199 exit_flag=3
2200 RETURN
2201 END IF
2202 IF (.not.got_var(idvbar).and.aout(idvbar,ng)) THEN
2203 IF (master) WRITE (stdout,60) trim(vname(1,idvbar)), &
2204 & trim(ncname)
2205 exit_flag=3
2206 RETURN
2207 END IF
2208# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
2209 IF (.not.got_var(idfsud).and.aout(idfsud,ng)) THEN
2210 IF (master) WRITE (stdout,60) trim(vname(1,idfsud)), &
2211 & trim(ncname)
2212 exit_flag=3
2213 RETURN
2214 END IF
2215 IF (.not.got_var(idu2dd).and.aout(idu2dd,ng)) THEN
2216 IF (master) WRITE (stdout,60) trim(vname(1,idu2dd)), &
2217 & trim(ncname)
2218 exit_flag=3
2219 RETURN
2220 END IF
2221 IF (.not.got_var(idv2dd).and.aout(idv2dd,ng)) THEN
2222 IF (master) WRITE (stdout,60) trim(vname(1,idv2dd)), &
2223 & trim(ncname)
2224 exit_flag=3
2225 RETURN
2226 END IF
2227# endif
2228 IF (.not.got_var(idu2de).and.aout(idu2de,ng)) THEN
2229 IF (master) WRITE (stdout,60) trim(vname(1,idu2de)), &
2230 & trim(ncname)
2231 exit_flag=3
2232 RETURN
2233 END IF
2234 IF (.not.got_var(idv2dn).and.aout(idv2dn,ng)) THEN
2235 IF (master) WRITE (stdout,60) trim(vname(1,idv2dn)), &
2236 & trim(ncname)
2237 exit_flag=3
2238 RETURN
2239 END IF
2240# ifdef SOLVE3D
2241# ifdef FORWARD_WRITE
2242 IF (.not.got_var(idufx1).and.aout(idufx1,ng)) THEN
2243 IF (master) WRITE (stdout,60) trim(vname(1,idufx1)), &
2244 & trim(ncname)
2245 exit_flag=3
2246 RETURN
2247 END IF
2248 IF (.not.got_var(idufx2).and.aout(idufx2,ng)) THEN
2249 IF (master) WRITE (stdout,60) trim(vname(1,idufx2)), &
2250 & trim(ncname)
2251 exit_flag=3
2252 RETURN
2253 END IF
2254 IF (.not.got_var(idvfx1).and.aout(idvfx1,ng)) THEN
2255 IF (master) WRITE (stdout,60) trim(vname(1,idvfx1)), &
2256 & trim(ncname)
2257 exit_flag=3
2258 RETURN
2259 END IF
2260 IF (.not.got_var(idvfx2).and.aout(idvfx2,ng)) THEN
2261 IF (master) WRITE (stdout,60) trim(vname(1,idvfx2)), &
2262 & trim(ncname)
2263 exit_flag=3
2264 RETURN
2265 END IF
2266# endif
2267 IF (.not.got_var(iduvel).and.aout(iduvel,ng)) THEN
2268 IF (master) WRITE (stdout,60) trim(vname(1,iduvel)), &
2269 & trim(ncname)
2270 exit_flag=3
2271 RETURN
2272 END IF
2273 IF (.not.got_var(idvvel).and.aout(idvvel,ng)) THEN
2274 IF (master) WRITE (stdout,60) trim(vname(1,idvvel)), &
2275 & trim(ncname)
2276 exit_flag=3
2277 RETURN
2278 END IF
2279# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
2280 IF (.not.got_var(idu3dd).and.aout(idu3dd,ng)) THEN
2281 IF (master) WRITE (stdout,60) trim(vname(1,idu3dd)), &
2282 & trim(ncname)
2283 exit_flag=3
2284 RETURN
2285 END IF
2286 IF (.not.got_var(idv3dd).and.aout(idv3dd,ng)) THEN
2287 IF (master) WRITE (stdout,60) trim(vname(1,idv3dd)), &
2288 & trim(ncname)
2289 exit_flag=3
2290 RETURN
2291 END IF
2292# endif
2293 IF (.not.got_var(idu3de).and.aout(idu3de,ng)) THEN
2294 IF (master) WRITE (stdout,60) trim(vname(1,idu3de)), &
2295 & trim(ncname)
2296 exit_flag=3
2297 RETURN
2298 END IF
2299 IF (.not.got_var(idv3dn).and.aout(idv3dn,ng)) THEN
2300 IF (master) WRITE (stdout,60) trim(vname(1,idv3dn)), &
2301 & trim(ncname)
2302 exit_flag=3
2303 RETURN
2304 END IF
2305 IF (.not.got_var(idovel).and.aout(idovel,ng)) THEN
2306 IF (master) WRITE (stdout,60) trim(vname(1,idovel)), &
2307 & trim(ncname)
2308 exit_flag=3
2309 RETURN
2310 END IF
2311 IF (.not.got_var(idwvel).and.aout(idwvel,ng)) THEN
2312 IF (master) WRITE (stdout,60) trim(vname(1,idwvel)), &
2313 & trim(ncname)
2314 exit_flag=3
2315 RETURN
2316 END IF
2317 IF (.not.got_var(iddano).and.aout(iddano,ng)) THEN
2318 IF (master) WRITE (stdout,60) trim(vname(1,iddano)), &
2319 & trim(ncname)
2320 exit_flag=3
2321 RETURN
2322 END IF
2323# ifdef LMD_SKPP
2324 IF (.not.got_var(idhsbl).and.aout(idhsbl,ng)) THEN
2325 IF (master) WRITE (stdout,60) trim(vname(1,idhsbl)), &
2326 & trim(ncname)
2327 exit_flag=3
2328 RETURN
2329 END IF
2330# endif
2331# ifdef LMD_BKPP
2332 IF (.not.got_var(idhbbl).and.aout(idhbbl,ng)) THEN
2333 IF (master) WRITE (stdout,60) trim(vname(1,idhbbl)), &
2334 & trim(ncname)
2335 exit_flag=3
2336 RETURN
2337 END IF
2338# endif
2339# endif
2340 IF (.not.got_var(id2dpv).and.aout(id2dpv,ng)) THEN
2341 IF (master) WRITE (stdout,60) trim(vname(1,id2dpv)), &
2342 & trim(ncname)
2343 exit_flag=3
2344 RETURN
2345 END IF
2346 IF (.not.got_var(id2drv).and.aout(id2drv,ng)) THEN
2347 IF (master) WRITE (stdout,60) trim(vname(1,id2drv)), &
2348 & trim(ncname)
2349 exit_flag=3
2350 RETURN
2351 END IF
2352# ifdef SOLVE3D
2353 IF (.not.got_var(id3dpv).and.aout(id3dpv,ng)) THEN
2354 IF (master) WRITE (stdout,60) trim(vname(1,id3dpv)), &
2355 & trim(ncname)
2356 exit_flag=3
2357 RETURN
2358 END IF
2359 IF (.not.got_var(id3drv).and.aout(id3drv,ng)) THEN
2360 IF (master) WRITE (stdout,60) trim(vname(1,id3drv)), &
2361 & trim(ncname)
2362 exit_flag=3
2363 RETURN
2364 END IF
2365# endif
2366 IF (.not.got_var(idzzav).and.aout(idzzav,ng)) THEN
2367 IF (master) WRITE (stdout,60) trim(vname(1,idzzav)), &
2368 & trim(ncname)
2369 exit_flag=3
2370 RETURN
2371 END IF
2372 IF (.not.got_var(idu2av).and.aout(idu2av,ng)) THEN
2373 IF (master) WRITE (stdout,60) trim(vname(1,idu2av)), &
2374 & trim(ncname)
2375 exit_flag=3
2376 RETURN
2377 END IF
2378 IF (.not.got_var(idv2av).and.aout(idv2av,ng)) THEN
2379 IF (master) WRITE (stdout,60) trim(vname(1,idv2av)), &
2380 & trim(ncname)
2381 exit_flag=3
2382 RETURN
2383 END IF
2384# ifdef SOLVE3D
2385 IF (.not.got_var(idhuav).and.aout(idhuav,ng)) THEN
2386 IF (master) WRITE (stdout,60) trim(vname(1,idhuav)), &
2387 & trim(ncname)
2388 exit_flag=3
2389 RETURN
2390 END IF
2391 IF (.not.got_var(idhvav).and.aout(idhvav,ng)) THEN
2392 IF (master) WRITE (stdout,60) trim(vname(1,idhvav)), &
2393 & trim(ncname)
2394 exit_flag=3
2395 RETURN
2396 END IF
2397 IF (.not.got_var(iduuav).and.aout(iduuav,ng)) THEN
2398 IF (master) WRITE (stdout,60) trim(vname(1,iduuav)), &
2399 & trim(ncname)
2400 exit_flag=3
2401 RETURN
2402 END IF
2403 IF (.not.got_var(iduvav).and.aout(iduvav,ng)) THEN
2404 IF (master) WRITE (stdout,60) trim(vname(1,iduvav)), &
2405 & trim(ncname)
2406 exit_flag=3
2407 RETURN
2408 END IF
2409 IF (.not.got_var(idvvav).and.aout(idvvav,ng)) THEN
2410 IF (master) WRITE (stdout,60) trim(vname(1,idvvav)), &
2411 & trim(ncname)
2412 exit_flag=3
2413 RETURN
2414 END IF
2415# if defined LMD_MIXING || defined MY25_MIXING || defined GLS_MIXING
2416 IF (.not.got_var(idvvis).and.aout(idvvis,ng)) THEN
2417 IF (master) WRITE (stdout,60) trim(vname(1,idvvis)), &
2418 & trim(ncname)
2419 exit_flag=3
2420 RETURN
2421 END IF
2422 IF (.not.got_var(idtdif).and.aout(idtdif,ng)) THEN
2423 IF (master) WRITE (stdout,60) trim(vname(1,idtdif)), &
2424 & trim(ncname)
2425 exit_flag=3
2426 RETURN
2427 END IF
2428# ifdef SALINITY
2429 IF (.not.got_var(idsdif).and.aout(idsdif,ng)) THEN
2430 IF (master) WRITE (stdout,60) trim(vname(1,idsdif)), &
2431 & trim(ncname)
2432 exit_flag=3
2433 RETURN
2434 END IF
2435# endif
2436# endif
2437# if defined BULK_FLUXES || defined ECOSIM || defined ATM_PRESS
2438 IF (.not.got_var(idpair).and.aout(idpair,ng)) THEN
2439 IF (master) WRITE (stdout,60) trim(vname(1,idpair)), &
2440 & trim(ncname)
2441 exit_flag=3
2442 RETURN
2443 END IF
2444# endif
2445# if defined BULK_FLUXES || defined ECOSIM
2446 IF (.not.got_var(iduair).and.aout(iduair,ng)) THEN
2447 IF (master) WRITE (stdout,60) trim(vname(1,iduair)), &
2448 & trim(ncname)
2449 exit_flag=3
2450 RETURN
2451 END IF
2452 IF (.not.got_var(idvair).and.aout(idvair,ng)) THEN
2453 IF (master) WRITE (stdout,60) trim(vname(1,idvair)), &
2454 & trim(ncname)
2455 exit_flag=3
2456 RETURN
2457 END IF
2458 IF (.not.got_var(iduaie).and.aout(iduaie,ng)) THEN
2459 IF (master) WRITE (stdout,60) trim(vname(1,iduaie)), &
2460 & trim(ncname)
2461 exit_flag=3
2462 RETURN
2463 END IF
2464 IF (.not.got_var(idvain).and.aout(idvain,ng)) THEN
2465 IF (master) WRITE (stdout,60) trim(vname(1,idvain)), &
2466 & trim(ncname)
2467 exit_flag=3
2468 RETURN
2469 END IF
2470# endif
2471 IF (.not.got_var(idtsur(itemp)).and.aout(idtsur(itemp),ng)) THEN
2472 IF (master) WRITE (stdout,60) trim(vname(1,idtsur(itemp))), &
2473 & trim(ncname)
2474 exit_flag=3
2475 RETURN
2476 END IF
2477# ifdef SALINITY
2478 IF (.not.got_var(idtsur(isalt)).and.aout(idtsur(isalt),ng)) THEN
2479 IF (master) WRITE (stdout,60) trim(vname(1,idtsur(isalt))), &
2480 & trim(ncname)
2481 exit_flag=3
2482 RETURN
2483 END IF
2484# endif
2485# if defined BULK_FLUXES || defined FRC_COUPLING
2486 IF (.not.got_var(idlhea).and.aout(idlhea,ng)) THEN
2487 IF (master) WRITE (stdout,60) trim(vname(1,idlhea)), &
2488 & trim(ncname)
2489 exit_flag=3
2490 RETURN
2491 END IF
2492 IF (.not.got_var(idshea).and.aout(idshea,ng)) THEN
2493 IF (master) WRITE (stdout,60) trim(vname(1,idshea)), &
2494 & trim(ncname)
2495 exit_flag=3
2496 RETURN
2497 END IF
2498 IF (.not.got_var(idlrad).and.aout(idlrad,ng)) THEN
2499 IF (master) WRITE (stdout,60) trim(vname(1,idlrad)), &
2500 & trim(ncname)
2501 exit_flag=3
2502 RETURN
2503 END IF
2504# endif
2505# ifdef BULK_FLUXES
2506 IF (.not.got_var(idtair).and.aout(idtair,ng)) THEN
2507 IF (master) WRITE (stdout,60) trim(vname(1,idtair)), &
2508 & trim(ncname)
2509 exit_flag=3
2510 RETURN
2511 END IF
2512# ifdef EMINUSP
2513 IF (.not.got_var(idevap).and.aout(idevap,ng)) THEN
2514 IF (master) WRITE (stdout,60) trim(vname(1,idevap)), &
2515 & trim(ncname)
2516 exit_flag=3
2517 RETURN
2518 END IF
2519 IF (.not.got_var(idrain).and.aout(idrain,ng)) THEN
2520 IF (master) WRITE (stdout,60) trim(vname(1,idrain)), &
2521 & trim(ncname)
2522 exit_flag=3
2523 RETURN
2524 END IF
2525# endif
2526# endif
2527# ifdef SHORTWAVE
2528 IF (.not.got_var(idsrad).and.aout(idsrad,ng)) THEN
2529 IF (master) WRITE (stdout,60) trim(vname(1,idsrad)), &
2530 & trim(ncname)
2531 exit_flag=3
2532 RETURN
2533 END IF
2534# endif
2535# endif
2536 IF (.not.got_var(idusms).and.aout(idusms,ng)) THEN
2537 IF (master) WRITE (stdout,60) trim(vname(1,idusms)), &
2538 & trim(ncname)
2539 exit_flag=3
2540 RETURN
2541 END IF
2542 IF (.not.got_var(idvsms).and.aout(idvsms,ng)) THEN
2543 IF (master) WRITE (stdout,60) trim(vname(1,idvsms)), &
2544 & trim(ncname)
2545 exit_flag=3
2546 RETURN
2547 END IF
2548 IF (.not.got_var(idubms).and.aout(idubms,ng)) THEN
2549 IF (master) WRITE (stdout,60) trim(vname(1,idubms)), &
2550 & trim(ncname)
2551 exit_flag=3
2552 RETURN
2553 END IF
2554 IF (.not.got_var(idvbms).and.aout(idvbms,ng)) THEN
2555 IF (master) WRITE (stdout,60) trim(vname(1,idvbms)), &
2556 & trim(ncname)
2557 exit_flag=3
2558 RETURN
2559 END IF
2560# ifdef SOLVE3D
2561 DO itrc=1,nt(ng)
2562 IF (.not.got_var(idtvar(itrc)).and.aout(idtvar(itrc),ng)) THEN
2563 IF (master) WRITE (stdout,60) trim(vname(1,idtvar(itrc))), &
2564 & trim(ncname)
2565 exit_flag=3
2566 RETURN
2567 END IF
2568 END DO
2569 DO itrc=1,nat
2570 IF (.not.got_var(ihutav(itrc)).and.aout(ihutav(itrc),ng)) THEN
2571 IF (master) WRITE (stdout,60) trim(vname(1,ihutav(itrc))), &
2572 & trim(ncname)
2573 exit_flag=3
2574 RETURN
2575 END IF
2576 IF (.not.got_var(ihvtav(itrc)).and.aout(ihvtav(itrc),ng)) THEN
2577 IF (master) WRITE (stdout,60) trim(vname(1,ihvtav(itrc))), &
2578 & trim(ncname)
2579 exit_flag=3
2580 RETURN
2581 END IF
2582 IF (.not.got_var(idutav(itrc)).and.aout(idutav(itrc),ng)) THEN
2583 IF (master) WRITE (stdout,60) trim(vname(1,idutav(itrc))), &
2584 & trim(ncname)
2585 exit_flag=3
2586 RETURN
2587 END IF
2588 IF (.not.got_var(idvtav(itrc)).and.aout(idvtav(itrc),ng)) THEN
2589 IF (master) WRITE (stdout,60) trim(vname(1,idvtav(itrc))), &
2590 & trim(ncname)
2591 exit_flag=3
2592 RETURN
2593 END IF
2594 IF (.not.got_var(idttav(itrc)).and.aout(idttav(itrc),ng)) THEN
2595 IF (master) WRITE (stdout,60) trim(vname(1,idttav(itrc))), &
2596 & trim(ncname)
2597 exit_flag=3
2598 RETURN
2599 END IF
2600 END DO
2601# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
2602 DO itrc=1,nat
2603 IF (.not.got_var(idtrcd(itrc)).and.aout(idtrcd(itrc),ng)) THEN
2604 IF (master) WRITE (stdout,60) trim(vname(1,idtrcd(itrc))), &
2605 & trim(ncname)
2606 exit_flag=3
2607 RETURN
2608 END IF
2609 END DO
2610# endif
2611# endif
2612
2613# if (defined BBL_MODEL || defined WAVES_OUTPUT) && defined SOLVE3D
2614!
2615! Scan bottom boundary layer model and waves variables from input
2616! NetCDF and activate switches for time-averaged variables. Get
2617! variable IDs.
2618!
2619 CALL bbl_def_nf90 (ng, model, ldef, aout, avg)
2620 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2621# endif
2622
2623# if defined ICE_MODEL && defined SOLVE3D
2624!
2625! Scan sea-ice variables from input NetCDF and activate switches for
2626! time-averaged variables. Get variable IDs.
2627!
2628 CALL ice_def_nf90 (ng, model, ldef, aout, avg)
2629# endif
2630
2631# if defined SEDIMENT && defined SOLVE3D
2632!
2633! Scan sediment model variables from input NetCDF and activate
2634! switches for time-averaged variables. Get variable IDs.
2635!
2636 CALL sediment_def_nf90 (ng, model, ldef, aout, avg)
2637 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2638# endif
2639
2640# if defined WEC_VF && defined SOLVE3D
2641!
2642! Scan Waves Effect on Currents variables from input NetCDF and
2643! activate switches for time-averaged variables. Get variable IDs.
2644!
2645 CALL wec_def_nf90 (ng, model, ldef, aout, avg)
2646 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2647# endif
2648!
2649! Set unlimited time record dimension to the appropriate value.
2650!
2651 IF (nrst(ng).eq.navg(ng)) THEN
2652 IF (ndefavg(ng).gt.0) THEN
2653 avg(ng)%Rindex=((ntstart(ng)-1)- &
2654 & ndefavg(ng)*((ntstart(ng)-1)/ndefavg(ng)))/ &
2655 & navg(ng)
2656 ELSE
2657 avg(ng)%Rindex=(ntstart(ng)-1)/navg(ng)
2658 END IF
2659 ELSE
2660 avg(ng)%Rindex=rec_size
2661 END IF
2662 END IF query
2663!
2664! Set initial average time. Notice that the value is offset by half
2665! nAVG*dt so there is not a special case when computing its value
2666
2667# ifdef ADJOINT
2668! in "ad_set_avg".
2669!
2670 avgtime(ng)=time(ng)+0.5_r8*real(navg(ng),r8)*dt(ng)
2671# else
2672! in "set_avg".
2673!
2674 IF (ntsavg(ng).eq.1) THEN
2675 avgtime(ng)=time(ng)-0.5_r8*real(navg(ng),r8)*dt(ng)
2676 ELSE
2677 avgtime(ng)=time(ng)+real(ntsavg(ng),r8)*dt(ng)- &
2678 & 0.5_r8*real(navg(ng),r8)*dt(ng)
2679 END IF
2680# endif
2681!
2682 10 FORMAT (2x,'DEF_AVG_NF90 - creating average file,',t56, &
2683 & 'Grid ',i2.2,': ',a)
2684 20 FORMAT (2x,'DEF_AVG_NF90 - inquiring average file,',t56, &
2685 & 'Grid ',i2.2,': ',a)
2686 30 FORMAT (/,' DEF_AVG_NF90 - unable to create averages NetCDF', &
2687 & ' file: ',a)
2688 40 FORMAT (1pe11.4,1x,'millimeter')
2689 50 FORMAT (/,' DEF_AVG_NF90 - unable to open averages NetCDF', &
2690 & ' file: ',a)
2691 60 FORMAT (/,' DEF_AVG_NF90 - unable to find variable: ',a,2x, &
2692 & ' in averages NetCDF file: ',a)
2693!
2694 RETURN
2695 END SUBROUTINE def_avg_nf90
2696
2697# if defined PIO_LIB && defined DISTRIBUTE
2698!
2699!***********************************************************************
2700 SUBROUTINE def_avg_pio (ng, model, ldef)
2701!***********************************************************************
2702!
2703 USE mod_pio_netcdf
2704!
2705! Imported variable declarations.
2706!
2707 integer, intent(in) :: ng, model
2708!
2709 logical, intent(in) :: ldef
2710!
2711! Local variable declarations.
2712!
2713 logical :: got_var(nv)
2714!
2715 integer, parameter :: natt = 25
2716
2717 integer :: i, ifield, itrc, j, nvd3, nvd4
2718# if defined WRITE_WATER && defined MASKING
2719 integer :: xy_pdim, xyz_pdim
2720# endif
2721 integer :: recdim, status
2722
2723 integer :: dimids(ndimid)
2724 integer :: p2dgrd(3), t2dgrd(3), u2dgrd(3), v2dgrd(3)
2725
2726# ifdef SOLVE3D
2727# ifdef SEDIMENT
2728 integer :: b3dgrd(4)
2729# endif
2730 integer :: p3dgrd(4), t3dgrd(4), u3dgrd(4), v3dgrd(4), w3dgrd(4)
2731# endif
2732!
2733 real(r8) :: aval(6)
2734!
2735# ifdef ADJOINT
2736 character (len=21) :: prefix
2737# else
2738 character (len=13) :: prefix
2739# endif
2740 character (len=256) :: ncname
2741 character (len=MaxLen) :: vinfo(natt)
2742
2743 character (len=*), parameter :: myfile = &
2744 & __FILE__//", def_avg_pio"
2745!
2746 sourcefile=myfile
2747!
2748!-----------------------------------------------------------------------
2749! Set and report file name.
2750!-----------------------------------------------------------------------
2751!
2752 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2753 ncname=avg(ng)%name
2754!
2755 IF (master) THEN
2756 IF (ldef) THEN
2757 WRITE (stdout,10) ng, trim(ncname)
2758 ELSE
2759 WRITE (stdout,20) ng, trim(ncname)
2760 END IF
2761 END IF
2762!
2763!=======================================================================
2764! Create a new averages file.
2765!=======================================================================
2766!
2767 define : IF (ldef) THEN
2768 CALL pio_netcdf_create (ng, model, trim(ncname), &
2769 & avg(ng)%pioFile)
2770 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
2771 IF (master) WRITE (stdout,30) trim(ncname)
2772 RETURN
2773 END IF
2774!
2775!-----------------------------------------------------------------------
2776! Define file dimensions.
2777!-----------------------------------------------------------------------
2778!
2779 dimids=0
2780!
2781 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xi_rho', &
2782 & iobounds(ng)%xi_rho, dimids( 1))
2783 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2784
2785 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xi_u', &
2786 & iobounds(ng)%xi_u, dimids( 2))
2787 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2788
2789 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xi_v', &
2790 & iobounds(ng)%xi_v, dimids( 3))
2791 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2792
2793 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xi_psi', &
2794 & iobounds(ng)%xi_psi, dimids( 4))
2795 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2796
2797 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'eta_rho', &
2798 & iobounds(ng)%eta_rho, dimids( 5))
2799 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2800
2801 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'eta_u', &
2802 & iobounds(ng)%eta_u, dimids( 6))
2803 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2804
2805 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'eta_v', &
2806 & iobounds(ng)%eta_v, dimids( 7))
2807 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2808
2809 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'eta_psi', &
2810 & iobounds(ng)%eta_psi, dimids( 8))
2811 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2812
2813# if defined WRITE_WATER && defined MASKING
2814 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xy_rho', &
2815 & iobounds(ng)%xy_rho, dimids(17))
2816 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2817
2818 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xy_u', &
2819 & iobounds(ng)%xy_u, dimids(18))
2820 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2821
2822 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xy_v', &
2823 & iobounds(ng)%xy_v, dimids(19))
2824 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2825
2826 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xy_psi', &
2827 & iobounds(ng)%xy_psi, xy_pdim)
2828 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2829# endif
2830
2831# ifdef SOLVE3D
2832# if defined WRITE_WATER && defined MASKING
2833 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xyz_rho', &
2834 & iobounds(ng)%xy_rho*n(ng), dimids(20))
2835 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2836
2837 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xyz_u', &
2838 & iobounds(ng)%xy_u*n(ng), dimids(21))
2839 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2840
2841 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xyz_v', &
2842 & iobounds(ng)%xy_v*n(ng), dimids(22))
2843 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2844
2845 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xyz_w', &
2846 & iobounds(ng)%xy_rho*(n(ng)+1), dimids(23))
2847 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2848
2849 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xyz_psi', &
2850 & iobounds(ng)%xy_psi*n(ng), xyz_pdim)
2851 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2852# endif
2853
2854 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 's_rho', &
2855 & n(ng), dimids( 9))
2856 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2857
2858 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 's_w', &
2859 & n(ng)+1, dimids(10))
2860 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2861
2862 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'tracer', &
2863 & nt(ng), dimids(11))
2864 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2865
2866# ifdef SEDIMENT
2867 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'NST', &
2868 & nst, dimids(32))
2869 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2870
2871 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'Nbed', &
2872 & nbed, dimids(16))
2873 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2874
2875# if defined WRITE_WATER && defined MASKING
2876 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'xybed', &
2877 & iobounds(ng)%xy_rho*nbed, dimids(24))
2878 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2879# endif
2880# endif
2881
2882# ifdef ECOSIM
2883 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'Nbands', &
2884 & nbands, dimids(33))
2885 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2886
2887 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'Nphy', &
2888 & nphy, dimids(25))
2889 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2890
2891 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'Nbac', &
2892 & nbac, dimids(26))
2893 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2894
2895 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'Ndom', &
2896 & ndom, dimids(27))
2897 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2898
2899 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'Nfec', &
2900 & nfec, dimids(28))
2901 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2902# endif
2903# endif
2904
2905 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'boundary', &
2906 & 4, dimids(14))
2907 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2908
2909# ifdef FOUR_DVAR
2910 status=def_dim(ng, model, avg(ng)%pioFile, ncname, 'Nstate', &
2911 & nstatevar(ng), dimids(29))
2912 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2913# endif
2914
2915 status=def_dim(ng, model, avg(ng)%pioFile, ncname, &
2916 & trim(adjustl(vname(5,idtime))), &
2917 & pio_unlimited, dimids(12))
2918 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2919
2920 recdim=dimids(12)
2921!
2922! Set number of dimensions for output variables.
2923!
2924# if defined WRITE_WATER && defined MASKING
2925 nvd3=2
2926 nvd4=2
2927# else
2928 nvd3=3
2929 nvd4=4
2930# endif
2931!
2932! Define dimension vectors for staggered tracer type variables.
2933!
2934# if defined WRITE_WATER && defined MASKING
2935 t2dgrd(1)=dimids(17)
2936 t2dgrd(2)=dimids(12)
2937# ifdef SOLVE3D
2938 t3dgrd(1)=dimids(20)
2939 t3dgrd(2)=dimids(12)
2940# endif
2941# else
2942 t2dgrd(1)=dimids( 1)
2943 t2dgrd(2)=dimids( 5)
2944 t2dgrd(3)=dimids(12)
2945# ifdef SOLVE3D
2946 t3dgrd(1)=dimids( 1)
2947 t3dgrd(2)=dimids( 5)
2948 t3dgrd(3)=dimids( 9)
2949 t3dgrd(4)=dimids(12)
2950# endif
2951# endif
2952!
2953! Define dimension vectors for staggered u-momentum type variables.
2954!
2955# if defined WRITE_WATER && defined MASKING
2956 u2dgrd(1)=dimids(18)
2957 u2dgrd(2)=dimids(12)
2958# ifdef SOLVE3D
2959 u3dgrd(1)=dimids(21)
2960 u3dgrd(2)=dimids(12)
2961# endif
2962# else
2963 u2dgrd(1)=dimids( 2)
2964 u2dgrd(2)=dimids( 6)
2965 u2dgrd(3)=dimids(12)
2966# ifdef SOLVE3D
2967 u3dgrd(1)=dimids( 2)
2968 u3dgrd(2)=dimids( 6)
2969 u3dgrd(3)=dimids( 9)
2970 u3dgrd(4)=dimids(12)
2971# endif
2972# endif
2973!
2974! Define dimension vectors for staggered v-momentum type variables.
2975!
2976# if defined WRITE_WATER && defined MASKING
2977 v2dgrd(1)=dimids(19)
2978 v2dgrd(2)=dimids(12)
2979# ifdef SOLVE3D
2980 v3dgrd(1)=dimids(22)
2981 v3dgrd(2)=dimids(12)
2982# endif
2983# else
2984 v2dgrd(1)=dimids( 3)
2985 v2dgrd(2)=dimids( 7)
2986 v2dgrd(3)=dimids(12)
2987# ifdef SOLVE3D
2988 v3dgrd(1)=dimids( 3)
2989 v3dgrd(2)=dimids( 7)
2990 v3dgrd(3)=dimids( 9)
2991 v3dgrd(4)=dimids(12)
2992# endif
2993# endif
2994!
2995! Define dimension vectors for staggered variables at PSI-points.
2996!
2997# if defined WRITE_WATER && defined MASKING
2998 p2dgrd(1)=xy_pdim
2999 p2dgrd(2)=dimids(12)
3000# ifdef SOLVE3D
3001 p3dgrd(1)=xyz_pdim
3002 p3dgrd(2)=dimids(12)
3003# endif
3004# else
3005 p2dgrd(1)=dimids( 4)
3006 p2dgrd(2)=dimids( 8)
3007 p2dgrd(3)=dimids(12)
3008# ifdef SOLVE3D
3009 p3dgrd(1)=dimids( 4)
3010 p3dgrd(2)=dimids( 8)
3011 p3dgrd(3)=dimids( 9)
3012 p3dgrd(4)=dimids(12)
3013# endif
3014# endif
3015# ifdef SOLVE3D
3016!
3017! Define dimension vector for staggered w-momentum type variables.
3018!
3019# if defined WRITE_WATER && defined MASKING
3020 w3dgrd(1)=dimids(23)
3021 w3dgrd(2)=dimids(12)
3022# else
3023 w3dgrd(1)=dimids( 1)
3024 w3dgrd(2)=dimids( 5)
3025 w3dgrd(3)=dimids(10)
3026 w3dgrd(4)=dimids(12)
3027# endif
3028# ifdef SEDIMENT
3029!
3030! Define dimension vector for sediment bed layer type variables.
3031!
3032# if defined WRITE_WATER && defined MASKING
3033 b3dgrd(1)=dimids(24)
3034 b3dgrd(2)=dimids(12)
3035# else
3036 b3dgrd(1)=dimids( 1)
3037 b3dgrd(2)=dimids( 5)
3038 b3dgrd(3)=dimids(16)
3039 b3dgrd(4)=dimids(12)
3040# endif
3041# endif
3042# endif
3043!
3044! Initialize unlimited time record dimension.
3045!
3046 avg(ng)%Rindex=0
3047!
3048! Initialize local information variable arrays.
3049!
3050 DO i=1,natt
3051 DO j=1,len(vinfo(1))
3052 vinfo(i)(j:j)=' '
3053 END DO
3054 END DO
3055 DO i=1,6
3056 aval(i)=0.0_r8
3057 END DO
3058!
3059! Set long name prefix string.
3060!
3061# ifdef ADJOINT
3062!! Prefix='time-averaged adjoint'
3063 prefix='adjoint'
3064# else
3065!! Prefix='time-averaged'
3066 prefix=char(32) ! blank space
3067# endif
3068!
3069!-----------------------------------------------------------------------
3070! Define time-recordless information variables.
3071!-----------------------------------------------------------------------
3072!
3073 CALL def_info (ng, model, avg(ng)%pioFile, ncname, dimids)
3074 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3075!
3076!-----------------------------------------------------------------------
3077! Define time-varying variables.
3078!-----------------------------------------------------------------------
3079!
3080! Define model time.
3081!
3082 vinfo( 1)=vname(1,idtime)
3083 WRITE (vinfo( 2),'(a,a)') 'averaged ', trim(vname(2,idtime))
3084 WRITE (vinfo( 3),'(a,a)') 'seconds since ', trim(rclock%string)
3085 vinfo( 4)=trim(rclock%calendar)
3086 vinfo(14)=vname(4,idtime)
3087 vinfo(21)=vname(6,idtime)
3088 avg(ng)%pioVar(idtime)%dkind=pio_tout
3089 avg(ng)%pioVar(idtime)%gtype=0
3090!
3091 status=def_var(ng, model, avg(ng)%pioFile, &
3092 & avg(ng)%pioVar(idtime)%vd, &
3093 & pio_tout, 1, (/recdim/), aval, vinfo, ncname, &
3094 & setparaccess = .true.)
3095 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3096!
3097! Define free-surface.
3098!
3099 IF (aout(idfsur,ng)) THEN
3100 vinfo( 1)=vname(1,idfsur)
3101 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idfsur))
3102 vinfo( 3)=vname(3,idfsur)
3103 vinfo(14)=vname(4,idfsur)
3104 vinfo(16)=vname(1,idtime)
3105# if !defined WET_DRY && (defined WRITE_WATER && defined MASKING)
3106 vinfo(20)='mask_rho'
3107# endif
3108 vinfo(21)=vname(6,idfsur)
3109 vinfo(22)='coordinates'
3110 aval(5)=real(iinfo(1,idfsur,ng),r8)
3111 avg(ng)%pioVar(idfsur)%dkind=pio_fout
3112 avg(ng)%pioVar(idfsur)%gtype=r2dvar
3113!
3114 status=def_var(ng, model, avg(ng)%pioFile, &
3115 & avg(ng)%pioVar(idfsur)%vd, &
3116 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
3117 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3118 END IF
3119
3120# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
3121!
3122! Define detided free-surface.
3123!
3124 IF (aout(idfsud,ng)) THEN
3125 vinfo( 1)=vname(1,idfsud)
3126 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idfsud))
3127 vinfo( 3)=vname(3,idfsud)
3128 vinfo(14)=vname(4,idfsud)
3129 vinfo(16)=vname(1,idtime)
3130# if defined WRITE_WATER && defined MASKING
3131 vinfo(20)='mask_rho'
3132# endif
3133 vinfo(21)=vname(6,idfsud)
3134 vinfo(22)='coordinates'
3135 aval(5)=real(iinfo(1,idfsud,ng),r8)
3136 avg(ng)%pioVar(idfsud)%dkind=pio_fout
3137 avg(ng)%pioVar(idfsud)%gtype=r2dvar
3138!
3139 status=def_var(ng, model, avg(ng)%pioFile, &
3140 & avg(ng)%pioVar(idfsud)%vd, &
3141 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
3142 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3143 END IF
3144# endif
3145!
3146! Define 2D momentum in the XI-direction.
3147!
3148 IF (aout(idubar,ng)) THEN
3149 vinfo( 1)=vname(1,idubar)
3150 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idubar))
3151 vinfo( 3)=vname(3,idubar)
3152 vinfo(14)=vname(4,idubar)
3153 vinfo(16)=vname(1,idtime)
3154# if defined WRITE_WATER && defined MASKING
3155 vinfo(20)='mask_u'
3156# endif
3157 vinfo(21)=vname(6,idubar)
3158 vinfo(22)='coordinates'
3159 aval(5)=real(iinfo(1,idubar,ng),r8)
3160 avg(ng)%pioVar(idubar)%dkind=pio_fout
3161 avg(ng)%pioVar(idubar)%gtype=u2dvar
3162!
3163 status=def_var(ng, model, avg(ng)%pioFile, &
3164 & avg(ng)%pioVar(idubar)%vd, &
3165 & pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
3166 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3167 END IF
3168
3169# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
3170!
3171! Define detided 2D momentum in the XI-direction.
3172!
3173 IF (aout(idu2dd,ng)) THEN
3174 vinfo( 1)=vname(1,idu2dd)
3175 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idu2dd))
3176 vinfo( 3)=vname(3,idu2dd)
3177 vinfo(14)=vname(4,idu2dd)
3178 vinfo(16)=vname(1,idtime)
3179# if defined WRITE_WATER && defined MASKING
3180 vinfo(20)='mask_u'
3181# endif
3182 vinfo(21)=vname(6,idu2dd)
3183 vinfo(22)='coordinates'
3184 aval(5)=real(iinfo(1,idu2dd,ng),r8)
3185 avg(ng)%pioVar(idu2dd)%dkind=pio_fout
3186 avg(ng)%pioVar(idu2dd)%gtype=u2dvar
3187!
3188 status=def_var(ng, model, avg(ng)%pioFile, &
3189 & avg(ng)%pioVar(idu2dd)%vd, &
3190 & pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
3191 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3192 END IF
3193# endif
3194!
3195! Define 2D momentum in the ETA-direction.
3196!
3197 IF (aout(idvbar,ng)) THEN
3198 vinfo( 1)=vname(1,idvbar)
3199 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvbar))
3200 vinfo( 3)=vname(3,idvbar)
3201 vinfo(14)=vname(4,idvbar)
3202 vinfo(16)=vname(1,idtime)
3203# if defined WRITE_WATER && defined MASKING
3204 vinfo(20)='mask_v'
3205# endif
3206 vinfo(21)=vname(6,idvbar)
3207 vinfo(22)='coordinates'
3208 aval(5)=real(iinfo(1,idvbar,ng),r8)
3209 avg(ng)%pioVar(idvbar)%dkind=pio_fout
3210 avg(ng)%pioVar(idvbar)%gtype=v2dvar
3211!
3212 status=def_var(ng, model, avg(ng)%pioFile, &
3213 & avg(ng)%pioVar(idvbar)%vd, &
3214 & pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
3215 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3216 END IF
3217
3218# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
3219!
3220! Define detided 2D momentum in the ETA-direction.
3221!
3222 IF (aout(idv2dd,ng)) THEN
3223 vinfo( 1)=vname(1,idv2dd)
3224 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idv2dd))
3225 vinfo( 3)=vname(3,idv2dd)
3226 vinfo(14)=vname(4,idv2dd)
3227 vinfo(16)=vname(1,idtime)
3228# if defined WRITE_WATER && defined MASKING
3229 vinfo(20)='mask_v'
3230# endif
3231 vinfo(21)=vname(6,idv2dd)
3232 vinfo(22)='coordinates'
3233 aval(5)=real(iinfo(1,idv2dd,ng),r8)
3234 avg(ng)%pioVar(idv2dd)%dkind=pio_fout
3235 avg(ng)%pioVar(idv2dd)%gtype=v2dvar
3236!
3237 status=def_var(ng, model, avg(ng)%pioFile, &
3238 & avg(ng)%pioVar(idv2dd)%vd, &
3239 & pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
3240 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3241 END IF
3242# endif
3243!
3244! Define 2D Eastward momentum component at RHO-points.
3245!
3246 IF (aout(idu2de,ng)) THEN
3247 vinfo( 1)=vname(1,idu2de)
3248 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idu2de))
3249 vinfo( 3)=vname(3,idu2de)
3250 vinfo(14)=vname(4,idu2de)
3251 vinfo(16)=vname(1,idtime)
3252# if defined WRITE_WATER && defined MASKING
3253 vinfo(20)='mask_rho'
3254# endif
3255 vinfo(21)=vname(6,idu2de)
3256 vinfo(22)='coordinates'
3257 aval(5)=real(iinfo(1,idu2de,ng),r8)
3258 avg(ng)%pioVar(idu2de)%dkind=pio_fout
3259 avg(ng)%pioVar(idu2de)%gtype=r2dvar
3260!
3261 status=def_var(ng, model, avg(ng)%pioFile, &
3262 & avg(ng)%pioVar(idu2de)%vd, &
3263 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
3264 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3265 END IF
3266!
3267! Define 2D Northward momentum component at RHO-points.
3268!
3269 IF (aout(idv2dn,ng)) THEN
3270 vinfo( 1)=vname(1,idv2dn)
3271 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idv2dn))
3272 vinfo( 3)=vname(3,idv2dn)
3273 vinfo(14)=vname(4,idv2dn)
3274 vinfo(16)=vname(1,idtime)
3275# if defined WRITE_WATER && defined MASKING
3276 vinfo(20)='mask_rho'
3277# endif
3278 vinfo(21)=vname(6,idv2dn)
3279 vinfo(22)='coordinates'
3280 aval(5)=real(iinfo(1,idv2dn,ng),r8)
3281 avg(ng)%pioVar(idv2dn)%dkind=pio_fout
3282 avg(ng)%pioVar(idv2dn)%gtype=r2dvar
3283!
3284 status=def_var(ng, model, avg(ng)%pioFile, &
3285 & avg(ng)%pioVar(idv2dn)%vd, &
3286 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
3287 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3288 END IF
3289
3290# ifdef SOLVE3D
3291# ifdef FORWARD_WRITE
3292!
3293! Define time-averaged mass fluxes for 3D momentum coupling.
3294!
3295 IF (aout(idufx1,ng)) THEN
3296 vinfo( 1)=vname(1,idufx1)
3297 vinfo( 2)=vname(2,idufx1)
3298 vinfo( 3)=vname(3,idufx1)
3299 vinfo(14)=vname(4,idufx1)
3300 vinfo(16)=vname(1,idtime)
3301# if defined WRITE_WATER && defined MASKING
3302 vinfo(20)='mask_u'
3303# endif
3304 vinfo(21)=vname(6,idufx1)
3305 vinfo(22)='coordinates'
3306 aval(5)=real(u2dvar,r8)
3307 avg(ng)%pioVar(idufx1)%dkind=pio_fout
3308 avg(ng)%pioVar(idufx1)%gtype=u2dvar
3309!
3310 status=def_var(ng, model, avg(ng)%pioFile, &
3311 & avg(ng)%pioVar(idufx1)%vd, &
3312 & pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
3313 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3314 END IF
3315!
3316 IF (aout(idufx2,ng)) THEN
3317 vinfo( 1)=vname(1,idufx2)
3318 vinfo( 2)=vname(2,idufx2)
3319 vinfo( 3)=vname(3,idufx2)
3320 vinfo(14)=vname(4,idufx2)
3321 vinfo(16)=vname(1,idtime)
3322# if defined WRITE_WATER && defined MASKING
3323 vinfo(20)='mask_u'
3324# endif
3325 vinfo(21)=vname(6,idufx2)
3326 vinfo(22)='coordinates'
3327 aval(5)=real(u2dvar,r8)
3328 avg(ng)%pioVar(idufx2)%dkind=pio_fout
3329 avg(ng)%pioVar(idufx2)%gtype=u2dvar
3330!
3331 status=def_var(ng, model, avg(ng)%pioFile, &
3332 & avg(ng)%pioVar(idufx2)%vd, &
3333 & pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
3334 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3335 END IF
3336!
3337 IF (aout(idvfx1,ng)) THEN
3338 vinfo( 1)=vname(1,idvfx1)
3339 vinfo( 2)=vname(2,idvfx1)
3340 vinfo( 3)=vname(3,idvfx1)
3341 vinfo(14)=vname(4,idvfx1)
3342 vinfo(16)=vname(1,idtime)
3343# if defined WRITE_WATER && defined MASKING
3344 vinfo(20)='mask_v'
3345# endif
3346 vinfo(21)=vname(6,idvfx1)
3347 vinfo(22)='coordinates'
3348 aval(5)=real(v2dvar,r8)
3349 avg(ng)%pioVar(idvfx1)%dkind=pio_fout
3350 avg(ng)%pioVar(idvfx1)%gtype=v2dvar
3351!
3352 status=def_var(ng, model, avg(ng)%pioFile, &
3353 & avg(ng)%pioVar(idvfx1)%vd, &
3354 & pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
3355 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3356 END IF
3357!
3358 IF (aout(idvfx2,ng)) THEN
3359 vinfo( 1)=vname(1,idvfx2)
3360 vinfo( 2)=vname(2,idvfx2)
3361 vinfo( 3)=vname(3,idvfx2)
3362 vinfo(14)=vname(4,idvfx2)
3363 vinfo(16)=vname(1,idtime)
3364# if defined WRITE_WATER && defined MASKING
3365 vinfo(20)='mask_v'
3366# endif
3367 vinfo(21)=vname(6,idvfx2)
3368 vinfo(22)='coordinates'
3369 aval(5)=real(v2dvar,r8)
3370 avg(ng)%pioVar(idvfx2)%dkind=pio_fout
3371 avg(ng)%pioVar(idvfx2)%gtype=v2dvar
3372!
3373 status=def_var(ng, model, avg(ng)%pioFile, &
3374 & avg(ng)%pioVar(idvfx2)%vd, &
3375 & pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
3376 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3377 END IF
3378# endif
3379!
3380! Define 3D momentum component in the XI-direction.
3381!
3382 IF (aout(iduvel,ng)) THEN
3383 vinfo( 1)=vname(1,iduvel)
3384 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,iduvel))
3385 vinfo( 3)=vname(3,iduvel)
3386 vinfo(14)=vname(4,iduvel)
3387 vinfo(16)=vname(1,idtime)
3388# if defined WRITE_WATER && defined MASKING
3389 vinfo(20)='mask_u'
3390# endif
3391 vinfo(21)=vname(6,iduvel)
3392 vinfo(22)='coordinates'
3393 aval(5)=real(iinfo(1,iduvel,ng),r8)
3394 avg(ng)%pioVar(iduvel)%dkind=pio_fout
3395 avg(ng)%pioVar(iduvel)%gtype=u3dvar
3396!
3397 status=def_var(ng, model, avg(ng)%pioFile, &
3398 & avg(ng)%pioVar(iduvel)%vd, &
3399 & pio_fout, nvd4, u3dgrd, aval, vinfo, ncname)
3400 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3401 END IF
3402
3403# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
3404!
3405! Define detided 3D momentum component in the XI-direction.
3406!
3407 IF (aout(idu3dd,ng)) THEN
3408 vinfo( 1)=vname(1,idu3dd)
3409 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idu3dd))
3410 vinfo( 3)=vname(3,idu3dd)
3411 vinfo(14)=vname(4,idu3dd)
3412 vinfo(16)=vname(1,idtime)
3413# if defined WRITE_WATER && defined MASKING
3414 vinfo(20)='mask_u'
3415# endif
3416 vinfo(21)=vname(6,idu3dd)
3417 vinfo(22)='coordinates'
3418 aval(5)=real(iinfo(1,idu3dd,ng),r8)
3419 avg(ng)%pioVar(idu3dd)%dkind=pio_fout
3420 avg(ng)%pioVar(idu3dd)%gtype=u3dvar
3421!
3422 status=def_var(ng, model, avg(ng)%pioFile, &
3423 & avg(ng)%pioVar(idu3dd)%vd, &
3424 & pio_fout, nvd4, u3dgrd, aval, vinfo, ncname)
3425 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3426 END IF
3427# endif
3428!
3429! Define 3D momentum component in the ETA-direction.
3430!
3431 IF (aout(idvvel,ng)) THEN
3432 vinfo( 1)=vname(1,idvvel)
3433 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvvel))
3434 vinfo( 3)=vname(3,idvvel)
3435 vinfo(14)=vname(4,idvvel)
3436 vinfo(16)=vname(1,idtime)
3437# if defined WRITE_WATER && defined MASKING
3438 vinfo(20)='mask_v'
3439# endif
3440 vinfo(21)=vname(6,idvvel)
3441 vinfo(22)='coordinates'
3442 aval(5)=real(iinfo(1,idvvel,ng),r8)
3443 avg(ng)%pioVar(idvvel)%dkind=pio_fout
3444 avg(ng)%pioVar(idvvel)%gtype=v3dvar
3445!
3446 status=def_var(ng, model, avg(ng)%pioFile, &
3447 & avg(ng)%pioVar(idvvel)%vd, &
3448 & pio_fout, nvd4, v3dgrd, aval, vinfo, ncname)
3449 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3450 END IF
3451
3452# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
3453!
3454! Define detided 3D momentum component in the ETA-direction.
3455!
3456 IF (aout(idv3dd,ng)) THEN
3457 vinfo( 1)=vname(1,idv3dd)
3458 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idv3dd))
3459 vinfo( 3)=vname(3,idv3dd)
3460 vinfo(14)=vname(4,idv3dd)
3461 vinfo(16)=vname(1,idtime)
3462# if defined WRITE_WATER && defined MASKING
3463 vinfo(20)='mask_v'
3464# endif
3465 vinfo(21)=vname(6,idv3dd)
3466 vinfo(22)='coordinates'
3467 aval(5)=real(iinfo(1,idv3dd,ng),r8)
3468 avg(ng)%pioVar(idv3dd)%dkind=pio_fout
3469 avg(ng)%pioVar(idv3dd)%gtype=v3dvar
3470!
3471 status=def_var(ng, model, avg(ng)%pioFile, &
3472 & avg(ng)%pioVar(idv3dd)%vd, &
3473 & pio_fout, nvd4, v3dgrd, aval, vinfo, ncname)
3474 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3475 END IF
3476# endif
3477!
3478! Define 3D Eastward momentum component at RHO-points.
3479!
3480 IF (aout(idu3de,ng)) THEN
3481 vinfo( 1)=vname(1,idu3de)
3482 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idu3de))
3483 vinfo( 3)=vname(3,idu3de)
3484 vinfo(14)=vname(4,idu3de)
3485 vinfo(16)=vname(1,idtime)
3486# if defined WRITE_WATER && defined MASKING
3487 vinfo(20)='mask_rho'
3488# endif
3489 vinfo(21)=vname(6,idu3de)
3490 vinfo(22)='coordinates'
3491 aval(5)=real(iinfo(1,idu3de,ng),r8)
3492 avg(ng)%pioVar(idu3de)%dkind=pio_fout
3493 avg(ng)%pioVar(idu3de)%gtype=r3dvar
3494!
3495 status=def_var(ng, model, avg(ng)%pioFile, &
3496 & avg(ng)%pioVar(idu3de)%vd, &
3497 & pio_fout, nvd4, t3dgrd, aval, vinfo, ncname)
3498 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3499 END IF
3500!
3501! Define 3D Northward momentum component at RHO-points.
3502!
3503 IF (aout(idv3dn,ng)) THEN
3504 vinfo( 1)=vname(1,idv3dn)
3505 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idv3dn))
3506 vinfo( 3)=vname(3,idv3dn)
3507 vinfo(14)=vname(4,idv3dn)
3508 vinfo(16)=vname(1,idtime)
3509# if defined WRITE_WATER && defined MASKING
3510 vinfo(20)='mask_rho'
3511# endif
3512 vinfo(21)=vname(6,idv3dn)
3513 vinfo(22)='coordinates'
3514 aval(5)=real(iinfo(1,idv3dn,ng),r8)
3515 avg(ng)%pioVar(idv3dn)%dkind=pio_fout
3516 avg(ng)%pioVar(idv3dn)%gtype=r3dvar
3517!
3518 status=def_var(ng, model, avg(ng)%pioFile, &
3519 & avg(ng)%pioVar(idv3dn)%vd, &
3520 & pio_fout, nvd4, t3dgrd, aval, vinfo, ncname)
3521 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3522 END IF
3523!
3524! Define S-coordinate vertical "omega" momentum component.
3525!
3526 IF (aout(idovel,ng)) THEN
3527 vinfo( 1)=vname(1,idovel)
3528 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idovel))
3529 vinfo( 3)=vname(3,idovel)
3530 vinfo(14)=vname(4,idovel)
3531 vinfo(16)=vname(1,idtime)
3532# if defined WRITE_WATER && defined MASKING
3533 vinfo(20)='mask_rho'
3534# endif
3535 vinfo(21)=vname(6,idovel)
3536 vinfo(22)='coordinates'
3537 aval(5)=real(iinfo(1,idovel,ng),r8)
3538 avg(ng)%pioVar(idovel)%dkind=pio_fout
3539 avg(ng)%pioVar(idovel)%gtype=w3dvar
3540!
3541 status=def_var(ng, model, avg(ng)%pioFile, &
3542 & avg(ng)%pioVar(idovel)%vd, &
3543 & pio_fout, nvd4, w3dgrd, aval, vinfo, ncname)
3544 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3545 END IF
3546!
3547! Define "true" vertical momentum component.
3548!
3549 IF (aout(idwvel,ng)) THEN
3550 vinfo( 1)=vname(1,idwvel)
3551 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idwvel))
3552 vinfo( 3)=vname(3,idwvel)
3553 vinfo(14)=vname(4,idwvel)
3554 vinfo(16)=vname(1,idtime)
3555# if defined WRITE_WATER && defined MASKING
3556 vinfo(20)='mask_rho'
3557# endif
3558 vinfo(21)=vname(6,idwvel)
3559 vinfo(22)='coordinates'
3560 aval(5)=real(iinfo(1,idwvel,ng),r8)
3561 avg(ng)%pioVar(idwvel)%dkind=pio_fout
3562 avg(ng)%pioVar(idwvel)%gtype=w3dvar
3563!
3564 status=def_var(ng, model, avg(ng)%pioFile, &
3565 & avg(ng)%pioVar(idwvel)%vd, &
3566 & pio_fout, nvd4, w3dgrd, aval, vinfo, ncname)
3567 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3568 END IF
3569!
3570! Define tracer type variables.
3571!
3572 DO itrc=1,nt(ng)
3573 IF (aout(idtvar(itrc),ng)) THEN
3574 vinfo( 1)=vname(1,idtvar(itrc))
3575 WRITE (vinfo( 2),'(a,1x,a)') prefix, &
3576 & trim(vname(2,idtvar(itrc)))
3577 vinfo( 3)=vname(3,idtvar(itrc))
3578 vinfo(14)=vname(4,idtvar(itrc))
3579 vinfo(16)=vname(1,idtime)
3580# ifdef SEDIMENT
3581 DO i=1,nst
3582 IF (itrc.eq.idsed(i)) THEN
3583 WRITE (vinfo(19),40) 1000.0_r8*sd50(i,ng)
3584 END IF
3585 END DO
3586# endif
3587# if defined WRITE_WATER && defined MASKING
3588 vinfo(20)='mask_rho'
3589# endif
3590 vinfo(21)=vname(6,idtvar(itrc))
3591 vinfo(22)='coordinates'
3592 aval(5)=real(r3dvar,r8)
3593 avg(ng)%pioTrc(itrc)%dkind=pio_fout
3594 avg(ng)%pioTrc(itrc)%gtype=r3dvar
3595!
3596 status=def_var(ng, model, avg(ng)%pioFile, &
3597 & avg(ng)%pioTrc(itrc)%vd, &
3598 & pio_fout, nvd4, t3dgrd, aval, vinfo, ncname)
3599 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3600 END IF
3601 END DO
3602
3603# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
3604!
3605! Define detided temperature and salinity.
3606!
3607 DO itrc=1,nat
3608 IF (aout(idtrcd(itrc),ng)) THEN
3609 ifield=idtrcd(itrc)
3610 vinfo( 1)=vname(1,ifield)
3611 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,ifield))
3612 vinfo( 3)=vname(3,ifield)
3613 vinfo(14)=vname(4,ifield)
3614 vinfo(16)=vname(1,idtime)
3615# if defined WRITE_WATER && defined MASKING
3616 vinfo(20)='mask_rho'
3617# endif
3618 vinfo(21)=vname(6,ifield)
3619 vinfo(22)='coordinates'
3620 aval(5)=real(r3dvar,r8)
3621 avg(ng)%pioVar(ifield)%dkind=pio_fout
3622 avg(ng)%pioVar(ifield)%gtype=r3dvar
3623!
3624 status=def_var(ng, model, avg(ng)%pioFile, &
3625 & avg(ng)%pioVar(ifield)%vd, &
3626 & pio_fout, nvd4, t3dgrd, aval, vinfo, ncname)
3627 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3628 END IF
3629 END DO
3630# endif
3631!
3632! Define density anomaly.
3633!
3634 IF (aout(iddano,ng)) THEN
3635 vinfo( 1)=vname(1,iddano)
3636 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,iddano))
3637 vinfo( 3)=vname(3,iddano)
3638 vinfo(14)=vname(4,iddano)
3639 vinfo(16)=vname(1,idtime)
3640# if defined WRITE_WATER && defined MASKING
3641 vinfo(20)='mask_rho'
3642# endif
3643 vinfo(21)=vname(6,iddano)
3644 vinfo(22)='coordinates'
3645 aval(5)=real(iinfo(1,iddano,ng),r8)
3646 avg(ng)%pioVar(iddano)%dkind=pio_fout
3647 avg(ng)%pioVar(iddano)%gtype=r3dvar
3648!
3649 status=def_var(ng, model, avg(ng)%pioFile, &
3650 & avg(ng)%pioVar(iddano)%vd, &
3651 & pio_fout, nvd4, t3dgrd, aval, vinfo, ncname)
3652 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3653 END IF
3654
3655# ifdef LMD_SKPP
3656!
3657! Define depth of surface boundary layer.
3658!
3659 IF (aout(idhsbl,ng)) THEN
3660 vinfo( 1)=vname(1,idhsbl)
3661 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idhsbl))
3662 vinfo( 3)=vname(3,idhsbl)
3663 vinfo(14)=vname(4,idhsbl)
3664 vinfo(16)=vname(1,idtime)
3665# if defined WRITE_WATER && defined MASKING
3666 vinfo(20)='mask_rho'
3667# endif
3668 vinfo(21)=vname(6,idhsbl)
3669 vinfo(22)='coordinates'
3670 aval(5)=real(iinfo(1,idhsbl,ng),r8)
3671 avg(ng)%pioVar(idhsbl)%dkind=pio_fout
3672 avg(ng)%pioVar(idhsbl)%gtype=r2dvar
3673!
3674 status=def_var(ng, model, avg(ng)%pioFile, &
3675 & avg(ng)%pioVar(idhsbl)%vd, &
3676 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
3677 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3678 END IF
3679# endif
3680# ifdef LMD_BKPP
3681!
3682! Define depth of bottom boundary layer.
3683!
3684 IF (aout(idhbbl,ng)) THEN
3685 vinfo( 1)=vname(1,idhbbl)
3686 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idhbbl))
3687 vinfo( 3)=vname(3,idhbbl)
3688 vinfo(14)=vname(4,idhbbl)
3689 vinfo(16)=vname(1,idtime)
3690# if defined WRITE_WATER && defined MASKING
3691 vinfo(20)='mask_rho'
3692# endif
3693 vinfo(21)=vname(6,idhbbl)
3694 vinfo(22)='coordinates'
3695 aval(5)=real(iinfo(1,idhbbl,ng),r8)
3696 avg(ng)%pioVar(idhbbl)%dkind=pio_fout
3697 avg(ng)%pioVar(idhbbl)%gtype=r2dvar
3698!
3699 status=def_var(ng, model, avg(ng)%pioFile, &
3700 & avg(ng)%pioVar(idhbbl)%vd, &
3701 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
3702 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3703 END IF
3704# endif
3705# endif
3706!
3707! Define 2D potential vorticity.
3708!
3709 IF (aout(id2dpv,ng)) THEN
3710 vinfo( 1)=vname(1,id2dpv)
3711 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,id2dpv))
3712 vinfo( 3)=vname(3,id2dpv)
3713 vinfo(14)=vname(4,id2dpv)
3714 vinfo(16)=vname(1,idtime)
3715# if defined WRITE_WATER && defined MASKING
3716 vinfo(20)='mask_psi'
3717# endif
3718 vinfo(21)=vname(6,id2dpv)
3719 vinfo(22)='coordinates'
3720 aval(5)=real(p2dvar,r8)
3721 avg(ng)%pioVar(id2dpv)%dkind=pio_fout
3722 avg(ng)%pioVar(id2dpv)%gtype=p2dvar
3723!
3724 status=def_var(ng, model, avg(ng)%pioFile, &
3725 & avg(ng)%pioVar(id2dpv)%vd, &
3726 & pio_fout, nvd3, p2dgrd, aval, vinfo, ncname)
3727 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3728 END IF
3729!
3730! Define 2D relative vorticity.
3731!
3732 IF (aout(id2drv,ng)) THEN
3733 vinfo( 1)=vname(1,id2drv)
3734 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,id2drv))
3735 vinfo( 3)=vname(3,id2drv)
3736 vinfo(14)=vname(4,id2drv)
3737 vinfo(16)=vname(1,idtime)
3738# if defined WRITE_WATER && defined MASKING
3739 vinfo(20)='mask_psi'
3740# endif
3741 vinfo(21)=vname(6,id2drv)
3742 vinfo(22)='coordinates'
3743 aval(5)=real(p2dvar,r8)
3744 avg(ng)%pioVar(id2drv)%dkind=pio_fout
3745 avg(ng)%pioVar(id2drv)%gtype=p2dvar
3746!
3747 status=def_var(ng, model, avg(ng)%pioFile, &
3748 & avg(ng)%pioVar(id2drv)%vd, &
3749 & pio_fout, nvd3, p2dgrd, aval, vinfo, ncname)
3750 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3751 END IF
3752
3753# ifdef SOLVE3D
3754!
3755! Define 3D potential vorticity.
3756!
3757 IF (aout(id3dpv,ng)) THEN
3758 vinfo( 1)=vname(1,id3dpv)
3759 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,id3dpv))
3760 vinfo( 3)=vname(3,id3dpv)
3761 vinfo(14)=vname(4,id3dpv)
3762 vinfo(16)=vname(1,idtime)
3763# if defined WRITE_WATER && defined MASKING
3764 vinfo(20)='mask_psi'
3765# endif
3766 vinfo(21)=vname(6,id3dpv)
3767 vinfo(22)='coordinates'
3768 aval(5)=real(p3dvar,r8)
3769 avg(ng)%pioVar(id3dpv)%dkind=pio_fout
3770 avg(ng)%pioVar(id3dpv)%gtype=p3dvar
3771!
3772 status=def_var(ng, model, avg(ng)%pioFile, &
3773 & avg(ng)%pioVar(id3dpv)%vd, &
3774 & pio_fout, nvd4, p3dgrd, aval, vinfo, ncname)
3775 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3776 END IF
3777!
3778! Define 3D relative vorticity.
3779!
3780 IF (aout(id3drv,ng)) THEN
3781 vinfo( 1)=vname(1,id3drv)
3782 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,id3drv))
3783 vinfo( 3)=vname(3,id3drv)
3784 vinfo(14)=vname(4,id3drv)
3785 vinfo(16)=vname(1,idtime)
3786# if defined WRITE_WATER && defined MASKING
3787 vinfo(20)='mask_psi'
3788# endif
3789 vinfo(21)=vname(6,id3drv)
3790 vinfo(22)='coordinates'
3791 aval(5)=real(p3dvar,r8)
3792 avg(ng)%pioVar(id3drv)%dkind=pio_fout
3793 avg(ng)%pioVar(id3drv)%gtype=p3dvar
3794!
3795 status=def_var(ng, model, avg(ng)%pioFile, &
3796 & avg(ng)%pioVar(id3drv)%vd, &
3797 & pio_fout, nvd4, p3dgrd, aval, vinfo, ncname)
3798 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3799 END IF
3800# endif
3801!
3802! Define quadratic <zeta*zeta> term.
3803!
3804 IF (aout(idzzav,ng)) THEN
3805 vinfo( 1)=vname(1,idzzav)
3806 vinfo( 2)=trim(vname(2,idzzav))
3807 vinfo( 3)=vname(3,idzzav)
3808 vinfo(14)=vname(4,idzzav)
3809 vinfo(16)=vname(1,idtime)
3810# if defined WRITE_WATER && defined MASKING
3811 vinfo(20)='mask_rho'
3812# endif
3813 vinfo(21)=vname(6,idzzav)
3814 vinfo(22)='coordinates'
3815 aval(5)=real(r2dvar,r8)
3816 avg(ng)%pioVar(idzzav)%dkind=pio_fout
3817 avg(ng)%pioVar(idzzav)%gtype=r2dvar
3818!
3819 status=def_var(ng, model, avg(ng)%pioFile, &
3820 & avg(ng)%pioVar(idzzav)%vd, &
3821 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
3822 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3823 END IF
3824!
3825! Define quadratic <ubar*ubar> term.
3826!
3827 IF (aout(idu2av,ng)) THEN
3828 vinfo( 1)=vname(1,idu2av)
3829 vinfo( 2)=trim(vname(2,idu2av))
3830 vinfo( 3)=vname(3,idu2av)
3831 vinfo(14)=vname(4,idu2av)
3832 vinfo(16)=vname(1,idtime)
3833# if defined WRITE_WATER && defined MASKING
3834 vinfo(20)='mask_u'
3835# endif
3836 vinfo(21)=vname(6,idu2av)
3837 vinfo(22)='coordinates'
3838 aval(5)=real(u2dvar,r8)
3839 avg(ng)%pioVar(idu2av)%dkind=pio_fout
3840 avg(ng)%pioVar(idu2av)%gtype=u2dvar
3841!
3842 status=def_var(ng, model, avg(ng)%pioFile, &
3843 & avg(ng)%pioVar(idu2av)%vd, &
3844 & pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
3845 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3846 END IF
3847!
3848! Define quadratic <vbar*vbar> term.
3849!
3850 IF (aout(idv2av,ng)) THEN
3851 vinfo( 1)=vname(1,idv2av)
3852 vinfo( 2)=trim(vname(2,idv2av))
3853 vinfo( 3)=vname(3,idv2av)
3854 vinfo(14)=vname(4,idv2av)
3855 vinfo(16)=vname(1,idtime)
3856# if defined WRITE_WATER && defined MASKING
3857 vinfo(20)='mask_v'
3858# endif
3859 vinfo(21)=vname(6,idv2av)
3860 vinfo(22)='coordinates'
3861 aval(5)=real(v2dvar,r8)
3862 avg(ng)%pioVar(idv2av)%dkind=pio_fout
3863 avg(ng)%pioVar(idv2av)%gtype=v2dvar
3864!
3865 status=def_var(ng, model, avg(ng)%pioFile, &
3866 & avg(ng)%pioVar(idv2av)%vd, &
3867 & pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
3868 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3869 END IF
3870
3871# ifdef SOLVE3D
3872!
3873! Define u-volume flux.
3874!
3875 IF (aout(idhuav,ng)) THEN
3876 vinfo( 1)=vname(1,idhuav)
3877 vinfo( 2)=trim(vname(2,idhuav))
3878 vinfo( 3)=vname(3,idhuav)
3879 vinfo(14)=vname(4,idhuav)
3880 vinfo(16)=vname(1,idtime)
3881# if defined WRITE_WATER && defined MASKING
3882 vinfo(20)='mask_u'
3883# endif
3884 vinfo(21)=vname(6,idhuav)
3885 vinfo(22)='coordinates'
3886 aval(5)=real(u3dvar,r8)
3887 avg(ng)%pioVar(idhuav)%dkind=pio_fout
3888 avg(ng)%pioVar(idhuav)%gtype=u3dvar
3889!
3890 status=def_var(ng, model, avg(ng)%pioFile, &
3891 & avg(ng)%pioVar(idhuav)%vd, &
3892 & pio_fout, nvd4, u3dgrd, aval, vinfo, ncname)
3893 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3894 END IF
3895!
3896! Define v-volume flux.
3897!
3898 IF (aout(idhvav,ng)) THEN
3899 vinfo( 1)=vname(1,idhvav)
3900 vinfo( 2)=trim(vname(2,idhvav))
3901 vinfo( 3)=vname(3,idhvav)
3902 vinfo(14)=vname(4,idhvav)
3903 vinfo(16)=vname(1,idtime)
3904# if defined WRITE_WATER && defined MASKING
3905 vinfo(20)='mask_v'
3906# endif
3907 vinfo(21)=vname(6,idhvav)
3908 vinfo(22)='coordinates'
3909 aval(5)=real(v3dvar,r8)
3910 avg(ng)%pioVar(idhvav)%dkind=pio_fout
3911 avg(ng)%pioVar(idhvav)%gtype=v3dvar
3912!
3913 status=def_var(ng, model, avg(ng)%pioFile, &
3914 & avg(ng)%pioVar(idhvav)%vd, &
3915 & pio_fout, nvd4, v3dgrd, aval, vinfo, ncname)
3916 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3917 END IF
3918!
3919! Define quadratic <u*u> term.
3920!
3921 IF (aout(iduuav,ng)) THEN
3922 vinfo( 1)=vname(1,iduuav)
3923 vinfo( 2)=trim(vname(2,iduuav))
3924 vinfo( 3)=vname(3,iduuav)
3925 vinfo(14)=vname(4,iduuav)
3926 vinfo(16)=vname(1,idtime)
3927# if defined WRITE_WATER && defined MASKING
3928 vinfo(20)='mask_u'
3929# endif
3930 vinfo(21)=vname(6,iduuav)
3931 vinfo(22)='coordinates'
3932 aval(5)=real(u3dvar,r8)
3933 avg(ng)%pioVar(iduuav)%dkind=pio_fout
3934 avg(ng)%pioVar(iduuav)%gtype=u3dvar
3935!
3936 status=def_var(ng, model, avg(ng)%pioFile, &
3937 & avg(ng)%pioVar(iduuav)%vd, &
3938 & pio_fout, nvd4, u3dgrd, aval, vinfo, ncname)
3939 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3940 END IF
3941!
3942! Define quadratic <u*v> term.
3943!
3944 IF (aout(iduvav,ng)) THEN
3945 vinfo( 1)=vname(1,iduvav)
3946 vinfo( 2)=trim(vname(2,iduvav))
3947 vinfo( 3)=vname(3,iduvav)
3948 vinfo(14)=vname(4,iduvav)
3949 vinfo(16)=vname(1,idtime)
3950# if defined WRITE_WATER && defined MASKING
3951 vinfo(20)='mask_rho'
3952# endif
3953 vinfo(21)=vname(6,iduvav)
3954 vinfo(22)='coordinates'
3955 aval(5)=real(r3dvar,r8)
3956 avg(ng)%pioVar(iduvav)%dkind=pio_fout
3957 avg(ng)%pioVar(iduvav)%gtype=r3dvar
3958!
3959 status=def_var(ng, model, avg(ng)%pioFile, &
3960 & avg(ng)%pioVar(iduvav)%vd, &
3961 & pio_fout, nvd4, t3dgrd, aval, vinfo, ncname)
3962 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3963 END IF
3964!
3965! Define quadratic <v*v> term.
3966!
3967 IF (aout(idvvav,ng)) THEN
3968 vinfo( 1)=vname(1,idvvav)
3969 vinfo( 2)=trim(vname(2,idvvav))
3970 vinfo( 3)=vname(3,idvvav)
3971 vinfo(14)=vname(4,idvvav)
3972 vinfo(16)=vname(1,idtime)
3973# if defined WRITE_WATER && defined MASKING
3974 vinfo(20)='mask_v'
3975# endif
3976 vinfo(21)=vname(6,idvvav)
3977 vinfo(22)='coordinates'
3978 aval(5)=real(v3dvar,r8)
3979 avg(ng)%pioVar(idvvav)%dkind=pio_fout
3980 avg(ng)%pioVar(idvvav)%gtype=v3dvar
3981!
3982 status=def_var(ng, model, avg(ng)%pioFile, &
3983 & avg(ng)%pioVar(idvvav)%vd, &
3984 & pio_fout, nvd4, v3dgrd, aval, vinfo, ncname)
3985 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3986 END IF
3987!
3988! Define quadratic <t*t> terms.
3989!
3990 DO itrc=1,nt(ng)
3991 IF (aout(idttav(itrc),ng)) THEN
3992 vinfo( 1)=vname(1,idttav(itrc))
3993 vinfo( 2)=trim(vname(2,idttav(itrc)))
3994 vinfo( 3)=vname(3,idttav(itrc))
3995 vinfo(14)=vname(4,idttav(itrc))
3996 vinfo(16)=vname(1,idtime)
3997# if defined WRITE_WATER && defined MASKING
3998 vinfo(20)='mask_rho'
3999# endif
4000 vinfo(21)=vname(6,idttav(itrc))
4001 vinfo(22)='coordinates'
4002 aval(5)=real(r3dvar,r8)
4003 avg(ng)%pioVar(idttav(itrc))%dkind=pio_fout
4004 avg(ng)%pioVar(idttav(itrc))%gtype=r3dvar
4005!
4006 status=def_var(ng, model, avg(ng)%pioFile, &
4007 & avg(ng)%pioVar(idttav(itrc))%vd, &
4008 & pio_fout, nvd4, t3dgrd, aval, vinfo, ncname)
4009 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4010 END IF
4011 END DO
4012!
4013! Define active tracers volume fluxes.
4014!
4015 DO itrc=1,nt(ng)
4016 IF (aout(ihutav(itrc),ng)) THEN
4017 vinfo( 1)=vname(1,ihutav(itrc))
4018 vinfo( 2)=trim(vname(2,ihutav(itrc)))
4019 vinfo( 3)=vname(3,ihutav(itrc))
4020 vinfo(14)=vname(4,ihutav(itrc))
4021 vinfo(16)=vname(1,idtime)
4022# if defined WRITE_WATER && defined MASKING
4023 vinfo(20)='mask_u'
4024# endif
4025 vinfo(21)=vname(6,ihutav(itrc))
4026 vinfo(22)='coordinates'
4027 aval(5)=real(u3dvar,r8)
4028 avg(ng)%pioVar(ihutav(itrc))%dkind=pio_fout
4029 avg(ng)%pioVar(ihutav(itrc))%gtype=u3dvar
4030!
4031 status=def_var(ng, model, avg(ng)%pioFile, &
4032 & avg(ng)%pioVar(ihutav(itrc))%vd, &
4033 & pio_fout, nvd4, u3dgrd, aval, vinfo, ncname)
4034 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4035 END IF
4036!
4037 IF (aout(ihvtav(itrc),ng)) THEN
4038 vinfo( 1)=vname(1,ihvtav(itrc))
4039 vinfo( 2)=trim(vname(2,ihvtav(itrc)))
4040 vinfo( 3)=vname(3,ihvtav(itrc))
4041 vinfo(14)=vname(4,ihvtav(itrc))
4042 vinfo(16)=vname(1,idtime)
4043# if defined WRITE_WATER && defined MASKING
4044 vinfo(20)='mask_v'
4045# endif
4046 vinfo(21)=vname(6,ihvtav(itrc))
4047 vinfo(22)='coordinates'
4048 aval(5)=real(v3dvar,r8)
4049 avg(ng)%pioVar(ihvtav(itrc))%dkind=pio_fout
4050 avg(ng)%pioVar(ihvtav(itrc))%gtype=v3dvar
4051!
4052 status=def_var(ng, model, avg(ng)%pioFile, &
4053 & avg(ng)%pioVar(ihvtav(itrc))%vd, &
4054 & pio_fout, nvd4, v3dgrd, aval, vinfo, ncname)
4055 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4056 END IF
4057 END DO
4058!
4059! Define quadratic <u*t> and <v*t> terms.
4060!
4061 DO itrc=1,nt(ng)
4062 IF (aout(idutav(itrc),ng)) THEN
4063 vinfo( 1)=vname(1,idutav(itrc))
4064 vinfo( 2)=trim(vname(2,idutav(itrc)))
4065 vinfo( 3)=vname(3,idutav(itrc))
4066 vinfo(14)=vname(4,idutav(itrc))
4067 vinfo(16)=vname(1,idtime)
4068# if defined WRITE_WATER && defined MASKING
4069 vinfo(20)='mask_u'
4070# endif
4071 vinfo(21)=vname(6,idutav(itrc))
4072 vinfo(22)='coordinates'
4073 aval(5)=real(u3dvar,r8)
4074 avg(ng)%pioVar(idutav(itrc))%dkind=pio_fout
4075 avg(ng)%pioVar(idutav(itrc))%gtype=u3dvar
4076!
4077 status=def_var(ng, model, avg(ng)%pioFile, &
4078 & avg(ng)%pioVar(idutav(itrc))%vd, &
4079 & pio_fout, nvd4, u3dgrd, aval, vinfo, ncname)
4080 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4081 END IF
4082!
4083 IF (aout(idvtav(itrc),ng)) THEN
4084 vinfo( 1)=vname(1,idvtav(itrc))
4085 vinfo( 2)=trim(vname(2,idvtav(itrc)))
4086 vinfo( 3)=vname(3,idvtav(itrc))
4087 vinfo(14)=vname(4,idvtav(itrc))
4088 vinfo(16)=vname(1,idtime)
4089# if defined WRITE_WATER && defined MASKING
4090 vinfo(20)='mask_v'
4091# endif
4092 vinfo(21)=vname(6,idvtav(itrc))
4093 vinfo(22)='coordinates'
4094 aval(5)=real(v3dvar,r8)
4095 avg(ng)%pioVar(idvtav(itrc))%dkind=pio_fout
4096 avg(ng)%pioVar(idvtav(itrc))%gtype=v3dvar
4097!
4098 status=def_var(ng, model, avg(ng)%pioFile, &
4099 & avg(ng)%pioVar(idvtav(itrc))%vd, &
4100 & pio_fout, nvd4, v3dgrd, aval, vinfo, ncname)
4101 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4102 END IF
4103 END DO
4104
4105# if defined LMD_MIXING || defined MY25_MIXING || defined GLS_MIXING
4106!
4107! Define vertical viscosity coefficient.
4108!
4109 IF (aout(idvvis,ng)) THEN
4110 vinfo( 1)=vname(1,idvvis)
4111 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvvis))
4112 vinfo( 3)=vname(3,idvvis)
4113 vinfo(14)=vname(4,idvvis)
4114 vinfo(16)=vname(1,idtime)
4115 vinfo(21)=vname(6,idvvis)
4116 vinfo(22)='coordinates'
4117 aval(5)=real(iinfo(1,idvvis,ng),r8)
4118 avg(ng)%pioVar(idvvis)%dkind=pio_fout
4119 avg(ng)%pioVar(idvvis)%gtype=w3dvar
4120!
4121 status=def_var(ng, model, avg(ng)%pioFile, &
4122 & avg(ng)%pioVar(idvvis)%vd, &
4123 & pio_fout, nvd4, w3dgrd, aval, vinfo, ncname, &
4124 & setfillval = .false.)
4125 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4126 END IF
4127!
4128! Define vertical diffusion coefficient for potential temperature.
4129!
4130 IF (aout(idtdif,ng)) THEN
4131 vinfo( 1)=vname(1,idtdif)
4132 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idtdif))
4133 vinfo( 3)=vname(3,idtdif)
4134 vinfo(14)=vname(4,idtdif)
4135 vinfo(16)=vname(1,idtime)
4136 vinfo(21)=vname(6,idtdif)
4137 vinfo(22)='coordinates'
4138 aval(5)=real(iinfo(1,idtdif,ng),r8)
4139 avg(ng)%pioVar(idtdif)%dkind=pio_fout
4140 avg(ng)%pioVar(idtdif)%gtype=w3dvar
4141!
4142 status=def_var(ng, model, avg(ng)%pioFile, &
4143 & avg(ng)%pioVar(idtdif)%vd, &
4144 & pio_fout, nvd4, w3dgrd, aval, vinfo, ncname, &
4145 & setfillval = .false.)
4146 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4147 END IF
4148
4149# ifdef SALINITY
4150!
4151! Define vertical diffusion coefficient for salinity.
4152!
4153 IF (aout(idsdif,ng)) THEN
4154 vinfo( 1)=vname(1,idsdif)
4155 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idsdif))
4156 vinfo( 3)=vname(3,idsdif)
4157 vinfo(14)=vname(4,idsdif)
4158 vinfo(16)=vname(1,idtime)
4159 vinfo(21)=vname(6,idsdif)
4160 vinfo(22)='coordinates'
4161 aval(5)=real(iinfo(1,idsdif,ng),r8)
4162 avg(ng)%pioVar(idsdif)%dkind=pio_fout
4163 avg(ng)%pioVar(idsdif)%gtype=w3dvar
4164!
4165 status=def_var(ng, model, avg(ng)%pioFile, &
4166 & avg(ng)%pioVar(idsdif)%vd, &
4167 & pio_fout, nvd4, w3dgrd, aval, vinfo, ncname, &
4168 & setfillval = .false.)
4169 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4170 END IF
4171# endif
4172# endif
4173# if defined BULK_FLUXES || defined ECOSIM || defined ATM_PRESS
4174!
4175! Define surface air pressure.
4176!
4177 IF (aout(idpair,ng)) THEN
4178 vinfo( 1)=vname(1,idpair)
4179 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idpair))
4180 vinfo( 3)=vname(3,idpair)
4181 vinfo(14)=vname(4,idpair)
4182 vinfo(16)=vname(1,idtime)
4183# if defined WRITE_WATER && defined MASKING
4184 vinfo(20)='mask_rho'
4185# endif
4186 vinfo(21)=vname(6,idpair)
4187 vinfo(22)='coordinates'
4188 aval(5)=real(iinfo(1,idpair,ng),r8)
4189 avg(ng)%pioVar(idpair)%dkind=pio_fout
4190 avg(ng)%pioVar(idpair)%gtype=r2dvar
4191!
4192 status=def_var(ng, model, avg(ng)%pioFile, &
4193 & avg(ng)%pioVar(idpair)%vd, &
4194 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4195 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4196 END IF
4197# endif
4198# if defined BULK_FLUXES
4199!
4200! Define surface air temperature.
4201!
4202 IF (aout(idtair,ng)) THEN
4203 vinfo( 1)=vname(1,idtair)
4204 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idtair))
4205 vinfo( 3)=vname(3,idtair)
4206 vinfo(14)=vname(4,idtair)
4207 vinfo(16)=vname(1,idtime)
4208# if defined WRITE_WATER && defined MASKING
4209 vinfo(20)='mask_rho'
4210# endif
4211 vinfo(21)=vname(6,idtair)
4212 vinfo(22)='coordinates'
4213 aval(5)=real(iinfo(1,idtair,ng),r8)
4214 avg(ng)%pioVar(idtair)%dkind=pio_fout
4215 avg(ng)%pioVar(idtair)%gtype=r2dvar
4216!
4217 status=def_var(ng, model, avg(ng)%pioFile, &
4218 & avg(ng)%pioVar(idtair)%vd, &
4219 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4220 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4221 END IF
4222# endif
4223# if defined BULK_FLUXES || defined ECOSIM
4224!
4225! Define surface winds.
4226!
4227 IF (aout(iduair,ng)) THEN
4228 vinfo( 1)=vname(1,iduair)
4229 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,iduair))
4230 vinfo( 3)=vname(3,iduair)
4231 vinfo(14)=vname(4,iduair)
4232 vinfo(16)=vname(1,idtime)
4233# if defined WRITE_WATER && defined MASKING
4234 vinfo(20)='mask_rho'
4235# endif
4236 vinfo(21)=vname(6,iduair)
4237 vinfo(22)='coordinates'
4238 aval(5)=real(iinfo(1,iduair,ng),r8)
4239 avg(ng)%pioVar(iduair)%dkind=pio_fout
4240 avg(ng)%pioVar(iduair)%gtype=r2dvar
4241!
4242 status=def_var(ng, model, avg(ng)%pioFile, &
4243 & avg(ng)%pioVar(iduair)%vd, &
4244 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4245 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4246 END IF
4247!
4248 IF (aout(idvair,ng)) THEN
4249 vinfo( 1)=vname(1,idvair)
4250 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvair))
4251 vinfo( 3)=vname(3,idvair)
4252 vinfo(14)=vname(4,idvair)
4253 vinfo(16)=vname(1,idtime)
4254# if defined WRITE_WATER && defined MASKING
4255 vinfo(20)='mask_rho'
4256# endif
4257 vinfo(21)=vname(6,idvair)
4258 vinfo(22)='coordinates'
4259 aval(5)=real(iinfo(1,idvair,ng),r8)
4260 avg(ng)%pioVar(idvair)%dkind=pio_fout
4261 avg(ng)%pioVar(idvair)%gtype=r2dvar
4262!
4263 status=def_var(ng, model, avg(ng)%pioFile, &
4264 & avg(ng)%pioVar(idvair)%vd, &
4265 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4266 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4267 END IF
4268!
4269! Define Eastward/Northward surface wind at RHO-points.
4270!
4271 IF (aout(iduaie,ng)) THEN
4272 vinfo( 1)=vname(1,iduaie)
4273 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,iduaie))
4274 vinfo( 3)=vname(3,iduaie)
4275 vinfo(14)=vname(4,iduaie)
4276 vinfo(16)=vname(1,idtime)
4277# if defined WRITE_WATER && defined MASKING
4278 vinfo(20)='mask_rho'
4279# endif
4280 vinfo(21)=vname(6,iduaie)
4281 vinfo(22)='coordinates'
4282 aval(5)=real(iinfo(1,iduaie,ng),r8)
4283 avg(ng)%pioVar(iduaie)%dkind=pio_fout
4284 avg(ng)%pioVar(iduaie)%gtype=r2dvar
4285!
4286 status=def_var(ng, model, avg(ng)%pioFile, &
4287 & avg(ng)%pioVar(iduaie)%vd, &
4288 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4289 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4290 END IF
4291!
4292 IF (aout(idvain,ng)) THEN
4293 vinfo( 1)=vname(1,idvain)
4294 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvain))
4295 vinfo( 3)=vname(3,idvain)
4296 vinfo(14)=vname(4,idvain)
4297 vinfo(16)=vname(1,idtime)
4298# if defined WRITE_WATER && defined MASKING
4299 vinfo(20)='mask_rho'
4300# endif
4301 vinfo(21)=vname(6,idvain)
4302 vinfo(22)='coordinates'
4303 aval(5)=real(iinfo(1,idvain,ng),r8)
4304 avg(ng)%pioVar(idvain)%dkind=pio_fout
4305 avg(ng)%pioVar(idvain)%gtype=r2dvar
4306!
4307 status=def_var(ng, model, avg(ng)%pioFile, &
4308 & avg(ng)%pioVar(idvain)%vd, &
4309 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4310 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4311 END IF
4312# endif
4313!
4314! Define surface net heat flux.
4315!
4316 IF (aout(idtsur(itemp),ng)) THEN
4317 vinfo( 1)=vname(1,idtsur(itemp))
4318 WRITE (vinfo( 2),'(a,1x,a)') prefix, &
4319 & trim(vname(2,idtsur(itemp)))
4320 vinfo( 3)=vname(3,idtsur(itemp))
4321 vinfo(11)='upward flux, cooling'
4322 vinfo(12)='downward flux, heating'
4323 vinfo(14)=vname(4,idtsur(itemp))
4324 vinfo(16)=vname(1,idtime)
4325# if defined WRITE_WATER && defined MASKING
4326 vinfo(20)='mask_rho'
4327# endif
4328 vinfo(21)=vname(6,idtsur(itemp))
4329 vinfo(22)='coordinates'
4330 aval(5)=real(iinfo(1,idtsur(itemp),ng),r8)
4331 avg(ng)%pioVar(idtsur(itemp))%dkind=pio_fout
4332 avg(ng)%pioVar(idtsur(itemp))%gtype=r2dvar
4333!
4334 status=def_var(ng, model, avg(ng)%pioFile, &
4335 & avg(ng)%pioVar(idtsur(itemp))%vd, &
4336 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4337 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4338 END IF
4339
4340# ifdef SALINITY
4341!
4342! Define surface net salt flux.
4343!
4344 IF (aout(idtsur(isalt),ng)) THEN
4345 vinfo( 1)=vname(1,idtsur(isalt))
4346 WRITE (vinfo( 2),'(a,1x,a)') prefix, &
4347 & trim(vname(2,idtsur(isalt)))
4348 vinfo( 3)=vname(3,idtsur(isalt))
4349 vinfo(11)='upward flux, freshening (net precipitation)'
4350 vinfo(12)='downward flux, salting (net evaporation)'
4351 vinfo(14)=vname(4,idtsur(isalt))
4352 vinfo(16)=vname(1,idtime)
4353# if defined WRITE_WATER && defined MASKING
4354 vinfo(20)='mask_rho'
4355# endif
4356 vinfo(21)=vname(6,idtsur(isalt))
4357 vinfo(22)='coordinates'
4358 aval(5)=real(iinfo(1,idtsur(isalt),ng),r8)
4359 avg(ng)%pioVar(idtsur(isalt))%dkind=pio_fout
4360 avg(ng)%pioVar(idtsur(isalt))%gtype=r2dvar
4361!
4362 status=def_var(ng, model, avg(ng)%pioFile, &
4363 & avg(ng)%pioVar(idtsur(isalt))%vd, &
4364 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4365 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4366 END IF
4367# endif
4368
4369# if defined BULK_FLUXES || defined FRC_COUPLING
4370!
4371! Define latent heat flux.
4372!
4373 IF (aout(idlhea,ng)) THEN
4374 vinfo( 1)=vname(1,idlhea)
4375 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idlhea))
4376 vinfo( 3)=vname(3,idlhea)
4377 vinfo(11)='upward flux, cooling'
4378 vinfo(12)='downward flux, heating'
4379 vinfo(14)=vname(4,idlhea)
4380 vinfo(16)=vname(1,idtime)
4381# if defined WRITE_WATER && defined MASKING
4382 vinfo(20)='mask_rho'
4383# endif
4384 vinfo(21)=vname(6,idlhea)
4385 vinfo(22)='coordinates'
4386 aval(5)=real(iinfo(1,idlhea,ng),r8)
4387 avg(ng)%pioVar(idlhea)%dkind=pio_fout
4388 avg(ng)%pioVar(idlhea)%gtype=r2dvar
4389!
4390 status=def_var(ng, model, avg(ng)%pioFile, &
4391 & avg(ng)%pioVar(idlhea)%vd, &
4392 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4393 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4394 END IF
4395!
4396! Define sensible heat flux.
4397!
4398 IF (aout(idshea,ng)) THEN
4399 vinfo( 1)=vname(1,idshea)
4400 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idshea))
4401 vinfo( 3)=vname(3,idshea)
4402 vinfo(11)='upward flux, cooling'
4403 vinfo(12)='downward flux, heating'
4404 vinfo(14)=vname(4,idshea)
4405 vinfo(16)=vname(1,idtime)
4406# if defined WRITE_WATER && defined MASKING
4407 vinfo(20)='mask_rho'
4408# endif
4409 vinfo(21)=vname(6,idshea)
4410 vinfo(22)='coordinates'
4411 aval(5)=real(iinfo(1,idshea,ng),r8)
4412 avg(ng)%pioVar(idshea)%dkind=pio_fout
4413 avg(ng)%pioVar(idshea)%gtype=r2dvar
4414!
4415 status=def_var(ng, model, avg(ng)%pioFile, &
4416 & avg(ng)%pioVar(idshea)%vd, &
4417 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4418 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4419 END IF
4420!
4421! Define net longwave radiation flux.
4422!
4423 IF (aout(idlrad,ng)) THEN
4424 vinfo( 1)=vname(1,idlrad)
4425 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idlrad))
4426 vinfo( 3)=vname(3,idlrad)
4427 vinfo(11)='upward flux, cooling'
4428 vinfo(12)='downward flux, heating'
4429 vinfo(14)=vname(4,idlrad)
4430 vinfo(16)=vname(1,idtime)
4431# if defined WRITE_WATER && defined MASKING
4432 vinfo(20)='mask_rho'
4433# endif
4434 vinfo(21)=vname(6,idlrad)
4435 vinfo(22)='coordinates'
4436 aval(5)=real(iinfo(1,idlrad,ng),r8)
4437 avg(ng)%pioVar(idlrad)%dkind=pio_fout
4438 avg(ng)%pioVar(idlrad)%gtype=r2dvar
4439!
4440 status=def_var(ng, model, avg(ng)%pioFile, &
4441 & avg(ng)%pioVar(idlrad)%vd, &
4442 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4443 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4444 END IF
4445# endif
4446
4447# ifdef BULK_FLUXES
4448# ifdef EMINUSP
4449!
4450! Define evaporation rate.
4451!
4452 IF (aout(idevap,ng)) THEN
4453 vinfo( 1)=vname(1,idevap)
4454 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idevap))
4455 vinfo( 3)=vname(3,idevap)
4456 vinfo(11)='downward flux, freshening (condensation)'
4457 vinfo(12)='upward flux, salting (evaporation)'
4458 vinfo(14)=vname(4,idevap)
4459 vinfo(16)=vname(1,idtime)
4460# if defined WRITE_WATER && defined MASKING
4461 vinfo(20)='mask_rho'
4462# endif
4463 vinfo(21)=vname(6,idevap)
4464 vinfo(22)='coordinates'
4465 aval(5)=real(iinfo(1,idevap,ng),r8)
4466 avg(ng)%pioVar(idevap)%dkind=pio_fout
4467 avg(ng)%pioVar(idevap)%gtype=r2dvar
4468!
4469 status=def_var(ng, model, avg(ng)%pioFile, &
4470 & avg(ng)%pioVar(idevap)%vd, &
4471 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4472 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4473 END IF
4474!
4475! Define precipitation rate.
4476!
4477 IF (aout(idrain,ng)) THEN
4478 vinfo( 1)=vname(1,idrain)
4479 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idrain))
4480 vinfo( 3)=vname(3,idrain)
4481 vinfo(12)='downward flux, freshening (precipitation)'
4482 vinfo(14)=vname(4,idrain)
4483 vinfo(16)=vname(1,idtime)
4484# if defined WRITE_WATER && defined MASKING
4485 vinfo(20)='mask_rho'
4486# endif
4487 vinfo(21)=vname(6,idrain)
4488 vinfo(22)='coordinates'
4489 aval(5)=real(iinfo(1,idrain,ng),r8)
4490 avg(ng)%pioVar(idrain)%dkind=pio_fout
4491 avg(ng)%pioVar(idrain)%gtype=r2dvar
4492!
4493 status=def_var(ng, model, avg(ng)%pioFile, &
4494 & avg(ng)%pioVar(idrain)%vd, &
4495 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4496 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4497 END IF
4498# endif
4499# endif
4500# ifdef SHORTWAVE
4501!
4502! Define net shortwave radiation flux.
4503!
4504 IF (aout(idsrad,ng)) THEN
4505 vinfo( 1)=vname(1,idsrad)
4506 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idsrad))
4507 vinfo( 3)=vname(3,idsrad)
4508 vinfo(11)='upward flux, cooling'
4509 vinfo(12)='downward flux, heating'
4510 vinfo(14)=vname(4,idsrad)
4511 vinfo(16)=vname(1,idtime)
4512# if defined WRITE_WATER && defined MASKING
4513 vinfo(20)='mask_rho'
4514# endif
4515 vinfo(21)=vname(6,idsrad)
4516 vinfo(22)='coordinates'
4517 aval(5)=real(iinfo(1,idsrad,ng),r8)
4518 avg(ng)%pioVar(idsrad)%dkind=pio_fout
4519 avg(ng)%pioVar(idsrad)%gtype=r2dvar
4520!
4521 status=def_var(ng, model, avg(ng)%pioFile, &
4522 & avg(ng)%pioVar(idsrad)%vd, &
4523 & pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
4524 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4525 END IF
4526# endif
4527# endif
4528!
4529! Define surface u-momentum stress.
4530!
4531 IF (aout(idusms,ng)) THEN
4532 vinfo( 1)=vname(1,idusms)
4533 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idusms))
4534 vinfo( 3)=vname(3,idusms)
4535 vinfo(14)=vname(4,idusms)
4536 vinfo(16)=vname(1,idtime)
4537# if defined WRITE_WATER && defined MASKING
4538 vinfo(20)='mask_u'
4539# endif
4540 vinfo(21)=vname(6,idusms)
4541 vinfo(22)='coordinates'
4542 aval(5)=real(iinfo(1,idusms,ng),r8)
4543 avg(ng)%pioVar(idusms)%dkind=pio_fout
4544 avg(ng)%pioVar(idusms)%gtype=u2dvar
4545!
4546 status=def_var(ng, model, avg(ng)%pioFile, &
4547 & avg(ng)%pioVar(idusms)%vd, &
4548 & pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
4549 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4550 END IF
4551!
4552! Define surface v-momentum stress.
4553!
4554 IF (aout(idvsms,ng)) THEN
4555 vinfo( 1)=vname(1,idvsms)
4556 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvsms))
4557 vinfo( 3)=vname(3,idvsms)
4558 vinfo(14)=vname(4,idvsms)
4559 vinfo(16)=vname(1,idtime)
4560# if defined WRITE_WATER && defined MASKING
4561 vinfo(20)='mask_v'
4562# endif
4563 vinfo(21)=vname(6,idvsms)
4564 vinfo(22)='coordinates'
4565 aval(5)=real(iinfo(1,idvsms,ng),r8)
4566 avg(ng)%pioVar(idvsms)%dkind=pio_fout
4567 avg(ng)%pioVar(idvsms)%gtype=v2dvar
4568!
4569 status=def_var(ng, model, avg(ng)%pioFile, &
4570 & avg(ng)%pioVar(idvsms)%vd, &
4571 & pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
4572 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4573 END IF
4574!
4575! Define bottom u-momentum stress.
4576!
4577 IF (aout(idubms,ng)) THEN
4578 vinfo( 1)=vname(1,idubms)
4579 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idubms))
4580 vinfo( 3)=vname(3,idubms)
4581 vinfo(14)=vname(4,idubms)
4582 vinfo(16)=vname(1,idtime)
4583# if defined WRITE_WATER && defined MASKING
4584 vinfo(20)='mask_u'
4585# endif
4586 vinfo(21)=vname(6,idubms)
4587 vinfo(22)='coordinates'
4588 aval(5)=real(iinfo(1,idubms,ng),r8)
4589 avg(ng)%pioVar(idubms)%dkind=pio_fout
4590 avg(ng)%pioVar(idubms)%gtype=u2dvar
4591!
4592 status=def_var(ng, model, avg(ng)%pioFile, &
4593 & avg(ng)%pioVar(idubms)%vd, &
4594 & pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
4595 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4596 END IF
4597!
4598! Define bottom v-momentum stress.
4599!
4600 IF (aout(idvbms,ng)) THEN
4601 vinfo( 1)=vname(1,idvbms)
4602 WRITE (vinfo( 2),'(a,1x,a)') prefix, trim(vname(2,idvbms))
4603 vinfo( 3)=vname(3,idvbms)
4604 vinfo(14)=vname(4,idvbms)
4605 vinfo(16)=vname(1,idtime)
4606# if defined WRITE_WATER && defined MASKING
4607 vinfo(20)='mask_v'
4608# endif
4609 vinfo(21)=vname(6,idvbms)
4610 vinfo(22)='coordinates'
4611 aval(5)=real(iinfo(1,idvbms,ng),r8)
4612 avg(ng)%pioVar(idvbms)%dkind=pio_fout
4613 avg(ng)%pioVar(idvbms)%gtype=v2dvar
4614!
4615 status=def_var(ng, model, avg(ng)%pioFile, &
4616 & avg(ng)%pioVar(idvbms)%vd, &
4617 & pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
4618 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4619 END IF
4620
4621# if (defined BBL_MODEL || defined WAVES_OUTPUT) && defined SOLVE3D
4622!
4623!-----------------------------------------------------------------------
4624! Define the bottom boundary layer model or waves variables.
4625!-----------------------------------------------------------------------
4626!
4627 CALL bbl_def_pio (ng, model, ldef, aout, avg, &
4628 & t2dgrd, u2dgrd, v2dgrd)
4629 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4630# endif
4631
4632# if defined ICE_MODEL && defined SOLVE3D
4633!
4634!-----------------------------------------------------------------------
4635! Define the sea-ice model variables.
4636!-----------------------------------------------------------------------
4637!
4638 CALL ice_def_pio (ng, model, ldef, aout, avg, &
4639 & t2dgrd, u2dgrd, v2dgrd)
4640 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4641# endif
4642
4643# if defined SEDIMENT && defined SOLVE3D
4644!
4645!-----------------------------------------------------------------------
4646! Define the sediment model variables.
4647!-----------------------------------------------------------------------
4648!
4649 CALL sediment_def_pio (ng, model, ldef, aout, avg, &
4650 & t2dgrd, u2dgrd, v2dgrd)
4651 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4652# endif
4653
4654# if defined WEC_VF && defined SOLVE3D
4655!
4656!-----------------------------------------------------------------------
4657! Define the Waves Effect on Currents variables.
4658!-----------------------------------------------------------------------
4659!
4660 CALL wec_def_pio (ng, model, ldef, aout, avg, &
4661 & t2dgrd, u2dgrd, v2dgrd, &
4662 & t3dgrd, u3dgrd, v3dgrd, w3dgrd)
4663 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4664# endif
4665!
4666!-----------------------------------------------------------------------
4667! Leave definition mode.
4668!-----------------------------------------------------------------------
4669!
4670 CALL pio_netcdf_enddef (ng, model, ncname, avg(ng)%pioFile)
4671 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4672!
4673!-----------------------------------------------------------------------
4674! Write out time-recordless, information variables.
4675!-----------------------------------------------------------------------
4676!
4677 CALL wrt_info (ng, model, avg(ng)%pioFile, ncname)
4678 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4679 END IF define
4680!
4681!=======================================================================
4682! Open an existing averages file, check its contents, and prepare
4683! for appending data.
4684!=======================================================================
4685!
4686 query : IF (.not.ldef) THEN
4687 ncname=avg(ng)%name
4688!
4689! Open averages file for read/write.
4690!
4691 CALL pio_netcdf_open (ng, model, ncname, 1, avg(ng)%pioFile)
4692 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
4693 WRITE (stdout,50) trim(ncname)
4694 RETURN
4695 END IF
4696!
4697! Inquire about the dimensions and check for consistency.
4698!
4699 CALL pio_netcdf_check_dim (ng, model, ncname, &
4700 & piofile = avg(ng)%pioFile)
4701 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4702!
4703! Inquire about the variables.
4704!
4705 CALL pio_netcdf_inq_var (ng, model, ncname, &
4706 & piofile = avg(ng)%pioFile)
4707 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4708!
4709! Initialize logical switches.
4710!
4711 DO i=1,nv
4712 got_var(i)=.false.
4713 END DO
4714!
4715! Scan variable list from input NetCDF and activate switches for
4716! average variables. Get variable IDs.
4717!
4718 DO i=1,n_var
4719 IF (trim(var_name(i)).eq.trim(vname(1,idtime))) THEN
4720 got_var(idtime)=.true.
4721 avg(ng)%pioVar(idtime)%vd=var_desc(i)
4722 avg(ng)%pioVar(idtime)%dkind=pio_tout
4723 avg(ng)%pioVar(idtime)%gtype=0
4724# ifdef WET_DRY
4725 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrwet))) THEN
4726 got_var(idrwet)=.true.
4727 avg(ng)%pioVar(idrwet)%vd=var_desc(i)
4728 avg(ng)%pioVar(idrwet)%dkind=pio_fout
4729 avg(ng)%pioVar(idrwet)%gtype=r2dvar
4730# endif
4731 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idfsur))) THEN
4732 got_var(idfsur)=.true.
4733 avg(ng)%pioVar(idfsur)%vd=var_desc(i)
4734 avg(ng)%pioVar(idfsur)%dkind=pio_fout
4735 avg(ng)%pioVar(idfsur)%gtype=r2dvar
4736 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubar))) THEN
4737 got_var(idubar)=.true.
4738 avg(ng)%pioVar(idubar)%vd=var_desc(i)
4739 avg(ng)%pioVar(idubar)%dkind=pio_fout
4740 avg(ng)%pioVar(idubar)%gtype=u2dvar
4741 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbar))) THEN
4742 got_var(idvbar)=.true.
4743 avg(ng)%pioVar(idvbar)%vd=var_desc(i)
4744 avg(ng)%pioVar(idvbar)%dkind=pio_fout
4745 avg(ng)%pioVar(idvbar)%gtype=v2dvar
4746# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
4747 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idfsud))) THEN
4748 got_var(idfsud)=.true.
4749 avg(ng)%pioVar(idfsud)%vd=var_desc(i)
4750 avg(ng)%pioVar(idfsud)%dkind=pio_fout
4751 avg(ng)%pioVar(idfsud)%gtype=r2dvar
4752 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu2dd))) THEN
4753 got_var(idu2dd)=.true.
4754 avg(ng)%pioVar(idu2dd)%vd=var_desc(i)
4755 avg(ng)%pioVar(idu2dd)%dkind=pio_fout
4756 avg(ng)%pioVar(idu2dd)%gtype=u2dvar
4757 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv2dd))) THEN
4758 got_var(idv2dd)=.true.
4759 avg(ng)%pioVar(idv2dd)%vd=var_desc(i)
4760 avg(ng)%pioVar(idv2dd)%dkind=pio_fout
4761 avg(ng)%pioVar(idv2dd)%gtype=v2dvar
4762# endif
4763 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu2de))) THEN
4764 got_var(idu2de)=.true.
4765 avg(ng)%pioVar(idu2de)%vd=var_desc(i)
4766 avg(ng)%pioVar(idu2de)%dkind=pio_fout
4767 avg(ng)%pioVar(idu2de)%gtype=r2dvar
4768 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv2dn))) THEN
4769 got_var(idv2dn)=.true.
4770 avg(ng)%pioVar(idv2dn)%vd=var_desc(i)
4771 avg(ng)%pioVar(idv2dn)%dkind=pio_fout
4772 avg(ng)%pioVar(idv2dn)%gtype=r2dvar
4773# ifdef SOLVE3D
4774# ifdef FORWARD_WRITE
4775 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idufx1))) THEN
4776 got_var(idufx1)=.true.
4777 avg(ng)%pioVar(idufx1)%vd=var_desc(i)
4778 avg(ng)%pioVar(idufx1)%dkind=pio_fout
4779 avg(ng)%pioVar(idufx1)%gtype=u2dvar
4780 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idufx2))) THEN
4781 got_var(idufx2)=.true.
4782 avg(ng)%pioVar(idufx2)%vd=var_desc(i)
4783 avg(ng)%pioVar(idufx2)%dkind=pio_fout
4784 avg(ng)%pioVar(idufx2)%gtype=u2dvar
4785 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvfx1))) THEN
4786 got_var(idvfx1)=.true.
4787 avg(ng)%pioVar(idvfx1)%vd=var_desc(i)
4788 avg(ng)%pioVar(idvfx1)%dkind=pio_fout
4789 avg(ng)%pioVar(idvfx1)%gtype=v2dvar
4790 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvfx2))) THEN
4791 got_var(idvfx2)=.true.
4792 avg(ng)%pioVar(idvfx2)%vd=var_desc(i)
4793 avg(ng)%pioVar(idvfx2)%dkind=pio_fout
4794 avg(ng)%pioVar(idvfx2)%gtype=v2dvar
4795# endif
4796 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduvel))) THEN
4797 got_var(iduvel)=.true.
4798 avg(ng)%pioVar(iduvel)%vd=var_desc(i)
4799 avg(ng)%pioVar(iduvel)%dkind=pio_fout
4800 avg(ng)%pioVar(iduvel)%gtype=u3dvar
4801 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvel))) THEN
4802 got_var(idvvel)=.true.
4803 avg(ng)%pioVar(idvvel)%vd=var_desc(i)
4804 avg(ng)%pioVar(idvvel)%dkind=pio_fout
4805 avg(ng)%pioVar(idvvel)%gtype=v3dvar
4806# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
4807 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu3dd))) THEN
4808 got_var(idu3dd)=.true.
4809 avg(ng)%pioVar(idu3dd)%vd=var_desc(i)
4810 avg(ng)%pioVar(idu3dd)%dkind=pio_fout
4811 avg(ng)%pioVar(idu3dd)%gtype=u3dvar
4812 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv3dd))) THEN
4813 got_var(idv3dd)=.true.
4814 avg(ng)%pioVar(idv3dd)%vd=var_desc(i)
4815 avg(ng)%pioVar(idv3dd)%dkind=pio_fout
4816 avg(ng)%pioVar(idv3dd)%gtype=v3dvar
4817# endif
4818 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu3de))) THEN
4819 got_var(idu3de)=.true.
4820 avg(ng)%pioVar(idu3de)%vd=var_desc(i)
4821 avg(ng)%pioVar(idu3de)%dkind=pio_fout
4822 avg(ng)%pioVar(idu3de)%gtype=r3dvar
4823 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv3dn))) THEN
4824 got_var(idv3dn)=.true.
4825 avg(ng)%pioVar(idv3dn)%vd=var_desc(i)
4826 avg(ng)%pioVar(idv3dn)%dkind=pio_fout
4827 avg(ng)%pioVar(idv3dn)%gtype=r3dvar
4828 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idovel))) THEN
4829 got_var(idovel)=.true.
4830 avg(ng)%pioVar(idovel)%vd=var_desc(i)
4831 avg(ng)%pioVar(idovel)%dkind=pio_fout
4832 avg(ng)%pioVar(idovel)%gtype=w3dvar
4833 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idwvel))) THEN
4834 got_var(idwvel)=.true.
4835 avg(ng)%pioVar(idwvel)%vd=var_desc(i)
4836 avg(ng)%pioVar(idwvel)%dkind=pio_fout
4837 avg(ng)%pioVar(idwvel)%gtype=w3dvar
4838 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iddano))) THEN
4839 got_var(iddano)=.true.
4840 avg(ng)%pioVar(iddano)%vd=var_desc(i)
4841 avg(ng)%pioVar(iddano)%dkind=pio_fout
4842 avg(ng)%pioVar(iddano)%gtype=r3dvar
4843# ifdef LMD_SKPP
4844 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idhsbl))) THEN
4845 got_var(idhsbl)=.true.
4846 avg(ng)%pioVar(idhsbl)%vd=var_desc(i)
4847 avg(ng)%pioVar(idhsbl)%dkind=pio_fout
4848 avg(ng)%pioVar(idhsbl)%gtype=r2dvar
4849# endif
4850# ifdef LMD_BKPP
4851 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idhbbl))) THEN
4852 got_var(idhbbl)=.true.
4853 avg(ng)%pioVar(idhbbl)%vd=var_desc(i)
4854 avg(ng)%pioVar(idhbbl)%dkind=pio_fout
4855 avg(ng)%pioVar(idhbbl)%gtype=r2dvar
4856# endif
4857# endif
4858 ELSE IF (trim(var_name(i)).eq.trim(vname(1,id2dpv))) THEN
4859 got_var(id2dpv)=.true.
4860 avg(ng)%pioVar(id2dpv)%vd=var_desc(i)
4861 avg(ng)%pioVar(id2dpv)%dkind=pio_fout
4862 avg(ng)%pioVar(id2dpv)%gtype=p2dvar
4863 ELSE IF (trim(var_name(i)).eq.trim(vname(1,id2drv))) THEN
4864 got_var(id2drv)=.true.
4865 avg(ng)%pioVar(id2drv)%vd=var_desc(i)
4866 avg(ng)%pioVar(id2drv)%dkind=pio_fout
4867 avg(ng)%pioVar(id2drv)%gtype=p2dvar
4868# ifdef SOLVE3D
4869 ELSE IF (trim(var_name(i)).eq.trim(vname(1,id3dpv))) THEN
4870 got_var(id3dpv)=.true.
4871 avg(ng)%pioVar(id3dpv)%vd=var_desc(i)
4872 avg(ng)%pioVar(id3dpv)%dkind=pio_fout
4873 avg(ng)%pioVar(id3dpv)%gtype=p3dvar
4874 ELSE IF (trim(var_name(i)).eq.trim(vname(1,id3drv))) THEN
4875 got_var(id3drv)=.true.
4876 avg(ng)%pioVar(id3drv)%vd=var_desc(i)
4877 avg(ng)%pioVar(id3drv)%dkind=pio_fout
4878 avg(ng)%pioVar(id3drv)%gtype=p3dvar
4879# endif
4880 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idzzav))) THEN
4881 got_var(idzzav)=.true.
4882 avg(ng)%pioVar(idzzav)%vd=var_desc(i)
4883 avg(ng)%pioVar(idzzav)%dkind=pio_fout
4884 avg(ng)%pioVar(idzzav)%gtype=r2dvar
4885 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu2av))) THEN
4886 got_var(idu2av)=.true.
4887 avg(ng)%pioVar(idu2av)%vd=var_desc(i)
4888 avg(ng)%pioVar(idu2av)%dkind=pio_fout
4889 avg(ng)%pioVar(idu2av)%gtype=u2dvar
4890 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv2av))) THEN
4891 got_var(idv2av)=.true.
4892 avg(ng)%pioVar(idv2av)%vd=var_desc(i)
4893 avg(ng)%pioVar(idv2av)%dkind=pio_fout
4894 avg(ng)%pioVar(idv2av)%gtype=v2dvar
4895# ifdef SOLVE3D
4896 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idhuav))) THEN
4897 got_var(idhuav)=.true.
4898 avg(ng)%pioVar(idhuav)%vd=var_desc(i)
4899 avg(ng)%pioVar(idhuav)%dkind=pio_fout
4900 avg(ng)%pioVar(idhuav)%gtype=u3dvar
4901 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idhvav))) THEN
4902 got_var(idhvav)=.true.
4903 avg(ng)%pioVar(idhvav)%vd=var_desc(i)
4904 avg(ng)%pioVar(idhvav)%dkind=pio_fout
4905 avg(ng)%pioVar(idhvav)%gtype=v3dvar
4906 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduuav))) THEN
4907 got_var(iduuav)=.true.
4908 avg(ng)%pioVar(iduuav)%vd=var_desc(i)
4909 avg(ng)%pioVar(idhvav)%dkind=pio_fout
4910 avg(ng)%pioVar(idhvav)%gtype=v3dvar
4911 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduvav))) THEN
4912 got_var(iduvav)=.true.
4913 avg(ng)%pioVar(iduvav)%vd=var_desc(i)
4914 avg(ng)%pioVar(iduvav)%dkind=pio_fout
4915 avg(ng)%pioVar(iduvav)%gtype=r3dvar
4916 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvav))) THEN
4917 got_var(idvvav)=.true.
4918 avg(ng)%pioVar(idvvav)%vd=var_desc(i)
4919 avg(ng)%pioVar(idvvav)%dkind=pio_fout
4920 avg(ng)%pioVar(idvvav)%gtype=v3dvar
4921# if defined LMD_MIXING || defined MY25_MIXING || defined GLS_MIXING
4922 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvis))) THEN
4923 got_var(idvvis)=.true.
4924 avg(ng)%pioVar(idvvis)%vd=var_desc(i)
4925 avg(ng)%pioVar(idvvis)%dkind=pio_fout
4926 avg(ng)%pioVar(idvvis)%gtype=w3dvar
4927 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idtdif))) THEN
4928 got_var(idtdif)=.true.
4929 avg(ng)%pioVar(idtdif)%vd=var_desc(i)
4930 avg(ng)%pioVar(idtdif)%dkind=pio_fout
4931 avg(ng)%pioVar(idtdif)%gtype=w3dvar
4932 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idsdif))) THEN
4933 got_var(idsdif)=.true.
4934 avg(ng)%pioVar(idsdif)%vd=var_desc(i)
4935 avg(ng)%pioVar(idsdif)%dkind=pio_fout
4936 avg(ng)%pioVar(idsdif)%gtype=w3dvar
4937# endif
4938# if defined BULK_FLUXES || defined ECOSIM || defined ATM_PRESS
4939 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idpair))) THEN
4940 got_var(idpair)=.true.
4941 avg(ng)%pioVar(idpair)%vd=var_desc(i)
4942 avg(ng)%pioVar(idpair)%dkind=pio_fout
4943 avg(ng)%pioVar(idpair)%gtype=r2dvar
4944# endif
4945# if defined BULK_FLUXES || defined ECOSIM
4946 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduair))) THEN
4947 got_var(iduair)=.true.
4948 avg(ng)%pioVar(iduair)%vd=var_desc(i)
4949 avg(ng)%pioVar(iduair)%dkind=pio_fout
4950 avg(ng)%pioVar(iduair)%gtype=r2dvar
4951 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvair))) THEN
4952 got_var(idvair)=.true.
4953 avg(ng)%pioVar(idvair)%vd=var_desc(i)
4954 avg(ng)%pioVar(idvair)%dkind=pio_fout
4955 avg(ng)%pioVar(idvair)%gtype=r2dvar
4956 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduaie))) THEN
4957 got_var(iduaie)=.true.
4958 avg(ng)%pioVar(iduaie)%vd=var_desc(i)
4959 avg(ng)%pioVar(iduaie)%dkind=pio_fout
4960 avg(ng)%pioVar(iduaie)%gtype=r2dvar
4961 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvain))) THEN
4962 got_var(idvain)=.true.
4963 avg(ng)%pioVar(idvain)%vd=var_desc(i)
4964 avg(ng)%pioVar(idvain)%dkind=pio_fout
4965 avg(ng)%pioVar(idvain)%gtype=r2dvar
4966# endif
4967 ELSE IF (trim(var_name(i)).eq. &
4968 & trim(vname(1,idtsur(itemp)))) THEN
4969 got_var(idtsur(itemp))=.true.
4970 avg(ng)%pioVar(idtsur(itemp))%vd=var_desc(i)
4971 avg(ng)%pioVar(idtsur(itemp))%dkind=pio_fout
4972 avg(ng)%pioVar(idtsur(itemp))%gtype=r2dvar
4973# ifdef SALINITY
4974 ELSE IF (trim(var_name(i)).eq. &
4975 & trim(vname(1,idtsur(isalt)))) THEN
4976 got_var(idtsur(isalt))=.true.
4977 avg(ng)%pioVar(idtsur(isalt))%vd=var_desc(i)
4978 avg(ng)%pioVar(idtsur(isalt))%dkind=pio_fout
4979 avg(ng)%pioVar(idtsur(isalt))%gtype=r2dvar
4980# endif
4981# if defined BULK_FLUXES || defined FRC_COUPLING
4982 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idlhea))) THEN
4983 got_var(idlhea)=.true.
4984 avg(ng)%pioVar(idlhea)%vd=var_desc(i)
4985 avg(ng)%pioVar(idlhea)%dkind=pio_fout
4986 avg(ng)%pioVar(idlhea)%gtype=r2dvar
4987 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idshea))) THEN
4988 got_var(idshea)=.true.
4989 avg(ng)%pioVar(idshea)%vd=var_desc(i)
4990 avg(ng)%pioVar(idshea)%dkind=pio_fout
4991 avg(ng)%pioVar(idshea)%gtype=r2dvar
4992 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idlrad))) THEN
4993 got_var(idlrad)=.true.
4994 avg(ng)%pioVar(idlrad)%vd=var_desc(i)
4995 avg(ng)%pioVar(idlrad)%dkind=pio_fout
4996 avg(ng)%pioVar(idlrad)%gtype=r2dvar
4997# endif
4998# ifdef BULK_FLUXES
4999 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idtair))) THEN
5000 got_var(idtair)=.true.
5001 avg(ng)%pioVar(idtair)%vd=var_desc(i)
5002 avg(ng)%pioVar(idtair)%dkind=pio_fout
5003 avg(ng)%pioVar(idtair)%gtype=r2dvar
5004# ifdef EMINUSP
5005 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idevap))) THEN
5006 got_var(idevap)=.true.
5007 avg(ng)%pioVar(idevap)%vd=var_desc(i)
5008 avg(ng)%pioVar(idevap)%dkind=pio_fout
5009 avg(ng)%pioVar(idevap)%gtype=r2dvar
5010 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrain))) THEN
5011 got_var(idrain)=.true.
5012 avg(ng)%pioVar(idrain)%vd=var_desc(i)
5013 avg(ng)%pioVar(idrain)%dkind=pio_fout
5014 avg(ng)%pioVar(idrain)%gtype=r2dvar
5015# endif
5016# endif
5017# ifdef SHORTWAVE
5018 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idsrad))) THEN
5019 got_var(idsrad)=.true.
5020 avg(ng)%pioVar(idsrad)%vd=var_desc(i)
5021 avg(ng)%pioVar(idsrad)%dkind=pio_fout
5022 avg(ng)%pioVar(idsrad)%gtype=r2dvar
5023# endif
5024# endif
5025 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idusms))) THEN
5026 got_var(idusms)=.true.
5027 avg(ng)%pioVar(idusms)%vd=var_desc(i)
5028 avg(ng)%pioVar(idusms)%dkind=pio_fout
5029 avg(ng)%pioVar(idusms)%gtype=u2dvar
5030 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvsms))) THEN
5031 got_var(idvsms)=.true.
5032 avg(ng)%pioVar(idvsms)%vd=var_desc(i)
5033 avg(ng)%pioVar(idvsms)%dkind=pio_fout
5034 avg(ng)%pioVar(idvsms)%gtype=v2dvar
5035 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubms))) THEN
5036 got_var(idubms)=.true.
5037 avg(ng)%pioVar(idubms)%vd=var_desc(i)
5038 avg(ng)%pioVar(idubms)%dkind=pio_fout
5039 avg(ng)%pioVar(idubms)%gtype=u2dvar
5040 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbms))) THEN
5041 got_var(idvbms)=.true.
5042 avg(ng)%pioVar(idvbms)%vd=var_desc(i)
5043 avg(ng)%pioVar(idvbms)%dkind=pio_fout
5044 avg(ng)%pioVar(idvbms)%gtype=v2dvar
5045 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubrs))) THEN
5046 got_var(idubrs)=.true.
5047 avg(ng)%pioVar(idubrs)%vd=var_desc(i)
5048 avg(ng)%pioVar(idubrs)%dkind=pio_fout
5049 avg(ng)%pioVar(idubrs)%gtype=v2dvar
5050 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbrs))) THEN
5051 got_var(idvbrs)=.true.
5052 avg(ng)%pioVar(idvbrs)%vd=var_desc(i)
5053 avg(ng)%pioVar(idvbrs)%dkind=pio_fout
5054 avg(ng)%pioVar(idvbrs)%gtype=v2dvar
5055 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubws))) THEN
5056 got_var(idubws)=.true.
5057 avg(ng)%pioVar(idubws)%vd=var_desc(i)
5058 avg(ng)%pioVar(idubws)%dkind=pio_fout
5059 avg(ng)%pioVar(idubws)%gtype=v2dvar
5060 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbws))) THEN
5061 got_var(idvbws)=.true.
5062 avg(ng)%pioVar(idvbws)%vd=var_desc(i)
5063 avg(ng)%pioVar(idvbws)%dkind=pio_fout
5064 avg(ng)%pioVar(idvbws)%gtype=v2dvar
5065 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubcs))) THEN
5066 got_var(idubcs)=.true.
5067 avg(ng)%pioVar(idubcs)%vd=var_desc(i)
5068 avg(ng)%pioVar(idubcs)%dkind=pio_fout
5069 avg(ng)%pioVar(idubcs)%gtype=v2dvar
5070 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbcs))) THEN
5071 got_var(idvbcs)=.true.
5072 avg(ng)%pioVar(idvbcs)%vd=var_desc(i)
5073 avg(ng)%pioVar(idvbcs)%dkind=pio_fout
5074 avg(ng)%pioVar(idvbcs)%gtype=v2dvar
5075 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduvwc))) THEN
5076 got_var(iduvwc)=.true.
5077 avg(ng)%pioVar(iduvwc)%vd=var_desc(i)
5078 avg(ng)%pioVar(iduvwc)%dkind=pio_fout
5079 avg(ng)%pioVar(iduvwc)%gtype=v2dvar
5080 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubot))) THEN
5081 got_var(idubot)=.true.
5082 avg(ng)%pioVar(idubot)%vd=var_desc(i)
5083 avg(ng)%pioVar(idubot)%dkind=pio_fout
5084 avg(ng)%pioVar(idubot)%gtype=v2dvar
5085 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbot))) THEN
5086 got_var(idvbot)=.true.
5087 avg(ng)%pioVar(idvbot)%vd=var_desc(i)
5088 avg(ng)%pioVar(idvbot)%dkind=pio_fout
5089 avg(ng)%pioVar(idvbot)%gtype=v2dvar
5090 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubur))) THEN
5091 got_var(idubur)=.true.
5092 avg(ng)%pioVar(idubur)%vd=var_desc(i)
5093 avg(ng)%pioVar(idubur)%dkind=pio_fout
5094 avg(ng)%pioVar(idubur)%gtype=v2dvar
5095 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbvr))) THEN
5096 got_var(idvbvr)=.true.
5097 avg(ng)%pioVar(idvbvr)%vd=var_desc(i)
5098 avg(ng)%pioVar(idvbvr)%dkind=pio_fout
5099 avg(ng)%pioVar(idvbvr)%gtype=v2dvar
5100 END IF
5101# ifdef SOLVE3D
5102 DO itrc=1,nt(ng)
5103 IF (trim(var_name(i)).eq.trim(vname(1,idtvar(itrc)))) THEN
5104 got_var(idtvar(itrc))=.true.
5105 avg(ng)%pioTrc(itrc)%vd=var_desc(i)
5106 avg(ng)%pioTrc(itrc)%dkind=pio_fout
5107 avg(ng)%pioTrc(itrc)%gtype=r3dvar
5108 END IF
5109 END DO
5110 DO itrc=1,nat
5111 IF (trim(var_name(i)).eq.trim(vname(1,ihutav(itrc)))) THEN
5112 got_var(ihutav(itrc))=.true.
5113 avg(ng)%pioVar(ihutav(itrc))%vd=var_desc(i)
5114 avg(ng)%pioVar(ihutav(itrc))%dkind=pio_fout
5115 avg(ng)%pioVar(ihutav(itrc))%gtype=u3dvar
5116 ELSE IF (trim(var_name(i)).eq. &
5117 & trim(vname(1,ihvtav(itrc)))) THEN
5118 got_var(ihvtav(itrc))=.true.
5119 avg(ng)%pioVar(ihvtav(itrc))%vd=var_desc(i)
5120 avg(ng)%pioVar(ihvtav(itrc))%dkind=pio_fout
5121 avg(ng)%pioVar(ihvtav(itrc))%gtype=v3dvar
5122 ELSE IF (trim(var_name(i)).eq. &
5123 & trim(vname(1,idutav(itrc)))) THEN
5124 got_var(idutav(itrc))=.true.
5125 avg(ng)%pioVar(idutav(itrc))%vd=var_desc(i)
5126 avg(ng)%pioVar(idutav(itrc))%dkind=pio_fout
5127 avg(ng)%pioVar(idutav(itrc))%gtype=u3dvar
5128 ELSE IF (trim(var_name(i)).eq. &
5129 & trim(vname(1,idvtav(itrc)))) THEN
5130 got_var(idvtav(itrc))=.true.
5131 avg(ng)%pioVar(idvtav(itrc))%vd=var_desc(i)
5132 avg(ng)%pioVar(idvtav(itrc))%dkind=pio_fout
5133 avg(ng)%pioVar(idvtav(itrc))%gtype=v3dvar
5134 ELSE IF (trim(var_name(i)).eq. &
5135 & trim(vname(1,idttav(itrc)))) THEN
5136 got_var(idttav(itrc))=.true.
5137 avg(ng)%pioVar(idttav(itrc))%vd=var_desc(i)
5138 avg(ng)%pioVar(idttav(itrc))%dkind=pio_fout
5139 avg(ng)%pioVar(idttav(itrc))%gtype=r3dvar
5140 END IF
5141 END DO
5142# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
5143 DO itrc=1,nat
5144 IF (trim(var_name(i)).eq.trim(vname(1,idtrcd(itrc)))) THEN
5145 got_var(idtrcd(itrc))=.true.
5146 avg(ng)%pioVar(idtrcd(itrc))%vd=var_desc(i)
5147 avg(ng)%pioVar(idtrcd(itrc))%dkind=pio_fout
5148 avg(ng)%pioVar(idtrcd(itrc))%gtype=r3dvar
5149 END IF
5150 END DO
5151# endif
5152# endif
5153 END DO
5154!
5155! Check if averages variables are available in input NetCDF file.
5156!
5157 IF (.not.got_var(idtime)) THEN
5158 IF (master) WRITE (stdout,60) trim(vname(1,idtime)), &
5159 & trim(ncname)
5160 exit_flag=3
5161 RETURN
5162 END IF
5163 IF (.not.got_var(idfsur).and.aout(idfsur,ng)) THEN
5164 IF (master) WRITE (stdout,60) trim(vname(1,idfsur)), &
5165 & trim(ncname)
5166 exit_flag=3
5167 RETURN
5168 END IF
5169 IF (.not.got_var(idubar).and.aout(idubar,ng)) THEN
5170 IF (master) WRITE (stdout,60) trim(vname(1,idubar)), &
5171 & trim(ncname)
5172 exit_flag=3
5173 RETURN
5174 END IF
5175 IF (.not.got_var(idvbar).and.aout(idvbar,ng)) THEN
5176 IF (master) WRITE (stdout,60) trim(vname(1,idvbar)), &
5177 & trim(ncname)
5178 exit_flag=3
5179 RETURN
5180 END IF
5181# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
5182 IF (.not.got_var(idfsud).and.aout(idfsud,ng)) THEN
5183 IF (master) WRITE (stdout,60) trim(vname(1,idfsud)), &
5184 & trim(ncname)
5185 exit_flag=3
5186 RETURN
5187 END IF
5188 IF (.not.got_var(idu2dd).and.aout(idu2dd,ng)) THEN
5189 IF (master) WRITE (stdout,60) trim(vname(1,idu2dd)), &
5190 & trim(ncname)
5191 exit_flag=3
5192 RETURN
5193 END IF
5194 IF (.not.got_var(idv2dd).and.aout(idv2dd,ng)) THEN
5195 IF (master) WRITE (stdout,60) trim(vname(1,idv2dd)), &
5196 & trim(ncname)
5197 exit_flag=3
5198 RETURN
5199 END IF
5200# endif
5201 IF (.not.got_var(idu2de).and.aout(idu2de,ng)) THEN
5202 IF (master) WRITE (stdout,60) trim(vname(1,idu2de)), &
5203 & trim(ncname)
5204 exit_flag=3
5205 RETURN
5206 END IF
5207 IF (.not.got_var(idv2dn).and.aout(idv2dn,ng)) THEN
5208 IF (master) WRITE (stdout,60) trim(vname(1,idv2dn)), &
5209 & trim(ncname)
5210 exit_flag=3
5211 RETURN
5212 END IF
5213# ifdef SOLVE3D
5214# ifdef FORWARD_WRITE
5215 IF (.not.got_var(idufx1).and.aout(idufx1,ng)) THEN
5216 IF (master) WRITE (stdout,60) trim(vname(1,idufx1)), &
5217 & trim(ncname)
5218 exit_flag=3
5219 RETURN
5220 END IF
5221 IF (.not.got_var(idufx2).and.aout(idufx2,ng)) THEN
5222 IF (master) WRITE (stdout,60) trim(vname(1,idufx2)), &
5223 & trim(ncname)
5224 exit_flag=3
5225 RETURN
5226 END IF
5227 IF (.not.got_var(idvfx1).and.aout(idvfx1,ng)) THEN
5228 IF (master) WRITE (stdout,60) trim(vname(1,idvfx1)), &
5229 & trim(ncname)
5230 exit_flag=3
5231 RETURN
5232 END IF
5233 IF (.not.got_var(idvfx2).and.aout(idvfx2,ng)) THEN
5234 IF (master) WRITE (stdout,60) trim(vname(1,idvfx2)), &
5235 & trim(ncname)
5236 exit_flag=3
5237 RETURN
5238 END IF
5239# endif
5240 IF (.not.got_var(iduvel).and.aout(iduvel,ng)) THEN
5241 IF (master) WRITE (stdout,60) trim(vname(1,iduvel)), &
5242 & trim(ncname)
5243 exit_flag=3
5244 RETURN
5245 END IF
5246 IF (.not.got_var(idvvel).and.aout(idvvel,ng)) THEN
5247 IF (master) WRITE (stdout,60) trim(vname(1,idvvel)), &
5248 & trim(ncname)
5249 exit_flag=3
5250 RETURN
5251 END IF
5252# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
5253 IF (.not.got_var(idu3dd).and.aout(idu3dd,ng)) THEN
5254 IF (master) WRITE (stdout,60) trim(vname(1,idu3dd)), &
5255 & trim(ncname)
5256 exit_flag=3
5257 RETURN
5258 END IF
5259 IF (.not.got_var(idv3dd).and.aout(idv3dd,ng)) THEN
5260 IF (master) WRITE (stdout,60) trim(vname(1,idv3dd)), &
5261 & trim(ncname)
5262 exit_flag=3
5263 RETURN
5264 END IF
5265# endif
5266 IF (.not.got_var(idu3de).and.aout(idu3de,ng)) THEN
5267 IF (master) WRITE (stdout,60) trim(vname(1,idu3de)), &
5268 & trim(ncname)
5269 exit_flag=3
5270 RETURN
5271 END IF
5272 IF (.not.got_var(idv3dn).and.aout(idv3dn,ng)) THEN
5273 IF (master) WRITE (stdout,60) trim(vname(1,idv3dn)), &
5274 & trim(ncname)
5275 exit_flag=3
5276 RETURN
5277 END IF
5278 IF (.not.got_var(idovel).and.aout(idovel,ng)) THEN
5279 IF (master) WRITE (stdout,60) trim(vname(1,idovel)), &
5280 & trim(ncname)
5281 exit_flag=3
5282 RETURN
5283 END IF
5284 IF (.not.got_var(idwvel).and.aout(idwvel,ng)) THEN
5285 IF (master) WRITE (stdout,60) trim(vname(1,idwvel)), &
5286 & trim(ncname)
5287 exit_flag=3
5288 RETURN
5289 END IF
5290 IF (.not.got_var(iddano).and.aout(iddano,ng)) THEN
5291 IF (master) WRITE (stdout,60) trim(vname(1,iddano)), &
5292 & trim(ncname)
5293 exit_flag=3
5294 RETURN
5295 END IF
5296# ifdef LMD_SKPP
5297 IF (.not.got_var(idhsbl).and.aout(idhsbl,ng)) THEN
5298 IF (master) WRITE (stdout,60) trim(vname(1,idhsbl)), &
5299 & trim(ncname)
5300 exit_flag=3
5301 RETURN
5302 END IF
5303# endif
5304# ifdef LMD_BKPP
5305 IF (.not.got_var(idhbbl).and.aout(idhbbl,ng)) THEN
5306 IF (master) WRITE (stdout,60) trim(vname(1,idhbbl)), &
5307 & trim(ncname)
5308 exit_flag=3
5309 RETURN
5310 END IF
5311# endif
5312# endif
5313 IF (.not.got_var(id2dpv).and.aout(id2dpv,ng)) THEN
5314 IF (master) WRITE (stdout,60) trim(vname(1,id2dpv)), &
5315 & trim(ncname)
5316 exit_flag=3
5317 RETURN
5318 END IF
5319 IF (.not.got_var(id2drv).and.aout(id2drv,ng)) THEN
5320 IF (master) WRITE (stdout,60) trim(vname(1,id2drv)), &
5321 & trim(ncname)
5322 exit_flag=3
5323 RETURN
5324 END IF
5325# ifdef SOLVE3D
5326 IF (.not.got_var(id3dpv).and.aout(id3dpv,ng)) THEN
5327 IF (master) WRITE (stdout,60) trim(vname(1,id3dpv)), &
5328 & trim(ncname)
5329 exit_flag=3
5330 RETURN
5331 END IF
5332 IF (.not.got_var(id3drv).and.aout(id3drv,ng)) THEN
5333 IF (master) WRITE (stdout,60) trim(vname(1,id3drv)), &
5334 & trim(ncname)
5335 exit_flag=3
5336 RETURN
5337 END IF
5338# endif
5339 IF (.not.got_var(idzzav).and.aout(idzzav,ng)) THEN
5340 IF (master) WRITE (stdout,60) trim(vname(1,idzzav)), &
5341 & trim(ncname)
5342 exit_flag=3
5343 RETURN
5344 END IF
5345 IF (.not.got_var(idu2av).and.aout(idu2av,ng)) THEN
5346 IF (master) WRITE (stdout,60) trim(vname(1,idu2av)), &
5347 & trim(ncname)
5348 exit_flag=3
5349 RETURN
5350 END IF
5351 IF (.not.got_var(idv2av).and.aout(idv2av,ng)) THEN
5352 IF (master) WRITE (stdout,60) trim(vname(1,idv2av)), &
5353 & trim(ncname)
5354 exit_flag=3
5355 RETURN
5356 END IF
5357# ifdef SOLVE3D
5358 IF (.not.got_var(idhuav).and.aout(idhuav,ng)) THEN
5359 IF (master) WRITE (stdout,60) trim(vname(1,idhuav)), &
5360 & trim(ncname)
5361 exit_flag=3
5362 RETURN
5363 END IF
5364 IF (.not.got_var(idhvav).and.aout(idhvav,ng)) THEN
5365 IF (master) WRITE (stdout,60) trim(vname(1,idhvav)), &
5366 & trim(ncname)
5367 exit_flag=3
5368 RETURN
5369 END IF
5370 IF (.not.got_var(iduuav).and.aout(iduuav,ng)) THEN
5371 IF (master) WRITE (stdout,60) trim(vname(1,iduuav)), &
5372 & trim(ncname)
5373 exit_flag=3
5374 RETURN
5375 END IF
5376 IF (.not.got_var(iduvav).and.aout(iduvav,ng)) THEN
5377 IF (master) WRITE (stdout,60) trim(vname(1,iduvav)), &
5378 & trim(ncname)
5379 exit_flag=3
5380 RETURN
5381 END IF
5382 IF (.not.got_var(idvvav).and.aout(idvvav,ng)) THEN
5383 IF (master) WRITE (stdout,60) trim(vname(1,idvvav)), &
5384 & trim(ncname)
5385 exit_flag=3
5386 RETURN
5387 END IF
5388# if defined LMD_MIXING || defined MY25_MIXING || defined GLS_MIXING
5389 IF (.not.got_var(idvvis).and.aout(idvvis,ng)) THEN
5390 IF (master) WRITE (stdout,60) trim(vname(1,idvvis)), &
5391 & trim(ncname)
5392 exit_flag=3
5393 RETURN
5394 END IF
5395 IF (.not.got_var(idtdif).and.aout(idtdif,ng)) THEN
5396 IF (master) WRITE (stdout,60) trim(vname(1,idtdif)), &
5397 & trim(ncname)
5398 exit_flag=3
5399 RETURN
5400 END IF
5401# ifdef SALINITY
5402 IF (.not.got_var(idsdif).and.aout(idsdif,ng)) THEN
5403 IF (master) WRITE (stdout,60) trim(vname(1,idsdif)), &
5404 & trim(ncname)
5405 exit_flag=3
5406 RETURN
5407 END IF
5408# endif
5409# endif
5410# if defined BULK_FLUXES || defined ECOSIM || defined ATM_PRESS
5411 IF (.not.got_var(idpair).and.aout(idpair,ng)) THEN
5412 IF (master) WRITE (stdout,60) trim(vname(1,idpair)), &
5413 & trim(ncname)
5414 exit_flag=3
5415 RETURN
5416 END IF
5417# endif
5418# if defined BULK_FLUXES || defined ECOSIM
5419 IF (.not.got_var(iduair).and.aout(iduair,ng)) THEN
5420 IF (master) WRITE (stdout,60) trim(vname(1,iduair)), &
5421 & trim(ncname)
5422 exit_flag=3
5423 RETURN
5424 END IF
5425 IF (.not.got_var(idvair).and.aout(idvair,ng)) THEN
5426 IF (master) WRITE (stdout,60) trim(vname(1,idvair)), &
5427 & trim(ncname)
5428 exit_flag=3
5429 RETURN
5430 END IF
5431 IF (.not.got_var(iduaie).and.aout(iduaie,ng)) THEN
5432 IF (master) WRITE (stdout,60) trim(vname(1,iduaie)), &
5433 & trim(ncname)
5434 exit_flag=3
5435 RETURN
5436 END IF
5437 IF (.not.got_var(idvain).and.aout(idvain,ng)) THEN
5438 IF (master) WRITE (stdout,60) trim(vname(1,idvain)), &
5439 & trim(ncname)
5440 exit_flag=3
5441 RETURN
5442 END IF
5443# endif
5444 IF (.not.got_var(idtsur(itemp)).and.aout(idtsur(itemp),ng)) THEN
5445 IF (master) WRITE (stdout,60) trim(vname(1,idtsur(itemp))), &
5446 & trim(ncname)
5447 exit_flag=3
5448 RETURN
5449 END IF
5450# ifdef SALINITY
5451 IF (.not.got_var(idtsur(isalt)).and.aout(idtsur(isalt),ng)) THEN
5452 IF (master) WRITE (stdout,60) trim(vname(1,idtsur(isalt))), &
5453 & trim(ncname)
5454 exit_flag=3
5455 RETURN
5456 END IF
5457# endif
5458# if defined BULK_FLUXES || defined FRC_COUPLING
5459 IF (.not.got_var(idlhea).and.aout(idlhea,ng)) THEN
5460 IF (master) WRITE (stdout,60) trim(vname(1,idlhea)), &
5461 & trim(ncname)
5462 exit_flag=3
5463 RETURN
5464 END IF
5465 IF (.not.got_var(idshea).and.aout(idshea,ng)) THEN
5466 IF (master) WRITE (stdout,60) trim(vname(1,idshea)), &
5467 & trim(ncname)
5468 exit_flag=3
5469 RETURN
5470 END IF
5471 IF (.not.got_var(idlrad).and.aout(idlrad,ng)) THEN
5472 IF (master) WRITE (stdout,60) trim(vname(1,idlrad)), &
5473 & trim(ncname)
5474 exit_flag=3
5475 RETURN
5476 END IF
5477# endif
5478# ifdef BULK_FLUXES
5479 IF (.not.got_var(idtair).and.aout(idtair,ng)) THEN
5480 IF (master) WRITE (stdout,60) trim(vname(1,idtair)), &
5481 & trim(ncname)
5482 exit_flag=3
5483 RETURN
5484 END IF
5485# ifdef EMINUSP
5486 IF (.not.got_var(idevap).and.aout(idevap,ng)) THEN
5487 IF (master) WRITE (stdout,60) trim(vname(1,idevap)), &
5488 & trim(ncname)
5489 exit_flag=3
5490 RETURN
5491 END IF
5492 IF (.not.got_var(idrain).and.aout(idrain,ng)) THEN
5493 IF (master) WRITE (stdout,60) trim(vname(1,idrain)), &
5494 & trim(ncname)
5495 exit_flag=3
5496 RETURN
5497 END IF
5498# endif
5499# endif
5500# ifdef SHORTWAVE
5501 IF (.not.got_var(idsrad).and.aout(idsrad,ng)) THEN
5502 IF (master) WRITE (stdout,60) trim(vname(1,idsrad)), &
5503 & trim(ncname)
5504 exit_flag=3
5505 RETURN
5506 END IF
5507# endif
5508# endif
5509 IF (.not.got_var(idusms).and.aout(idusms,ng)) THEN
5510 IF (master) WRITE (stdout,60) trim(vname(1,idusms)), &
5511 & trim(ncname)
5512 exit_flag=3
5513 RETURN
5514 END IF
5515 IF (.not.got_var(idvsms).and.aout(idvsms,ng)) THEN
5516 IF (master) WRITE (stdout,60) trim(vname(1,idvsms)), &
5517 & trim(ncname)
5518 exit_flag=3
5519 RETURN
5520 END IF
5521 IF (.not.got_var(idubms).and.aout(idubms,ng)) THEN
5522 IF (master) WRITE (stdout,60) trim(vname(1,idubms)), &
5523 & trim(ncname)
5524 exit_flag=3
5525 RETURN
5526 END IF
5527 IF (.not.got_var(idvbms).and.aout(idvbms,ng)) THEN
5528 IF (master) WRITE (stdout,60) trim(vname(1,idvbms)), &
5529 & trim(ncname)
5530 exit_flag=3
5531 RETURN
5532 END IF
5533# ifdef SOLVE3D
5534 DO itrc=1,nt(ng)
5535 IF (.not.got_var(idtvar(itrc)).and.aout(idtvar(itrc),ng)) THEN
5536 IF (master) WRITE (stdout,60) trim(vname(1,idtvar(itrc))), &
5537 & trim(ncname)
5538 exit_flag=3
5539 RETURN
5540 END IF
5541 END DO
5542 DO itrc=1,nat
5543 IF (.not.got_var(ihutav(itrc)).and.aout(ihutav(itrc),ng)) THEN
5544 IF (master) WRITE (stdout,60) trim(vname(1,ihutav(itrc))), &
5545 & trim(ncname)
5546 exit_flag=3
5547 RETURN
5548 END IF
5549 IF (.not.got_var(ihvtav(itrc)).and.aout(ihvtav(itrc),ng)) THEN
5550 IF (master) WRITE (stdout,60) trim(vname(1,ihvtav(itrc))), &
5551 & trim(ncname)
5552 exit_flag=3
5553 RETURN
5554 END IF
5555 IF (.not.got_var(idutav(itrc)).and.aout(idutav(itrc),ng)) THEN
5556 IF (master) WRITE (stdout,60) trim(vname(1,idutav(itrc))), &
5557 & trim(ncname)
5558 exit_flag=3
5559 RETURN
5560 END IF
5561 IF (.not.got_var(idvtav(itrc)).and.aout(idvtav(itrc),ng)) THEN
5562 IF (master) WRITE (stdout,60) trim(vname(1,idvtav(itrc))), &
5563 & trim(ncname)
5564 exit_flag=3
5565 RETURN
5566 END IF
5567 IF (.not.got_var(idttav(itrc)).and.aout(idttav(itrc),ng)) THEN
5568 IF (master) WRITE (stdout,60) trim(vname(1,idttav(itrc))), &
5569 & trim(ncname)
5570 exit_flag=3
5571 RETURN
5572 END IF
5573 END DO
5574# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
5575 DO itrc=1,nat
5576 IF (.not.got_var(idtrcd(itrc)).and.aout(idtrcd(itrc),ng)) THEN
5577 IF (master) WRITE (stdout,60) trim(vname(1,idtrcd(itrc))), &
5578 & trim(ncname)
5579 exit_flag=3
5580 RETURN
5581 END IF
5582 END DO
5583# endif
5584# endif
5585
5586# if (defined BBL_MODEL || defined WAVES_OUTPUT) && defined SOLVE3D
5587!
5588! Scan bottom boundary layer model and waves variables from input
5589! NetCDF and activate switches for time-averaged variables. Get
5590! variable IDs.
5591!
5592 CALL bbl_def_pio (ng, model, ldef, aout, avg)
5593 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
5594# endif
5595
5596# if defined ICE_MODEL && defined SOLVE3D
5597!
5598! Scan sea-ice variables from input NetCDF and activate switches for
5599! time-averaged variables. Get variable IDs.
5600!
5601 CALL ice_def_pio (ng, model, ldef, aout, avg)
5602# endif
5603
5604# if defined SEDIMENT && defined SOLVE3D
5605!
5606! Scan sediment model variables from input NetCDF and activate
5607! switches for time-averaged variables. Get variable IDs.
5608!
5609 CALL sediment_def_pio (ng, model, ldef, aout, avg)
5610 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
5611# endif
5612
5613# if defined WEC_VF && defined SOLVE3D
5614!
5615! Scan Waves Effect on Currents variables from input NetCDF and
5616! activate switches for time-averaged variables. Get variable IDs.
5617!
5618 CALL wec_def_pio (ng, model, ldef, aout, avg)
5619 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
5620# endif
5621!
5622! Set unlimited time record dimension to the appropriate value.
5623!
5624 IF (nrst(ng).eq.navg(ng)) THEN
5625 IF (ndefavg(ng).gt.0) THEN
5626 avg(ng)%Rindex=((ntstart(ng)-1)- &
5627 & ndefavg(ng)*((ntstart(ng)-1)/ndefavg(ng)))/ &
5628 & navg(ng)
5629 ELSE
5630 avg(ng)%Rindex=(ntstart(ng)-1)/navg(ng)
5631 END IF
5632 ELSE
5633 avg(ng)%Rindex=rec_size
5634 END IF
5635 END IF query
5636!
5637! Set initial average time. Notice that the value is offset by half
5638! nAVG*dt so there is not a special case when computing its value
5639
5640# ifdef ADJOINT
5641! in "ad_set_avg".
5642!
5643 avgtime(ng)=time(ng)+0.5_r8*real(navg(ng),r8)*dt(ng)
5644# else
5645! in "set_avg".
5646!
5647 IF (ntsavg(ng).eq.1) THEN
5648 avgtime(ng)=time(ng)-0.5_r8*real(navg(ng),r8)*dt(ng)
5649 ELSE
5650 avgtime(ng)=time(ng)+real(ntsavg(ng),r8)*dt(ng)- &
5651 & 0.5_r8*real(navg(ng),r8)*dt(ng)
5652 END IF
5653# endif
5654!
5655 10 FORMAT (2x,'DEF_AVG_PIO - creating average file,',t56, &
5656 & 'Grid ',i2.2,': ',a)
5657 20 FORMAT (2x,'DEF_AVG_PIO - inquiring average file',t56, &
5658 & 'Grid ',i2.2,': ',a)
5659 30 FORMAT (/,' DEF_AVG_PIO - unable to create averages NetCDF', &
5660 & ' file: ',a)
5661 40 FORMAT (1pe11.4,1x,'millimeter')
5662 50 FORMAT (/,' DEF_AVG_PIO - unable to open averages NetCDF' &
5663 & ' file: ',a)
5664 60 FORMAT (/,' DEF_AVG_PIO - unable to find variable: ',a,2x, &
5665 & ' in averages NetCDF file: ',a)
5666!
5667 RETURN
5668 END SUBROUTINE def_avg_pio
5669# endif
5670#endif
5671 END MODULE def_avg_mod
subroutine, public bbl_def_nf90(ng, model, ldef, varout, s, t2dgrd, u2dgrd, v2dgrd)
Definition bbl_output.F:83
subroutine, public bbl_def_pio(ng, model, ldef, varout, s, t2dgrd, u2dgrd, v2dgrd)
subroutine, public def_avg(ng, ldef)
Definition def_avg.F:79
subroutine, private def_avg_pio(ng, model, ldef)
Definition def_avg.F:2701
subroutine, private def_avg_nf90(ng, model, ldef)
Definition def_avg.F:126
integer, parameter nfec
Definition ecosim_mod.h:204
integer, parameter nbac
Definition ecosim_mod.h:202
integer, parameter ndom
Definition ecosim_mod.h:203
integer, parameter nbands
Definition ecosim_mod.h:201
integer, parameter nphy
Definition ecosim_mod.h:205
integer, dimension(:), allocatable nstatevar
type(t_io), dimension(:), allocatable avg
integer stdout
character(len=256) sourcefile
integer iddano
integer idvair
integer, dimension(:), allocatable idttav
integer idevap
integer idvbrs
integer, dimension(:), allocatable ihvtav
integer, parameter io_nf90
Definition mod_ncparam.F:95
integer idu3dd
integer idzzav
integer idu2av
integer iduvwc
integer idubar
integer idwvel
integer idvvel
integer idv3dd
integer idubur
integer, dimension(:), allocatable ihutav
integer idhsbl
integer idvsms
integer, parameter nv
integer, parameter io_pio
Definition mod_ncparam.F:96
integer, dimension(:), allocatable idutav
integer idvbvr
integer idpair
integer id3dpv
integer idrwet
integer idv2dn
integer idvbot
integer idsdif
integer idvfx2
integer id3drv
integer, dimension(:), allocatable idtsur
integer id2drv
integer idvain
integer idtdif
integer idfsur
integer idfsud
integer, dimension(:), allocatable idtvar
integer idhbbl
integer idvbws
integer idvfx1
integer idufx2
integer idvbms
integer iduair
integer, dimension(:), allocatable idtrcd
integer iduvel
integer idhuav
integer idv3dn
integer idhvav
integer idovel
integer idvvav
integer idv2dd
character(len=maxlen), dimension(6, 0:nv) vname
integer idtime
integer idshea
integer, dimension(:,:,:), allocatable iinfo
integer idlrad
integer idv2av
integer idusms
integer idvbcs
integer, parameter ndimid
integer idvvis
integer idu3de
integer, dimension(:), allocatable idvtav
integer id2dpv
integer idubcs
integer idufx1
integer idu2de
integer idlhea
integer idubot
integer idrain
integer idubms
integer idubrs
integer idsrad
integer idubws
integer iduuav
integer idu2dd
integer iduaie
integer idtair
logical, dimension(:,:), allocatable aout
integer iduvav
integer idvbar
integer, parameter nf_tout
Definition mod_netcdf.F:207
subroutine, public netcdf_check_dim(ng, model, ncname, ncid)
Definition mod_netcdf.F:538
subroutine, public netcdf_open(ng, model, ncname, omode, ncid)
integer, parameter nf_fout
Definition mod_netcdf.F:188
subroutine, public netcdf_enddef(ng, model, ncname, ncid)
character(len=100), dimension(mvars) var_name
Definition mod_netcdf.F:169
integer, dimension(mvars) var_id
Definition mod_netcdf.F:160
integer n_var
Definition mod_netcdf.F:152
integer rec_size
Definition mod_netcdf.F:156
subroutine, public netcdf_create(ng, model, ncname, ncid)
subroutine, public netcdf_inq_var(ng, model, ncname, ncid, myvarname, searchvar, varid, nvardim, nvaratt)
logical master
integer nat
Definition mod_param.F:499
integer, parameter inlm
Definition mod_param.F:662
integer nbed
Definition mod_param.F:517
integer, dimension(:), allocatable n
Definition mod_param.F:479
integer, parameter r3dvar
Definition mod_param.F:721
type(t_iobounds), dimension(:), allocatable iobounds
Definition mod_param.F:282
integer, parameter iadm
Definition mod_param.F:665
integer, parameter u3dvar
Definition mod_param.F:722
integer, parameter u2dvar
Definition mod_param.F:718
integer, parameter w3dvar
Definition mod_param.F:724
integer, parameter p2dvar
Definition mod_param.F:716
integer, dimension(:), allocatable nt
Definition mod_param.F:489
integer, parameter r2dvar
Definition mod_param.F:717
integer, parameter v2dvar
Definition mod_param.F:719
integer nst
Definition mod_param.F:521
integer, parameter p3dvar
Definition mod_param.F:720
integer, parameter v3dvar
Definition mod_param.F:723
integer, parameter pio_fout
type(var_desc_t), dimension(:), pointer var_desc
subroutine, public pio_netcdf_create(ng, model, ncname, piofile)
subroutine, public pio_netcdf_inq_var(ng, model, ncname, piofile, myvarname, searchvar, piovar, nvardim, nvaratt)
subroutine, public pio_netcdf_open(ng, model, ncname, omode, piofile)
subroutine, public pio_netcdf_check_dim(ng, model, ncname, piofile)
integer, parameter pio_tout
subroutine, public pio_netcdf_enddef(ng, model, ncname, piofile)
real(dp), dimension(:), allocatable dt
real(dp), dimension(:), allocatable avgtime
integer, dimension(:), allocatable nrst
integer, dimension(:), allocatable navg
type(t_clock) rclock
integer exit_flag
integer isalt
integer, dimension(:), allocatable ndefavg
integer itemp
real(dp), dimension(:), allocatable time
integer, dimension(:), allocatable ntstart
integer, dimension(:), allocatable ntsavg
integer noerror
integer, dimension(:), allocatable idsed
real(r8), dimension(:,:), allocatable sd50
subroutine, public sediment_def_pio(ng, model, ldef, varout, s, t2dgrd, u2dgrd, v2dgrd, t3dgrd, u3dgrd, v3dgrd, w3dgrd)
subroutine, public sediment_def_nf90(ng, model, ldef, varout, s, t2dgrd, u2dgrd, v2dgrd, b3dgrd)
logical function, public founderror(flag, noerr, line, routine)
Definition strings.F:52