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