ROMS
Loading...
Searching...
No Matches
def_his_mod Module Reference

Functions/Subroutines

subroutine, public def_his (ng, ldef)
 
subroutine, private def_his_nf90 (ng, model, ldef)
 
subroutine, private def_his_pio (ng, model, ldef)
 

Function/Subroutine Documentation

◆ def_his()

subroutine, public def_his_mod::def_his ( integer, intent(in) ng,
logical, intent(in) ldef )

Definition at line 73 of file def_his.F.

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

References def_his_nf90(), def_his_pio(), mod_scalars::exit_flag, strings_mod::founderror(), mod_iounits::his, mod_param::inlm, mod_ncparam::io_nf90, mod_ncparam::io_pio, mod_parallel::master, mod_scalars::noerror, and mod_iounits::stdout.

Referenced by output().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ def_his_nf90()

subroutine, private def_his_mod::def_his_nf90 ( integer, intent(in) ng,
integer, intent(in) model,
logical, intent(in) ldef )
private

Definition at line 112 of file def_his.F.

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
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)

References bbl_output_mod::bbl_def_nf90(), mod_scalars::exit_flag, strings_mod::founderror(), mod_iounits::his, mod_ncparam::hout, mod_ncparam::iddano, mod_ncparam::idempf, mod_ncparam::idevap, mod_ncparam::idfsur, mod_ncparam::idghat, mod_ncparam::idhbbl, mod_ncparam::idhsbl, mod_ncparam::idlhea, mod_ncparam::idlrad, mod_ncparam::idmtke, mod_ncparam::idmtls, mod_ncparam::idovel, mod_ncparam::idovil, mod_ncparam::idpair, mod_ncparam::idpthr, mod_ncparam::idpthu, mod_ncparam::idpthv, mod_ncparam::idpthw, mod_ncparam::idpwet, mod_ncparam::idrain, mod_ncparam::idru2d, mod_ncparam::idru3d, mod_ncparam::idruct, mod_ncparam::idrv2d, mod_ncparam::idrv3d, mod_ncparam::idrvct, mod_ncparam::idrwet, mod_ncparam::idrzet, mod_ncparam::idsbry, mod_ncparam::idsdif, mod_sediment::idsed, mod_ncparam::idshea, mod_ncparam::idsrad, mod_ncparam::idtair, mod_ncparam::idtdif, mod_ncparam::idtime, mod_ncparam::idtsur, mod_ncparam::idtvar, mod_ncparam::idu2de, mod_ncparam::idu3de, mod_ncparam::iduaie, mod_ncparam::iduair, mod_ncparam::idubar, mod_ncparam::idubms, mod_ncparam::idufx1, mod_ncparam::idufx2, mod_ncparam::idusms, mod_ncparam::iduvel, mod_ncparam::iduwet, mod_ncparam::idv2dn, mod_ncparam::idv3dn, mod_ncparam::idvain, mod_ncparam::idvair, mod_ncparam::idvbar, mod_ncparam::idvbms, mod_ncparam::idvfx1, mod_ncparam::idvfx2, mod_ncparam::idvmkk, mod_ncparam::idvmkp, mod_ncparam::idvmls, mod_ncparam::idvsms, mod_ncparam::idvvel, mod_ncparam::idvvis, mod_ncparam::idvwet, mod_ncparam::idwvel, mod_ncparam::iinfo, mod_param::iobounds, mod_scalars::isalt, mod_ncparam::isfsur, mod_ncparam::istvar, mod_ncparam::isubar, mod_ncparam::isuvel, mod_ncparam::isvbar, mod_ncparam::isvvel, mod_scalars::itemp, mod_scalars::lobc, mod_parallel::master, mod_param::n, mod_netcdf::n_var, mod_param::nat, mod_biology::nbac, mod_biology::nbands, mod_param::nbed, mod_scalars::nbrec, mod_scalars::ndefhis, mod_biology::ndom, mod_netcdf::netcdf_check_dim(), mod_netcdf::netcdf_create(), mod_netcdf::netcdf_enddef(), mod_netcdf::netcdf_inq_var(), mod_netcdf::netcdf_open(), mod_netcdf::nf_fout, mod_netcdf::nf_tout, mod_netcdf::nf_type, mod_biology::nfec, mod_scalars::nhis, mod_scalars::noerror, mod_biology::nphy, mod_param::nst, mod_fourdvar::nstatevar, mod_param::nt, mod_scalars::ntstart, mod_ncparam::nv, mod_scalars::rclock, mod_netcdf::rec_size, mod_sediment::sd50, sediment_output_mod::sediment_def_nf90(), mod_iounits::sourcefile, mod_iounits::stdout, mod_netcdf::var_id, mod_netcdf::var_name, and mod_ncparam::vname.

Referenced by def_his().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ def_his_pio()

subroutine, private def_his_mod::def_his_pio ( integer, intent(in) ng,
integer, intent(in) model,
logical, intent(in) ldef )
private

Definition at line 2768 of file def_his.F.

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
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)

References bbl_output_mod::bbl_def_pio(), mod_scalars::exit_flag, strings_mod::founderror(), mod_iounits::his, mod_ncparam::hout, mod_ncparam::iddano, mod_ncparam::idempf, mod_ncparam::idevap, mod_ncparam::idfsur, mod_ncparam::idghat, mod_ncparam::idhbbl, mod_ncparam::idhsbl, mod_ncparam::idlhea, mod_ncparam::idlrad, mod_ncparam::idmtke, mod_ncparam::idmtls, mod_ncparam::idovel, mod_ncparam::idovil, mod_ncparam::idpair, mod_ncparam::idpthr, mod_ncparam::idpthu, mod_ncparam::idpthv, mod_ncparam::idpthw, mod_ncparam::idpwet, mod_ncparam::idrain, mod_ncparam::idru2d, mod_ncparam::idru3d, mod_ncparam::idruct, mod_ncparam::idrv2d, mod_ncparam::idrv3d, mod_ncparam::idrvct, mod_ncparam::idrwet, mod_ncparam::idrzet, mod_ncparam::idsbry, mod_ncparam::idsdif, mod_sediment::idsed, mod_ncparam::idshea, mod_ncparam::idsrad, mod_ncparam::idtair, mod_ncparam::idtdif, mod_ncparam::idtime, mod_ncparam::idtsur, mod_ncparam::idtvar, mod_ncparam::idu2de, mod_ncparam::idu3de, mod_ncparam::iduaie, mod_ncparam::iduair, mod_ncparam::idubar, mod_ncparam::idubms, mod_ncparam::idufx1, mod_ncparam::idufx2, mod_ncparam::idusms, mod_ncparam::iduvel, mod_ncparam::iduwet, mod_ncparam::idv2dn, mod_ncparam::idv3dn, mod_ncparam::idvain, mod_ncparam::idvair, mod_ncparam::idvbar, mod_ncparam::idvbms, mod_ncparam::idvfx1, mod_ncparam::idvfx2, mod_ncparam::idvmkk, mod_ncparam::idvmkp, mod_ncparam::idvmls, mod_ncparam::idvsms, mod_ncparam::idvvel, mod_ncparam::idvvis, mod_ncparam::idvwet, mod_ncparam::idwvel, mod_ncparam::iinfo, mod_param::iobounds, mod_scalars::isalt, mod_ncparam::isfsur, mod_ncparam::istvar, mod_ncparam::isubar, mod_ncparam::isuvel, mod_ncparam::isvbar, mod_ncparam::isvvel, mod_scalars::itemp, mod_scalars::lobc, mod_parallel::master, mod_param::n, mod_param::nat, mod_biology::nbac, mod_biology::nbands, mod_param::nbed, mod_scalars::nbrec, mod_scalars::ndefhis, mod_biology::ndom, mod_biology::nfec, mod_scalars::nhis, mod_scalars::noerror, mod_biology::nphy, mod_param::nst, mod_fourdvar::nstatevar, mod_param::nt, mod_scalars::ntstart, mod_ncparam::nv, mod_param::p2dvar, mod_pio_netcdf::pio_fout, mod_pio_netcdf::pio_netcdf_check_dim(), mod_pio_netcdf::pio_netcdf_create(), mod_pio_netcdf::pio_netcdf_enddef(), mod_pio_netcdf::pio_netcdf_inq_var(), mod_pio_netcdf::pio_netcdf_open(), mod_pio_netcdf::pio_tout, mod_pio_netcdf::pio_type, mod_param::r2dobc, mod_param::r2dvar, mod_param::r3dobc, mod_param::r3dvar, mod_scalars::rclock, mod_sediment::sd50, sediment_output_mod::sediment_def_pio(), mod_iounits::sourcefile, mod_iounits::stdout, mod_param::u2dobc, mod_param::u2dvar, mod_param::u3dobc, mod_param::u3dvar, mod_param::v2dobc, mod_param::v2dvar, mod_param::v3dobc, mod_param::v3dvar, mod_pio_netcdf::var_desc, mod_ncparam::vname, and mod_param::w3dvar.

Referenced by def_his().

Here is the call graph for this function:
Here is the caller graph for this function: