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