ROMS
Loading...
Searching...
No Matches
def_rst.F
Go to the documentation of this file.
1#include "cppdefs.h"
3!
4!git $Id$
5!================================================== Hernan G. Arango ===
6! Copyright (c) 2002-2025 The ROMS Group !
7! Licensed under a MIT/X style license !
8! See License_ROMS.md !
9!=======================================================================
10! !
11! This module creates ouput restart file using either the standard !
12! NetCDF library or the Parallel-IO (PIO) library. It defines its !
13! dimensions, attributes, and variables. !
14! !
15#if defined PERFECT_RESTART && defined WRITE_WATER && defined MASKING
16! Currently, perfect restart is not compatible with writing !
17! only water points. !
18! !
19#endif
20!=======================================================================
21!
22 USE mod_param
23 USE mod_parallel
24#ifdef BIOLOGY
25 USE mod_biology
26#endif
27#ifdef FOUR_DVAR
28 USE mod_fourdvar
29#endif
30 USE mod_iounits
31 USE mod_ncparam
32 USE mod_scalars
33#if defined SEDIMENT || defined BBL_MODEL
34 USE mod_sediment
35#endif
36!
37 USE def_dim_mod, ONLY : def_dim
38 USE def_info_mod, ONLY : def_info
39 USE def_var_mod, ONLY : def_var
40#ifdef ICE_MODEL
41 USE ice_output_mod, ONLY : ice_def_nf90
42# if defined PIO_LIB && defined DISTRIBUTE
43 USE ice_output_mod, ONLY : ice_def_pio
44# endif
45#endif
46 USE strings_mod, ONLY : founderror
47 USE wrt_info_mod, ONLY : wrt_info
48!
49 implicit none
50!
51 PUBLIC :: def_rst
52 PRIVATE :: def_rst_nf90
53#if defined PIO_LIB && defined DISTRIBUTE
54 PRIVATE :: def_rst_pio
55#endif
56!
57 CONTAINS
58!
59!***********************************************************************
60 SUBROUTINE def_rst (ng)
61!***********************************************************************
62!
63! Imported variable declarations.
64!
65 integer, intent(in) :: ng
66!
67! Local variable declarations.
68!
69 character (len=*), parameter :: myfile = &
70 & __FILE__
71!
72!-----------------------------------------------------------------------
73! Create a new history file according to IO type.
74!-----------------------------------------------------------------------
75!
76 SELECT CASE (rst(ng)%IOtype)
77 CASE (io_nf90)
78 CALL def_rst_nf90 (ng, inlm)
79
80#if defined PIO_LIB && defined DISTRIBUTE
81 CASE (io_pio)
82 CALL def_rst_pio (ng, inlm)
83#endif
84 CASE DEFAULT
85 IF (master) WRITE (stdout,10) rst(ng)%IOtype
86 exit_flag=3
87 END SELECT
88 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
89!
90 10 FORMAT (' DEF_RST - Illegal output file type, io_type = ',i0, &
91 & /,11x,'Check KeyWord ''OUT_LIB'' in ''roms.in''.')
92!
93 RETURN
94 END SUBROUTINE def_rst
95!
96!***********************************************************************
97 SUBROUTINE def_rst_nf90 (ng, model)
98!***********************************************************************
99!
100 USE mod_netcdf
101!
102! Imported variable declarations.
103!
104 integer, intent(in) :: ng, model
105!
106! Local variable declarations.
107!
108 logical :: ldefine, got_var(nv)
109!
110 integer, parameter :: natt = 25
111
112 integer :: i, j, nvd3, nvd4, nvd5
113 integer :: recdim, status, varid
114
115 integer :: dimids(ndimid)
116 integer :: r2dgrd(4), ru2dgrd(4), rv2dgrd(4)
117 integer :: sp2dgrd(3), sr2dgrd(3), su2dgrd(3), sv2dgrd(3)
118 integer :: sr3dgrd(4), su3dgrd(4), sv3dgrd(4)
119 integer :: t2dgrd(4), u2dgrd(4), v2dgrd(4)
120
121#ifdef SOLVE3D
122 integer :: itrc
123
124 integer :: k3dgrd(5), t3dgrd(5)
125 integer :: r3dgrd(4), ru3dgrd(5), rv3dgrd(5)
126 integer :: u3dgrd(5), v3dgrd(5), w3dgrd(4)
127#endif
128!
129 real(r8) :: aval(6)
130!
131 character (len=256) :: ncname
132 character (len=MaxLen) :: vinfo(natt)
133
134 character (len=*), parameter :: myfile = &
135 & __FILE__//", def_rst_nf90"
136!
137 sourcefile=myfile
138!
139!-----------------------------------------------------------------------
140! Set and report file name.
141!-----------------------------------------------------------------------
142!
143! Activate creation of restart NetCDF file. If a restart run, the
144! restart filename "RST(ng)%name" is different than the initial
145! filename "INI(ng)%name".
146!
147 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
148 ncname=rst(ng)%name
149 ldefine=.false.
150 IF (((nrrec(ng).eq.0).and.(iic(ng).eq.ntstart(ng))).or. &
151 & ((nrrec(ng).ne.0).and. &
152 & (trim(ncname).ne.trim(ini(ng)%name)))) THEN
153 ldefine=.true.
154 END IF
155!
156 IF (master) THEN
157 IF (ldefine) THEN
158 WRITE (stdout,10) ng, trim(ncname)
159 ELSE
160 WRITE (stdout,20) ng, trim(ncname)
161 END IF
162 END IF
163!
164!=======================================================================
165! Create a new restart NetCDF file.
166!=======================================================================
167!
168 define : IF (ldefine) THEN
169 CALL netcdf_create (ng, model, trim(ncname), rst(ng)%ncid)
170 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
171 IF (master) WRITE (stdout,30) trim(ncname)
172 RETURN
173 END IF
174!
175!-----------------------------------------------------------------------
176! Define file dimensions.
177!-----------------------------------------------------------------------
178!
179 dimids=0
180!
181 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'xi_rho', &
182 & iobounds(ng)%xi_rho, dimids( 1))
183 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
184
185 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'xi_u', &
186 & iobounds(ng)%xi_u, dimids( 2))
187 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
188
189 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'xi_v', &
190 & iobounds(ng)%xi_v, dimids( 3))
191 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
192
193 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'xi_psi', &
194 & iobounds(ng)%xi_psi, dimids( 4))
195 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
196
197 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'eta_rho', &
198 & iobounds(ng)%eta_rho, dimids( 5))
199 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
200
201 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'eta_u', &
202 & iobounds(ng)%eta_u, dimids( 6))
203 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
204
205 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'eta_v', &
206 & iobounds(ng)%eta_v, dimids( 7))
207 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
208
209 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'eta_psi', &
210 & iobounds(ng)%eta_psi, dimids( 8))
211 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
212
213#if !defined PERFECT_RESTART && \
214 (defined write_water && defined masking)
215 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'xy_rho', &
216 & iobounds(ng)%xy_rho, dimids(17))
217 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
218
219 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'xy_u', &
220 & iobounds(ng)%xy_u, dimids(18))
221 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
222
223 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'xy_v', &
224 & iobounds(ng)%xy_v, dimids(19))
225 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
226#endif
227
228#ifdef SOLVE3D
229# if !defined PERFECT_RESTART && \
230 (defined write_water && defined masking)
231 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'xyz_rho', &
232 & iobounds(ng)%xy_rho*n(ng), dimids(20))
233 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
234
235 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'xyz_u', &
236 & iobounds(ng)%xy_u*n(ng), dimids(21))
237 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
238
239 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'xyz_v', &
240 & iobounds(ng)%xy_v*n(ng), dimids(22))
241 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
242
243 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'xyz_w', &
244 & iobounds(ng)%xy_rho*(n(ng)+1), dimids(23))
245 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
246# endif
247
248 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'N', &
249 & n(ng), dimids( 9))
250 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
251
252 status=def_dim(ng, model, rst(ng)%ncid, ncname, 's_rho', &
253 & n(ng), dimids( 9))
254 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
255
256 status=def_dim(ng, model, rst(ng)%ncid, ncname, 's_w', &
257 & n(ng)+1, dimids(10))
258 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
259
260 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'tracer', &
261 & nt(ng), dimids(11))
262 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
263
264# ifdef SEDIMENT
265 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'NST', &
266 & nst, dimids(32))
267 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
268
269 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'Nbed', &
270 & nbed, dimids(16))
271 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
272
273# if !defined PERFECT_RESTART && \
274 (defined write_water && defined masking)
275 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'xybed', &
276 & iobounds(ng)%xy_rho*nbed, dimids(24))
277 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
278# endif
279# endif
280
281# ifdef ECOSIM
282 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'Nbands', &
283 & nbands, dimids(33))
284 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
285
286 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'Nphy', &
287 & nphy, dimids(25))
288 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
289
290 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'Nbac', &
291 & nbac, dimids(26))
292 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
293
294 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'Ndom', &
295 & ndom, dimids(27))
296 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
297
298 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'Nfec', &
299 & nfec, dimids(28))
300 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
301# endif
302#endif
303
304 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'boundary', &
305 & 4, dimids(14))
306 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
307
308#ifdef FOUR_DVAR
309 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'Nstate', &
310 & nstatevar(ng), dimids(29))
311 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
312#endif
313
314#ifdef PERFECT_RESTART
315 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'two', &
316 & 2, dimids(30))
317 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
318
319 status=def_dim(ng, model, rst(ng)%ncid, ncname, 'three', &
320 & 3, dimids(31))
321 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
322#endif
323
324 status=def_dim(ng, model, rst(ng)%ncid, ncname, &
325 & trim(adjustl(vname(5,idtime))), &
326 & nf90_unlimited, dimids(12))
327 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
328
329 recdim=dimids(12)
330!
331! Set number of dimensions for output variables.
332!
333#if !defined PERFECT_RESTART && \
334 (defined write_water && defined masking)
335 nvd3=2
336 nvd4=2
337 nvd5=2
338#else
339 nvd3=3
340 nvd4=4
341 nvd5=5
342#endif
343!
344! Define dimension vectors for staggered tracer type variables.
345!
346#if !defined PERFECT_RESTART && \
347 (defined write_water && defined masking)
348 t2dgrd(1)=dimids(17)
349 t2dgrd(2)=dimids(12)
350 sr2dgrd(1)=dimids(17)
351 sr2dgrd(2)=dimids(12)
352# ifdef SOLVE3D
353 t3dgrd(1)=dimids(20)
354 t3dgrd(2)=dimids(12)
355 r3dgrd(1)=dimids(20)
356 r3dgrd(2)=dimids(12)
357# endif
358#else
359 t2dgrd(1)=dimids( 1)
360 t2dgrd(2)=dimids( 5)
361 sr2dgrd(1)=dimids( 1)
362 sr2dgrd(2)=dimids( 5)
363 sr2dgrd(3)=dimids(12)
364# ifdef PERFECT_RESTART
365 t2dgrd(3)=dimids(31)
366 t2dgrd(4)=dimids(12)
367# else
368 t2dgrd(3)=dimids(12)
369# endif
370# ifdef SOLVE3D
371 t3dgrd(1)=dimids( 1)
372 t3dgrd(2)=dimids( 5)
373 t3dgrd(3)=dimids( 9)
374 r3dgrd(1)=dimids( 1)
375 r3dgrd(2)=dimids( 5)
376 r3dgrd(3)=dimids( 9)
377# ifdef PERFECT_RESTART
378 t3dgrd(4)=dimids(30)
379 t3dgrd(5)=dimids(12)
380# else
381 t3dgrd(4)=dimids(12)
382# endif
383 r3dgrd(4)=dimids(12)
384# endif
385#endif
386!
387! Define dimension vectors for staggered type variables at PSI-points.
388!
389 sp2dgrd(1)=dimids( 4)
390 sp2dgrd(2)=dimids( 8)
391 sp2dgrd(3)=dimids(12)
392!
393! Define dimension vectors for staggered u-momentum type variables.
394!
395#if !defined PERFECT_RESTART && \
396 (defined write_water && defined masking)
397 u2dgrd(1)=dimids(18)
398 u2dgrd(2)=dimids(12)
399# ifdef SOLVE3D
400 u3dgrd(1)=dimids(21)
401 u3dgrd(2)=dimids(12)
402# endif
403#else
404 u2dgrd(1)=dimids( 2)
405 u2dgrd(2)=dimids( 6)
406# ifdef PERFECT_RESTART
407 u2dgrd(3)=dimids(31)
408 u2dgrd(4)=dimids(12)
409# else
410 u2dgrd(3)=dimids(12)
411# endif
412# ifdef SOLVE3D
413 u3dgrd(1)=dimids( 2)
414 u3dgrd(2)=dimids( 6)
415 u3dgrd(3)=dimids( 9)
416# ifdef PERFECT_RESTART
417 u3dgrd(4)=dimids(30)
418 u3dgrd(5)=dimids(12)
419# else
420 u3dgrd(4)=dimids(12)
421# endif
422# endif
423#endif
424!
425! Define dimension vectors for staggered v-momentum type variables.
426!
427#if !defined PERFECT_RESTART && \
428 (defined write_water && defined masking)
429 v2dgrd(1)=dimids(19)
430 v2dgrd(2)=dimids(12)
431# ifdef SOLVE3D
432 v3dgrd(1)=dimids(22)
433 v3dgrd(2)=dimids(12)
434# endif
435#else
436 v2dgrd(1)=dimids( 3)
437 v2dgrd(2)=dimids( 7)
438# ifdef PERFECT_RESTART
439 v2dgrd(3)=dimids(31)
440 v2dgrd(4)=dimids(12)
441# else
442 v2dgrd(3)=dimids(12)
443# endif
444# ifdef SOLVE3D
445 v3dgrd(1)=dimids( 3)
446 v3dgrd(2)=dimids( 7)
447 v3dgrd(3)=dimids( 9)
448# ifdef PERFECT_RESTART
449 v3dgrd(4)=dimids(30)
450 v3dgrd(5)=dimids(12)
451# else
452 v3dgrd(4)=dimids(12)
453# endif
454# endif
455#endif
456#ifdef PERFECT_RESTART
457!
458! Define dimension vectors for RHS free-surface equation.
459!
460# if !defined PERFECT_RESTART && \
461 (defined write_water && defined masking)
462 r2dgrd(1)=dimids(17)
463 r2dgrd(2)=dimids(12)
464# else
465 r2dgrd(1)=dimids( 1)
466 r2dgrd(2)=dimids( 5)
467 r2dgrd(3)=dimids(30)
468 r2dgrd(4)=dimids(12)
469# endif
470!
471! Define dimension vectors for RHS u-momentum equation.
472!
473# if !defined PERFECT_RESTART && \
474 (defined write_water && defined masking)
475 ru2dgrd(1)=dimids(18)
476 ru2dgrd(2)=dimids(12)
477# ifdef SOLVE3D
478 ru2dgrd(1)=dimids(21)
479 ru2dgrd(2)=dimids(12)
480# endif
481# else
482 ru2dgrd(1)=dimids( 2)
483 ru2dgrd(2)=dimids( 6)
484 ru2dgrd(3)=dimids(30)
485 ru2dgrd(4)=dimids(12)
486# ifdef SOLVE3D
487 ru3dgrd(1)=dimids( 2)
488 ru3dgrd(2)=dimids( 6)
489 ru3dgrd(3)=dimids(10)
490 ru3dgrd(4)=dimids(30)
491 ru3dgrd(5)=dimids(12)
492# endif
493# endif
494!
495! Define dimension vectors for RHS v-momentum equation.
496!
497# if !defined PERFECT_RESTART && \
498 (defined write_water && defined masking)
499 rv2dgrd(1)=dimids(19)
500 rv2dgrd(2)=dimids(12)
501# ifdef SOLVE3D
502 rv3dgrd(1)=dimids(22)
503 rv3dgrd(2)=dimids(12)
504# endif
505# else
506 rv2dgrd(1)=dimids( 3)
507 rv2dgrd(2)=dimids( 7)
508 rv2dgrd(3)=dimids(30)
509 rv2dgrd(4)=dimids(12)
510# ifdef SOLVE3D
511 rv3dgrd(1)=dimids( 3)
512 rv3dgrd(2)=dimids( 7)
513 rv3dgrd(3)=dimids(10)
514 rv3dgrd(4)=dimids(30)
515 rv3dgrd(5)=dimids(12)
516# endif
517# endif
518#endif
519#ifdef SOLVE3D
520!
521! Define dimension vector for staggered w-momentum type variables.
522!
523# if !defined PERFECT_RESTART && \
524 (defined write_water && defined masking)
525 w3dgrd(1)=dimids(23)
526 w3dgrd(2)=dimids(12)
527# ifdef PERFECT_RESTART
528 k3dgrd(1)=dimids(23)
529 k3dgrd(2)=dimids(12)
530# endif
531# else
532 w3dgrd(1)=dimids( 1)
533 w3dgrd(2)=dimids( 5)
534 w3dgrd(3)=dimids(10)
535 w3dgrd(4)=dimids(12)
536# ifdef PERFECT_RESTART
537 k3dgrd(1)=dimids( 1)
538 k3dgrd(2)=dimids( 5)
539 k3dgrd(3)=dimids(10)
540 k3dgrd(4)=dimids(30)
541 k3dgrd(5)=dimids(12)
542# endif
543# endif
544#endif
545!
546! Define dimension vector for sediment, radiation stress variables.
547!
548#if !defined PERFECT_RESTART && \
549 (defined write_water && defined masking)
550 su2dgrd(1)=dimids(18)
551 su2dgrd(2)=dimids(12)
552 sv2dgrd(1)=dimids(19)
553 sv2dgrd(2)=dimids(12)
554#else
555 su2dgrd(1)=dimids( 2)
556 su2dgrd(2)=dimids( 6)
557 su2dgrd(3)=dimids(12)
558 sv2dgrd(1)=dimids( 3)
559 sv2dgrd(2)=dimids( 7)
560 sv2dgrd(3)=dimids(12)
561#endif
562#ifdef SOLVE3D
563# if !defined PERFECT_RESTART && \
564 (defined write_water && defined masking)
565 sr3dgrd(1)=dimids(24)
566 sr3dgrd(2)=dimids(12)
567 su3dgrd(1)=dimids(21)
568 su3dgrd(2)=dimids(12)
569 sv3dgrd(1)=dimids(22)
570 sv3dgrd(2)=dimids(12)
571# else
572 sr3dgrd(1)=dimids( 1)
573 sr3dgrd(2)=dimids( 5)
574 sr3dgrd(3)=dimids(16)
575 sr3dgrd(4)=dimids(12)
576 su3dgrd(1)=dimids( 2)
577 su3dgrd(2)=dimids( 6)
578 su3dgrd(3)=dimids( 9)
579 su3dgrd(4)=dimids(12)
580 sv3dgrd(1)=dimids( 3)
581 sv3dgrd(2)=dimids( 7)
582 sv3dgrd(3)=dimids( 9)
583 sv3dgrd(4)=dimids(12)
584# endif
585#endif
586!
587! Initialize unlimited time record dimension.
588!
589 rst(ng)%Rindex=0
590!
591! Initialize local information variable arrays.
592!
593 DO i=1,natt
594 DO j=1,len(vinfo(1))
595 vinfo(i)(j:j)=' '
596 END DO
597 END DO
598 DO i=1,6
599 aval(i)=0.0_r8
600 END DO
601!
602!-----------------------------------------------------------------------
603! Define time-recordless information variables.
604!-----------------------------------------------------------------------
605!
606 CALL def_info (ng, model, rst(ng)%ncid, ncname, dimids)
607 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
608!
609!-----------------------------------------------------------------------
610! Define time-varying variables.
611!-----------------------------------------------------------------------
612
613#ifdef PERFECT_RESTART
614!
615! Define time-stepping indices.
616!
617# ifdef SOLVE3D
618 vinfo( 1)='nstp'
619 vinfo( 2)='3D equations time level index, nstp'
620 status=def_var(ng, model, rst(ng)%ncid, varid, nf90_int, &
621 & 1, (/recdim/), aval, vinfo, ncname, &
622 & setparaccess = .true.)
623 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
624
625 vinfo( 1)='nrhs'
626 vinfo( 2)='3D equations time level index, nrhs'
627 status=def_var(ng, model, rst(ng)%ncid, varid, nf90_int, &
628 & 1, (/recdim/), aval, vinfo, ncname, &
629 & setparaccess = .true.)
630 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
631
632 vinfo( 1)='nnew'
633 vinfo( 2)='3D equations time level index, nnew'
634 status=def_var(ng, model, rst(ng)%ncid, varid, nf90_int, &
635 & 1, (/recdim/), aval, vinfo, ncname, &
636 & setparaccess = .true.)
637 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
638# endif
639 vinfo( 1)='kstp'
640 vinfo( 2)='3D equations time level index, kstp'
641 status=def_var(ng, model, rst(ng)%ncid, varid, nf90_int, &
642 & 1, (/recdim/), aval, vinfo, ncname, &
643 & setparaccess = .true.)
644 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
645
646 vinfo( 1)='krhs'
647 vinfo( 2)='3D equations time level index, krhs'
648 status=def_var(ng, model, rst(ng)%ncid, varid, nf90_int, &
649 & 1, (/recdim/), aval, vinfo, ncname, &
650 & setparaccess = .true.)
651 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
652
653 vinfo( 1)='knew'
654 vinfo( 2)='3D equations time level index, knew'
655 status=def_var(ng, model, rst(ng)%ncid, varid, nf90_int, &
656 & 1, (/recdim/), aval, vinfo, ncname, &
657 & setparaccess = .true.)
658 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
659#endif
660!
661! Define model time.
662!
663 vinfo( 1)=vname(1,idtime)
664 vinfo( 2)=vname(2,idtime)
665 WRITE (vinfo( 3),'(a,a)') 'seconds since ', trim(rclock%string)
666 vinfo( 4)=trim(rclock%calendar)
667 vinfo(14)=vname(4,idtime)
668 vinfo(21)=vname(6,idtime)
669 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idtime), &
670 & nf_tout, 1, (/recdim/), aval, vinfo, ncname, &
671 & setparaccess = .true.)
672 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
673
674#ifdef WET_DRY
675!
676! Define wet/dry mask on PSI-points.
677!
678 vinfo( 1)=vname(1,idpwet)
679 vinfo( 2)=vname(2,idpwet)
680 vinfo( 3)=vname(3,idpwet)
681 vinfo( 9)='land'
682 vinfo(10)='water'
683 vinfo(14)=vname(4,idpwet)
684 vinfo(16)=vname(1,idtime)
685 vinfo(21)=vname(6,idpwet)
686 vinfo(22)='coordinates'
687 aval(5)=real(iinfo(1,idpwet,ng),r8)
688 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idpwet), &
689 & nf_frst, nvd3, sp2dgrd, aval, vinfo, ncname, &
690 & setfillval = .false.)
691 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
692!
693! Define wet/dry mask on RHO-points.
694!
695 vinfo( 1)=vname(1,idrwet)
696 vinfo( 2)=vname(2,idrwet)
697 vinfo( 3)=vname(3,idrwet)
698 vinfo( 9)='land'
699 vinfo(10)='water'
700 vinfo(14)=vname(4,idrwet)
701 vinfo(16)=vname(1,idtime)
702 vinfo(21)=vname(6,idrwet)
703 vinfo(22)='coordinates'
704 aval(5)=real(iinfo(1,idrwet,ng),r8)
705 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idrwet), &
706 & nf_frst, nvd3, sr2dgrd, aval, vinfo, ncname, &
707 & setfillval = .false.)
708 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
709!
710! Define wet/dry mask on U-points.
711!
712 vinfo( 1)=vname(1,iduwet)
713 vinfo( 2)=vname(2,iduwet)
714 vinfo( 3)=vname(3,iduwet)
715 vinfo( 9)='land'
716 vinfo(10)='water'
717 vinfo(14)=vname(4,iduwet)
718 vinfo(16)=vname(1,idtime)
719 vinfo(21)=vname(6,iduwet)
720 vinfo(22)='coordinates'
721 aval(5)=real(iinfo(1,iduwet,ng),r8)
722 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(iduwet), &
723 & nf_frst, nvd3, su2dgrd, aval, vinfo, ncname, &
724 & setfillval = .false.)
725 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
726!
727! Define wet/dry mask on V-points.
728!
729 vinfo( 1)=vname(1,idvwet)
730 vinfo( 2)=vname(2,idvwet)
731 vinfo( 3)=vname(3,idvwet)
732 vinfo(14)=vname(4,idvwet)
733 vinfo(16)=vname(1,idtime)
734 vinfo( 9)='land'
735 vinfo(10)='water'
736 vinfo(21)=vname(6,idvwet)
737 vinfo(22)='coordinates'
738 aval(5)=real(iinfo(1,idvwet,ng),r8)
739 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idvwet), &
740 & nf_frst, nvd3, sv2dgrd, aval, vinfo, ncname, &
741 & setfillval = .false.)
742 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
743#endif
744#if defined SEDIMENT && defined SED_MORPH
745!
746! Define time-varying bathymetry.
747!
748 vinfo( 1)=vname(1,idbath)
749 vinfo( 2)=vname(2,idbath)
750 vinfo( 3)=vname(3,idbath)
751 vinfo(14)=vname(4,idbath)
752 vinfo(16)=vname(1,idtime)
753 vinfo(21)=vname(6,idbath)
754 vinfo(22)='coordinates'
755 aval(5)=real(iinfo(1,idbath,ng),r8)
756 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idbath), &
757 & nf_frst, nvd3, t2dgrd, aval, vinfo, ncname, &
758 & setfillval = .false.)
759 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
760#endif
761!
762! Define free-surface.
763!
764 vinfo( 1)=vname(1,idfsur)
765 vinfo( 2)=vname(2,idfsur)
766 vinfo( 3)=vname(3,idfsur)
767 vinfo(14)=vname(4,idfsur)
768 vinfo(16)=vname(1,idtime)
769#if defined WRITE_WATER && defined MASKING
770# if !defined WET_DRY && defined PERFECT_RESTART
771 vinfo(24)='_FillValue'
772 aval(6)=spval
773# else
774 vinfo(20)='mask_rho'
775# endif
776#endif
777 vinfo(21)=vname(6,idfsur)
778 vinfo(22)='coordinates'
779 aval(5)=real(iinfo(1,idfsur,ng),r8)
780#ifdef PERFECT_RESTART
781 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idfsur), &
782# ifdef WET_DRY
783 & nf_frst, nvd4, t2dgrd, aval, vinfo, ncname, &
784 & setfillval = .false.)
785# else
786 & nf_frst, nvd4, t2dgrd, aval, vinfo, ncname)
787# endif
788#else
789 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idfsur), &
790# ifdef WET_DRY
791 & nf_frst, nvd3, t2dgrd, aval, vinfo, ncname, &
792 & setfillval = .false.)
793# else
794 & nf_frst, nvd3, t2dgrd, aval, vinfo, ncname)
795
796# endif
797#endif
798 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
799
800#ifdef PERFECT_RESTART
801!
802! Define RHS of free-surface equation.
803!
804 vinfo( 1)=vname(1,idrzet)
805 vinfo( 2)=vname(2,idrzet)
806 vinfo( 3)=vname(3,idrzet)
807 vinfo(14)=vname(4,idrzet)
808 vinfo(16)=vname(1,idtime)
809# if defined WRITE_WATER && defined MASKING
810# if defined PERFECT_RESTART
811 vinfo(24)='_FillValue'
812 aval(6)=spval
813# else
814 vinfo(20)='mask_rho'
815# endif
816# endif
817 vinfo(21)=vname(6,idrzet)
818 vinfo(22)='coordinates'
819 aval(5)=real(iinfo(1,idfsur,ng),r8)
820 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idrzet), &
821 & nf_frst, nvd4, r2dgrd, aval, vinfo, ncname)
822 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
823#endif
824!
825! Define 2D momentum in the XI-direction.
826!
827 vinfo( 1)=vname(1,idubar)
828 vinfo( 2)=vname(2,idubar)
829 vinfo( 3)=vname(3,idubar)
830 vinfo(14)=vname(4,idubar)
831 vinfo(16)=vname(1,idtime)
832#if defined WRITE_WATER && defined MASKING
833# if defined PERFECT_RESTART
834 vinfo(24)='_FillValue'
835 aval(6)=spval
836# else
837 vinfo(20)='mask_u'
838# endif
839#endif
840 vinfo(21)=vname(6,idubar)
841 vinfo(22)='coordinates'
842 aval(5)=real(iinfo(1,idubar,ng),r8)
843#ifdef PERFECT_RESTART
844 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idubar), &
845 & nf_frst, nvd4, u2dgrd, aval, vinfo, ncname)
846#else
847 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idubar), &
848 & nf_frst, nvd3, u2dgrd, aval, vinfo, ncname)
849#endif
850 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
851
852#ifdef PERFECT_RESTART
853!
854! Define RHS of 2D momentum equation in the XI-direction.
855!
856 vinfo( 1)=vname(1,idru2d)
857 vinfo( 2)=vname(2,idru2d)
858 vinfo( 3)=vname(3,idru2d)
859 vinfo(14)=vname(4,idru2d)
860 vinfo(16)=vname(1,idtime)
861# if defined WRITE_WATER && defined MASKING
862# if defined PERFECT_RESTART
863 vinfo(24)='_FillValue'
864 aval(6)=spval
865# else
866 vinfo(20)='mask_u'
867# endif
868# endif
869 vinfo(21)=vname(6,idru2d)
870 vinfo(22)='coordinates'
871 aval(5)=real(iinfo(1,idru2d,ng),r8)
872 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idru2d), &
873 & nf_frst, nvd4, ru2dgrd, aval, vinfo, ncname)
874 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
875#endif
876!
877! Define 2D momentum in the ETA-direction.
878!
879 vinfo( 1)=vname(1,idvbar)
880 vinfo( 2)=vname(2,idvbar)
881 vinfo( 3)=vname(3,idvbar)
882 vinfo(14)=vname(4,idvbar)
883 vinfo(16)=vname(1,idtime)
884#if defined WRITE_WATER && defined MASKING
885# if defined PERFECT_RESTART
886 vinfo(24)='_FillValue'
887 aval(6)=spval
888# else
889 vinfo(20)='mask_v'
890# endif
891#endif
892 vinfo(21)=vname(6,idvbar)
893 vinfo(22)='coordinates'
894 aval(5)=real(iinfo(1,idvbar,ng),r8)
895#ifdef PERFECT_RESTART
896 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idvbar), &
897 & nf_frst, nvd4, v2dgrd, aval, vinfo, ncname)
898#else
899 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idvbar), &
900 & nf_frst, nvd3, v2dgrd, aval, vinfo, ncname)
901#endif
902 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
903
904#ifdef PERFECT_RESTART
905!
906! Define RHS of 2D momentum equation in the ETA-direction.
907!
908 vinfo( 1)=vname(1,idrv2d)
909 vinfo( 2)=vname(2,idrv2d)
910 vinfo( 3)=vname(3,idrv2d)
911 vinfo(14)=vname(4,idrv2d)
912 vinfo(16)=vname(1,idtime)
913# if defined WRITE_WATER && defined MASKING
914# if defined PERFECT_RESTART
915 vinfo(24)='_FillValue'
916 aval(6)=spval
917# else
918 vinfo(20)='mask_v'
919# endif
920# endif
921 vinfo(21)=vname(6,idrv2d)
922 vinfo(22)='coordinates'
923 aval(5)=real(iinfo(1,idrv2d,ng),r8)
924 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idrv2d), &
925 & nf_frst, nvd4, rv2dgrd, aval, vinfo, ncname)
926 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
927#endif
928#ifdef SOLVE3D
929!
930! Define 3D momentum component in the XI-direction.
931!
932 vinfo( 1)=vname(1,iduvel)
933 vinfo( 2)=vname(2,iduvel)
934 vinfo( 3)=vname(3,iduvel)
935 vinfo(14)=vname(4,iduvel)
936 vinfo(16)=vname(1,idtime)
937# if defined WRITE_WATER && defined MASKING
938# if defined PERFECT_RESTART
939 vinfo(24)='_FillValue'
940 aval(6)=spval
941# else
942 vinfo(20)='mask_u'
943# endif
944# endif
945 vinfo(21)=vname(6,iduvel)
946 vinfo(22)='coordinates'
947 aval(5)=real(iinfo(1,iduvel,ng),r8)
948# ifdef PERFECT_RESTART
949 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(iduvel), &
950 & nf_frst, nvd5, u3dgrd, aval, vinfo, ncname)
951# else
952 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(iduvel), &
953 & nf_frst, nvd4, u3dgrd, aval, vinfo, ncname)
954# endif
955 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
956
957# ifdef PERFECT_RESTART
958!
959! Define RHS of 3D momentum equation in the XI-direction.
960! Although this variable is a U-points, a negative value is used
961! here to set "s_w" in the "coordinate" attribute. The k=0 index
962! is used during coupling in step2d.
963!
964 vinfo( 1)=vname(1,idru3d)
965 vinfo( 2)=vname(2,idru3d)
966 vinfo( 3)=vname(3,idru3d)
967 vinfo(14)=vname(4,idru3d)
968 vinfo(16)=vname(1,idtime)
969# if defined WRITE_WATER && defined MASKING
970# if defined PERFECT_RESTART
971 vinfo(24)='_FillValue'
972 aval(6)=spval
973# else
974 vinfo(20)='mask_u'
975# endif
976# endif
977 vinfo(21)=vname(6,idru3d)
978 vinfo(22)='coordinates'
979 aval(5)=real(-u3dvar,r8)
980 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idru3d), &
981 & nf_frst, nvd5, ru3dgrd, aval, vinfo, ncname)
982 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
983# endif
984!
985! Define 3D momentum component in the ETA-direction.
986!
987 vinfo( 1)=vname(1,idvvel)
988 vinfo( 2)=vname(2,idvvel)
989 vinfo( 3)=vname(3,idvvel)
990 vinfo(14)=vname(4,idvvel)
991 vinfo(16)=vname(1,idtime)
992# if defined WRITE_WATER && defined MASKING
993# if defined PERFECT_RESTART
994 vinfo(24)='_FillValue'
995 aval(6)=spval
996# else
997 vinfo(20)='mask_v'
998# endif
999# endif
1000 vinfo(21)=vname(6,idvvel)
1001 vinfo(22)='coordinates'
1002 aval(5)=real(iinfo(1,idvvel,ng),r8)
1003# ifdef PERFECT_RESTART
1004 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idvvel), &
1005 & nf_frst, nvd5, v3dgrd, aval, vinfo, ncname)
1006# else
1007 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idvvel), &
1008 & nf_frst, nvd4, v3dgrd, aval, vinfo, ncname)
1009# endif
1010 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1011
1012# ifdef PERFECT_RESTART
1013!
1014! Define RHS of 3D momentum equation in the ETA-direction.
1015! Although this variable is a V-points, a negative value is used
1016! here to set "s_w" in the "coordinate" attribute. The k=0 index
1017! is used during coupling in step2d.
1018!
1019 vinfo( 1)=vname(1,idrv3d)
1020 vinfo( 2)=vname(2,idrv3d)
1021 vinfo( 3)=vname(3,idrv3d)
1022 vinfo(14)=vname(4,idrv3d)
1023 vinfo(16)=vname(1,idtime)
1024# if defined WRITE_WATER && defined MASKING
1025# if defined PERFECT_RESTART
1026 vinfo(24)='_FillValue'
1027 aval(6)=spval
1028# else
1029 vinfo(20)='mask_v'
1030# endif
1031# endif
1032 vinfo(21)=vname(6,idrv3d)
1033 vinfo(22)='coordinates'
1034 aval(5)=real(-v3dvar,r8)
1035 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idrv3d), &
1036 & nf_frst, nvd5, rv3dgrd, aval, vinfo, ncname)
1037 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1038# endif
1039!
1040! Define tracer type variables.
1041!
1042 DO itrc=1,nt(ng)
1043 vinfo( 1)=vname(1,idtvar(itrc))
1044 vinfo( 2)=vname(2,idtvar(itrc))
1045 vinfo( 3)=vname(3,idtvar(itrc))
1046 vinfo(14)=vname(4,idtvar(itrc))
1047 vinfo(16)=vname(1,idtime)
1048# ifdef SEDIMENT
1049 DO i=1,nst
1050 IF (itrc.eq.idsed(i)) THEN
1051 WRITE (vinfo(19),40) 1000.0_r8*sd50(i,ng)
1052 END IF
1053 END DO
1054# endif
1055# if defined WRITE_WATER && defined MASKING
1056# if defined PERFECT_RESTART
1057 vinfo(24)='_FillValue'
1058 aval(6)=spval
1059# else
1060 vinfo(20)='mask_rho'
1061# endif
1062# endif
1063 vinfo(21)=vname(6,idtvar(itrc))
1064 vinfo(22)='coordinates'
1065 aval(5)=real(r3dvar,r8)
1066# ifdef PERFECT_RESTART
1067 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Tid(itrc), &
1068 & nf_frst, nvd5, t3dgrd, aval, vinfo, ncname)
1069# else
1070 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Tid(itrc), &
1071 & nf_frst, nvd4, t3dgrd, aval, vinfo, ncname)
1072# endif
1073 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1074 END DO
1075!
1076! Define density anomaly.
1077!
1078 vinfo( 1)=vname(1,iddano)
1079 vinfo( 2)=vname(2,iddano)
1080 vinfo( 3)=vname(3,iddano)
1081 vinfo(14)=vname(4,iddano)
1082 vinfo(16)=vname(1,idtime)
1083# if defined WRITE_WATER && defined MASKING
1084# if defined PERFECT_RESTART
1085 vinfo(24)='_FillValue'
1086 aval(6)=spval
1087# else
1088 vinfo(20)='mask_rho'
1089# endif
1090# endif
1091 vinfo(21)=vname(6,iddano)
1092 vinfo(22)='coordinates'
1093 aval(5)=real(iinfo(1,iddano,ng),r8)
1094 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(iddano), &
1095 & nf_frst, nvd4, r3dgrd, aval, vinfo, ncname)
1096 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1097
1098# ifdef LMD_SKPP
1099!
1100! Define depth of surface boundary layer.
1101!
1102 vinfo( 1)=vname(1,idhsbl)
1103 vinfo( 2)=vname(2,idhsbl)
1104 vinfo( 3)=vname(3,idhsbl)
1105 vinfo(14)=vname(4,idhsbl)
1106 vinfo(16)=vname(1,idtime)
1107# if defined WRITE_WATER && defined MASKING
1108# if defined PERFECT_RESTART
1109 vinfo(24)='_FillValue'
1110 aval(6)=spval
1111# else
1112 vinfo(20)='mask_rho'
1113# endif
1114# endif
1115 vinfo(21)=vname(6,idhsbl)
1116 vinfo(22)='coordinates'
1117 aval(5)=real(iinfo(1,idhsbl,ng),r8)
1118 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idhsbl), &
1119 & nf_frst, nvd3, sr2dgrd, aval, vinfo, ncname)
1120 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1121# endif
1122
1123# ifdef LMD_BKPP
1124!
1125! Define depth of bottom boundary layer.
1126!
1127 vinfo( 1)=vname(1,idhbbl)
1128 vinfo( 2)=vname(2,idhbbl)
1129 vinfo( 3)=vname(3,idhbbl)
1130 vinfo(14)=vname(4,idhbbl)
1131 vinfo(16)=vname(1,idtime)
1132# if defined WRITE_WATER && defined MASKING
1133# if defined PERFECT_RESTART
1134 vinfo(24)='_FillValue'
1135 aval(6)=spval
1136# else
1137 vinfo(20)='mask_rho'
1138# endif
1139# endif
1140 vinfo(21)=vname(6,idhbbl)
1141 vinfo(22)='coordinates'
1142 aval(5)=real(iinfo(1,idhbbl,ng),r8)
1143 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idhbbl), &
1144 & nf_frst, nvd3, sr2dgrd, aval, vinfo, ncname)
1145 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1146# endif
1147# if defined PERFECT_RESTART && defined LMD_NONLOCAL
1148!
1149! Define out KPP nonlocal transport.
1150!
1151 DO itrc=1,nat
1152 vinfo( 1)=vname(1,idghat(itrc))
1153 vinfo( 2)=vname(2,idghat(itrc))
1154 vinfo( 3)=vname(3,idghat(itrc))
1155 vinfo(14)=vname(4,idghat(itrc))
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,idghat(itrc))
1161 vinfo(22)='coordinates'
1162 aval(5)=real(iinfo(1,idghat(itrc),ng),r8)
1163 status=def_var(ng, model, rst(ng)%ncid, &
1164 & rst(ng)%Vid(idghat(itrc)), nf_frst, &
1165 & nvd4, w3dgrd, aval, vinfo, ncname)
1166 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1167 END DO
1168# endif
1169# if defined BVF_MIXING || defined LMD_MIXING || \
1170 defined gls_mixing || defined my25_mixing
1171!
1172! Define vertical viscosity coefficient.
1173!
1174 vinfo( 1)=vname(1,idvvis)
1175 vinfo( 2)=vname(2,idvvis)
1176 vinfo( 3)=vname(3,idvvis)
1177 vinfo(14)=vname(4,idvvis)
1178 vinfo(16)=vname(1,idtime)
1179 vinfo(21)=vname(6,idvvis)
1180 vinfo(22)='coordinates'
1181 aval(5)=real(iinfo(1,idvvis,ng),r8)
1182 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idvvis), &
1183 & nf_frst, nvd4, w3dgrd, aval, vinfo, ncname, &
1184 & setfillval = .false.)
1185 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1186!
1187! Define vertical diffusion coefficient for potential temperature.
1188!
1189 vinfo( 1)=vname(1,idtdif)
1190 vinfo( 2)=vname(2,idtdif)
1191 vinfo( 3)=vname(3,idtdif)
1192 vinfo(14)=vname(4,idtdif)
1193 vinfo(16)=vname(1,idtime)
1194 vinfo(21)=vname(6,idtdif)
1195 vinfo(22)='coordinates'
1196 aval(5)=real(iinfo(1,idtdif,ng),r8)
1197 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idtdif), &
1198 & nf_frst, nvd4, w3dgrd, aval, vinfo, ncname, &
1199 & setfillval = .false.)
1200 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1201
1202# ifdef SALINITY
1203!
1204! Define vertical diffusion coefficient for salinity.
1205!
1206 vinfo( 1)=vname(1,idsdif)
1207 vinfo( 2)=vname(2,idsdif)
1208 vinfo( 3)=vname(3,idsdif)
1209 vinfo(14)=vname(4,idsdif)
1210 vinfo(16)=vname(1,idtime)
1211 vinfo(21)=vname(6,idsdif)
1212 vinfo(22)='coordinates'
1213 aval(5)=real(iinfo(1,idsdif,ng),r8)
1214 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idsdif), &
1215 & nf_frst, nvd4, w3dgrd, aval, vinfo, ncname, &
1216 & setfillval = .false.)
1217 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1218# endif
1219# endif
1220# if defined PERFECT_RESTART && \
1221 (defined gls_mixing || defined my25_mixing)
1222!
1223! Define turbulent kinetic energy.
1224!
1225 vinfo( 1)=vname(1,idmtke)
1226 vinfo( 2)=vname(2,idmtke)
1227 vinfo( 3)=vname(3,idmtke)
1228 vinfo(14)=vname(4,idmtke)
1229 vinfo(16)=vname(1,idtime)
1230 vinfo(21)=vname(6,idmtke)
1231 vinfo(22)='coordinates'
1232 aval(5)=real(iinfo(1,idmtke,ng),r8)
1233 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idmtke), &
1234 & nf_frst, nvd5, k3dgrd, aval, vinfo, ncname, &
1235 & setfillval = .false.)
1236 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1237!
1238! Define turbulent kinetic energy time length scale.
1239!
1240 vinfo( 1)=vname(1,idmtls)
1241 vinfo( 2)=vname(2,idmtls)
1242 vinfo( 3)=vname(3,idmtls)
1243 vinfo(14)=vname(4,idmtls)
1244 vinfo(16)=vname(1,idtime)
1245 vinfo(21)=vname(6,idmtls)
1246 vinfo(22)='coordinates'
1247 aval(5)=real(iinfo(1,idmtls,ng),r8)
1248 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idmtls), &
1249 & nf_frst, nvd5, k3dgrd, aval, vinfo, ncname, &
1250 & setfillval = .false.)
1251 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1252!
1253! Define vertical mixing turbulent length scale.
1254!
1255 vinfo( 1)=vname(1,idvmls)
1256 vinfo( 2)=vname(2,idvmls)
1257 vinfo( 3)=vname(3,idvmls)
1258 vinfo(14)=vname(4,idvmls)
1259 vinfo(16)=vname(1,idtime)
1260# if defined WRITE_WATER && defined MASKING
1261# if defined PERFECT_RESTART
1262 vinfo(24)='_FillValue'
1263 aval(6)=spval
1264# else
1265 vinfo(20)='mask_rho'
1266# endif
1267# endif
1268 vinfo(21)=vname(6,idvmls)
1269 vinfo(22)='coordinates'
1270 aval(5)=real(iinfo(1,idvmls,ng),r8)
1271 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idvmls), &
1272 & nf_frst, nvd4, w3dgrd, aval, vinfo, ncname)
1273 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1274!
1275! Define turbulent kinetic energy vertical diffusion coefficient.
1276!
1277 vinfo( 1)=vname(1,idvmkk)
1278 vinfo( 2)=vname(2,idvmkk)
1279 vinfo( 3)=vname(3,idvmkk)
1280 vinfo(14)=vname(4,idvmkk)
1281 vinfo(16)=vname(1,idtime)
1282# if defined WRITE_WATER && defined MASKING
1283# if defined PERFECT_RESTART
1284 vinfo(24)='_FillValue'
1285 aval(6)=spval
1286# else
1287 vinfo(20)='mask_rho'
1288# endif
1289# endif
1290 vinfo(21)=vname(6,idvmkk)
1291 vinfo(22)='coordinates'
1292 aval(5)=real(iinfo(1,idvmkk,ng),r8)
1293 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idvmkk), &
1294 & nf_frst, nvd4, w3dgrd, aval, vinfo, ncname)
1295 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1296
1297# ifdef GLS_MIXING
1298!
1299! Define turbulent length scale vertical diffusion coefficient.
1300!
1301 vinfo( 1)=vname(1,idvmkp)
1302 vinfo( 2)=vname(2,idvmkp)
1303 vinfo( 3)=vname(3,idvmkp)
1304 vinfo(14)=vname(4,idvmkp)
1305 vinfo(16)=vname(1,idtime)
1306# if defined WRITE_WATER && defined MASKING
1307# if defined PERFECT_RESTART
1308 vinfo(24)='_FillValue'
1309 aval(6)=spval
1310# else
1311 vinfo(20)='mask_rho'
1312# endif
1313# endif
1314 vinfo(21)=vname(6,idvmkp)
1315 vinfo(22)='coordinates'
1316 aval(5)=real(iinfo(1,idvmkp,ng),r8)
1317 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idvmkp), &
1318 & nf_frst, nvd4, w3dgrd, aval, vinfo, ncname)
1319 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1320# endif
1321# endif
1322# ifdef SEDIMENT
1323# ifdef BEDLOAD
1324!
1325! Define Bedload U-direction.
1326!
1327 DO i=1,nst
1328 vinfo( 1)=vname(1,idubld(i))
1329 vinfo( 2)=vname(2,idubld(i))
1330 vinfo( 3)=vname(3,idubld(i))
1331 vinfo(14)=vname(4,idubld(i))
1332 vinfo(16)=vname(1,idtime)
1333# if defined WRITE_WATER && defined MASKING
1334# if defined PERFECT_RESTART
1335 vinfo(24)='_FillValue'
1336 aval(6)=spval
1337# else
1338 vinfo(20)='mask_u'
1339# endif
1340# endif
1341 vinfo(21)=vname(6,idubld(i))
1342 vinfo(22)='coordinates'
1343 aval(5)=real(iinfo(1,idubld(i),ng),r8)
1344 status=def_var(ng, model, rst(ng)%ncid, &
1345 & rst(ng)%Vid(idubld(i)), nf_frst, &
1346 & nvd3, su2dgrd, aval, vinfo, ncname)
1347 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1348!
1349! Define Bedload V-direction.
1350!
1351 vinfo( 1)=vname(1,idvbld(i))
1352 vinfo( 2)=vname(2,idvbld(i))
1353 vinfo( 3)=vname(3,idvbld(i))
1354 vinfo(14)=vname(4,idvbld(i))
1355 vinfo(16)=vname(1,idtime)
1356# if defined WRITE_WATER && defined MASKING
1357# if defined PERFECT_RESTART
1358 vinfo(24)='_FillValue'
1359 aval(6)=spval
1360# else
1361 vinfo(20)='mask_v'
1362# endif
1363# endif
1364 vinfo(21)=vname(6,idvbld(i))
1365 vinfo(22)='coordinates'
1366 aval(5)=real(iinfo(1,idvbld(i),ng),r8)
1367 status=def_var(ng, model, rst(ng)%ncid, &
1368 & rst(ng)%Vid(idvbld(i)), nf_frst, &
1369 & nvd3, sv2dgrd, aval, vinfo, ncname)
1370 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1371 END DO
1372# endif
1373!
1374! Define sediment fraction of each size class in each bed layer.
1375!
1376 DO i=1,nst
1377 vinfo( 1)=vname(1,idfrac(i))
1378 vinfo( 2)=vname(2,idfrac(i))
1379 vinfo( 3)=vname(3,idfrac(i))
1380 vinfo(14)=vname(4,idfrac(i))
1381 vinfo(16)=vname(1,idtime)
1382 WRITE (vinfo(19),40) 1000.0_r8*sd50(i,ng)
1383# if defined WRITE_WATER && defined MASKING
1384# if defined PERFECT_RESTART
1385 vinfo(24)='_FillValue'
1386 aval(6)=spval
1387# else
1388 vinfo(20)='mask_rho'
1389# endif
1390# endif
1391 vinfo(21)=vname(6,idfrac(i))
1392 vinfo(22)='coordinates'
1393 aval(5)=real(iinfo(1,idfrac(i),ng),r8)
1394 status=def_var(ng, model, rst(ng)%ncid, &
1395 & rst(ng)%Vid(idfrac(i)), nf_frst, &
1396 & nvd4, sr3dgrd, aval, vinfo, ncname)
1397 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1398 END DO
1399!
1400! Define sediment mass of each size class in each bed layer.
1401!
1402 DO i=1,nst
1403 vinfo( 1)=vname(1,idbmas(i))
1404 vinfo( 2)=vname(2,idbmas(i))
1405 vinfo( 3)=vname(3,idbmas(i))
1406 vinfo(14)=vname(4,idbmas(i))
1407 vinfo(16)=vname(1,idtime)
1408 WRITE (vinfo(19),40) 1000.0_r8*sd50(i,ng)
1409# if defined WRITE_WATER && defined MASKING
1410# if defined PERFECT_RESTART
1411 vinfo(24)='_FillValue'
1412 aval(6)=spval
1413# else
1414 vinfo(20)='mask_rho'
1415# endif
1416# endif
1417 vinfo(21)=vname(6,idbmas(i))
1418 vinfo(22)='coordinates'
1419 aval(5)=real(iinfo(1,idbmas(i),ng),r8)
1420 status=def_var(ng, model, rst(ng)%ncid, &
1421 & rst(ng)%Vid(idbmas(i)), nf_frst, &
1422 & nvd4, sr3dgrd, aval, vinfo, ncname)
1423 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1424 END DO
1425!
1426! Define sediment properties in each bed layer.
1427!
1428 DO i=1,mbedp
1429 vinfo( 1)=vname(1,idsbed(i))
1430 vinfo( 2)=vname(2,idsbed(i))
1431 vinfo( 3)=vname(3,idsbed(i))
1432 vinfo(14)=vname(4,idsbed(i))
1433 vinfo(16)=vname(1,idtime)
1434# if defined WRITE_WATER && defined MASKING
1435# if defined PERFECT_RESTART
1436 vinfo(24)='_FillValue'
1437 aval(6)=spval
1438# else
1439 vinfo(20)='mask_rho'
1440# endif
1441# endif
1442 vinfo(21)=vname(6,idsbed(i))
1443 vinfo(22)='coordinates'
1444 aval(5)=real(iinfo(1,idsbed(i),ng),r8)
1445 status=def_var(ng, model, rst(ng)%ncid, &
1446 & rst(ng)%Vid(idsbed(i)), nf_frst, &
1447 & nvd4, sr3dgrd, aval, vinfo, ncname)
1448 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1449 END DO
1450# endif
1451# if defined SEDIMENT || defined BBL_MODEL
1452!
1453! define exposed sediment layer properties. Notice that only the
1454! first four properties (mean grain diameter, mean grain density,
1455! mean settling velocity, mean critical erosion stress,
1456! ripple length and ripple height) are written.
1457!
1458 DO i=1,6
1459 vinfo( 1)=vname(1,idbott(i))
1460 vinfo( 2)=vname(2,idbott(i))
1461 vinfo( 3)=vname(3,idbott(i))
1462 vinfo(14)=vname(4,idbott(i))
1463 vinfo(16)=vname(1,idtime)
1464# if defined WRITE_WATER && defined MASKING
1465# if defined PERFECT_RESTART
1466 vinfo(24)='_FillValue'
1467 aval(6)=spval
1468# else
1469 vinfo(20)='mask_rho'
1470# endif
1471# endif
1472 vinfo(21)=vname(6,idbott(i))
1473 vinfo(22)='coordinates'
1474 aval(5)=real(iinfo(1,idbott(i),ng),r8)
1475 status=def_var(ng, model, rst(ng)%ncid, &
1476 & rst(ng)%Vid(idbott(i)), nf_frst, &
1477 & nvd3, sr2dgrd, aval, vinfo, ncname)
1478 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1479 END DO
1480# endif
1481#endif
1482#ifdef WEC
1483!
1484! Define 2D Stokes U-velocity.
1485!
1486 vinfo( 1)=vname(1,idu2sd)
1487 vinfo( 2)=vname(2,idu2sd)
1488 vinfo( 3)=vname(3,idu2sd)
1489 vinfo(14)=vname(4,idu2sd)
1490 vinfo(16)=vname(1,idtime)
1491# if defined WRITE_WATER && defined MASKING
1492# if defined PERFECT_RESTART
1493 vinfo(24)='_FillValue'
1494 aval(6)=spval
1495# else
1496 vinfo(20)='mask_u'
1497# endif
1498# endif
1499 vinfo(21)=vname(6,idu2sd)
1500 vinfo(22)='coordinates'
1501 aval(5)=real(iinfo(1,idu2sd,ng),r8)
1502 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idu2sd), &
1503 & nf_frst, nvd3, su2dgrd, aval, vinfo, ncname)
1504 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1505!
1506! Define 2D Stokes V-velocity.
1507!
1508 vinfo( 1)=vname(1,idv2sd)
1509 vinfo( 2)=vname(2,idv2sd)
1510 vinfo( 3)=vname(3,idv2sd)
1511 vinfo(14)=vname(4,idv2sd)
1512 vinfo(16)=vname(1,idtime)
1513# if defined WRITE_WATER && defined MASKING
1514# if defined PERFECT_RESTART
1515 vinfo(24)='_FillValue'
1516 aval(6)=spval
1517# else
1518 vinfo(20)='mask_v'
1519# endif
1520# endif
1521 vinfo(21)=vname(6,idv2sd)
1522 vinfo(22)='coordinates'
1523 aval(5)=real(iinfo(1,idv2sd,ng),r8)
1524 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idv2sd), &
1525 & nf_frst, nvd3, sv2dgrd, aval, vinfo, ncname)
1526 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1527
1528# ifdef SOLVE3D
1529!
1530! Define 3D Stokes U-velocity.
1531!
1532 vinfo( 1)=vname(1,idu3sd)
1533 vinfo( 2)=vname(2,idu3sd)
1534 vinfo( 3)=vname(3,idu3sd)
1535 vinfo(14)=vname(4,idu3sd)
1536 vinfo(16)=vname(1,idtime)
1537# if defined WRITE_WATER && defined MASKING
1538# if defined PERFECT_RESTART
1539 vinfo(24)='_FillValue'
1540 aval(6)=spval
1541# else
1542 vinfo(20)='mask_u'
1543# endif
1544# endif
1545 vinfo(21)=vname(6,idu3sd)
1546 vinfo(22)='coordinates'
1547 aval(5)=real(iinfo(1,idu3sd,ng),r8)
1548 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idu3sd), &
1549 & nf_frst, nvd4, su3dgrd, aval, vinfo, ncname)
1550 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1551!
1552! Define 3D Stokes V-velocity.
1553!
1554 vinfo( 1)=vname(1,idv3sd)
1555 vinfo( 2)=vname(2,idv3sd)
1556 vinfo( 3)=vname(3,idv3sd)
1557 vinfo(14)=vname(4,idv3sd)
1558 vinfo(16)=vname(1,idtime)
1559# if defined WRITE_WATER && defined MASKING
1560# if defined PERFECT_RESTART
1561 vinfo(24)='_FillValue'
1562 aval(6)=spval
1563# else
1564 vinfo(20)='mask_v'
1565# endif
1566# endif
1567 vinfo(21)=vname(6,idv3sd)
1568 vinfo(22)='coordinates'
1569 aval(5)=real(iinfo(1,idv3sd,ng),r8)
1570 status=def_var(ng, model, rst(ng)%ncid, rst(ng)%Vid(idv3sd), &
1571 & nf_frst, nvd4, sv3dgrd, aval, vinfo, ncname)
1572 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1573# endif
1574#endif
1575#ifdef ICE_MODEL
1576!
1577!-----------------------------------------------------------------------
1578! Define sea-ice model variables.
1579!-----------------------------------------------------------------------
1580!
1581 CALL ice_def_nf90 (ng, model, ldefine, hout, rst, &
1582 t2dgrd, u2dgrd, v2dgrd)
1583 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1584#endif
1585!
1586!-----------------------------------------------------------------------
1587! Leave definition mode.
1588!-----------------------------------------------------------------------
1589!
1590 CALL netcdf_enddef (ng, model, ncname, rst(ng)%ncid)
1591 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1592!
1593!-----------------------------------------------------------------------
1594! Write out time-recordless, information variables.
1595!-----------------------------------------------------------------------
1596!
1597 CALL wrt_info (ng, model, rst(ng)%ncid, ncname)
1598 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1599
1600 END IF define
1601!
1602!=======================================================================
1603! Open an existing restart file, check its contents, and prepare for
1604! appending data.
1605!=======================================================================
1606!
1607 query : IF (.not.ldefine) THEN
1608 ncname=rst(ng)%name
1609!
1610! Open restart file for read/write.
1611!
1612 CALL netcdf_open (ng, model, ncname, 1, rst(ng)%ncid)
1613 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
1614 WRITE (stdout,50) trim(ncname)
1615 RETURN
1616 END IF
1617!
1618! Inquire about the dimensions and check for consistency.
1619!
1620 CALL netcdf_check_dim (ng, model, ncname, &
1621 & ncid = rst(ng)%ncid)
1622 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1623!
1624! Inquire about the variables.
1625!
1626 CALL netcdf_inq_var (ng, model, ncname, &
1627 & ncid = rst(ng)%ncid)
1628 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1629!
1630! Initialize logical switches.
1631!
1632 DO i=1,nv
1633 got_var(i)=.false.
1634 END DO
1635!
1636! Scan variable list from input NetCDF and activate switches for
1637! restart variables. Get variable IDs.
1638!
1639 DO i=1,n_var
1640 IF (trim(var_name(i)).eq.trim(vname(1,idtime))) THEN
1641 got_var(idtime)=.true.
1642 rst(ng)%Vid(idtime)=var_id(i)
1643#if defined SEDIMENT && defined SED_MORPH
1644 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idbath))) THEN
1645 got_var(idbath)=.true.
1646 rst(ng)%Vid(idbath)=var_id(i)
1647#endif
1648#if defined WET_DRY
1649 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrwet))) THEN
1650 got_var(idrwet)=.true.
1651 rst(ng)%Vid(idrwet)=var_id(i)
1652 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduwet))) THEN
1653 got_var(iduwet)=.true.
1654 rst(ng)%Vid(iduwet)=var_id(i)
1655 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvwet))) THEN
1656 got_var(idvwet)=.true.
1657 rst(ng)%Vid(idvwet)=var_id(i)
1658 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idpwet))) THEN
1659 got_var(idpwet)=.true.
1660 rst(ng)%Vid(idpwet)=var_id(i)
1661#endif
1662 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idfsur))) THEN
1663 got_var(idfsur)=.true.
1664 rst(ng)%Vid(idfsur)=var_id(i)
1665#ifdef PERFECT_RESTART
1666 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrzet))) THEN
1667 got_var(idrzet)=.true.
1668 rst(ng)%Vid(idrzet)=var_id(i)
1669#endif
1670 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubar))) THEN
1671 got_var(idubar)=.true.
1672 rst(ng)%Vid(idubar)=var_id(i)
1673#ifdef PERFECT_RESTART
1674 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idru2d))) THEN
1675 got_var(idru2d)=.true.
1676 rst(ng)%Vid(idru2d)=var_id(i)
1677#endif
1678 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbar))) THEN
1679 got_var(idvbar)=.true.
1680 rst(ng)%Vid(idvbar)=var_id(i)
1681#ifdef PERFECT_RESTART
1682 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrv2d))) THEN
1683 got_var(idrv2d)=.true.
1684 rst(ng)%Vid(idrv2d)=var_id(i)
1685#endif
1686#ifdef SOLVE3D
1687 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduvel))) THEN
1688 got_var(iduvel)=.true.
1689 rst(ng)%Vid(iduvel)=var_id(i)
1690# ifdef PERFECT_RESTART
1691 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idru3d))) THEN
1692 got_var(idru3d)=.true.
1693 rst(ng)%Vid(idru3d)=var_id(i)
1694# endif
1695 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvel))) THEN
1696 got_var(idvvel)=.true.
1697 rst(ng)%Vid(idvvel)=var_id(i)
1698# ifdef PERFECT_RESTART
1699 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrv3d))) THEN
1700 got_var(idrv3d)=.true.
1701 rst(ng)%Vid(idrv3d)=var_id(i)
1702# endif
1703 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iddano))) THEN
1704 got_var(iddano)=.true.
1705 rst(ng)%Vid(iddano)=var_id(i)
1706# ifdef LMD_SKPP
1707 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idhsbl))) THEN
1708 got_var(idhsbl)=.true.
1709 rst(ng)%Vid(idhsbl)=var_id(i)
1710# endif
1711# ifdef LMD_BKPP
1712 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idhbbl))) THEN
1713 got_var(idhbbl)=.true.
1714 rst(ng)%Vid(idhbbl)=var_id(i)
1715# endif
1716# if defined PERFECT_RESTART && defined LMD_NONLOCAL
1717 ELSE IF (trim(var_name(i)).eq. &
1718 & trim(vname(1,idghat(itemp)))) THEN
1719 got_var(idghat(itemp))=.true.
1720 rst(ng)%Vid(idghat(itemp))=var_id(i)
1721# ifdef SALINITY
1722 ELSE IF (trim(var_name(i)).eq. &
1723 & trim(vname(1,idghat(isalt)))) THEN
1724 got_var(idghat(isalt))=.true.
1725 rst(ng)%Vid(idghat(isalt))=var_id(i)
1726# endif
1727# endif
1728 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvis))) THEN
1729 got_var(idvvis)=.true.
1730 rst(ng)%Vid(idvvis)=var_id(i)
1731 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idtdif))) THEN
1732 got_var(idtdif)=.true.
1733 rst(ng)%Vid(idtdif)=var_id(i)
1734 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idsdif))) THEN
1735 got_var(idsdif)=.true.
1736 rst(ng)%Vid(idsdif)=var_id(i)
1737# if defined PERFECT_RESTART && \
1738 (defined gls_mixing || defined my25_mixing)
1739 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idmtke))) THEN
1740 got_var(idmtke)=.true.
1741 rst(ng)%Vid(idmtke)=var_id(i)
1742 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idmtls))) THEN
1743 got_var(idmtls)=.true.
1744 rst(ng)%Vid(idmtls)=var_id(i)
1745 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvmls))) THEN
1746 got_var(idvmls)=.true.
1747 rst(ng)%Vid(idvmls)=var_id(i)
1748 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvmkk))) THEN
1749 got_var(idvmkk)=.true.
1750 rst(ng)%Vid(idvmkk)=var_id(i)
1751# ifdef GLS_MIXING
1752 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvmkp))) THEN
1753 got_var(idvmkp)=.true.
1754 rst(ng)%Vid(idvmkp)=var_id(i)
1755# endif
1756# endif
1757#endif
1758#ifdef WEC
1759 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu2sd))) THEN
1760 got_var(idu2sd)=.true.
1761 rst(ng)%Vid(idu2sd)=var_id(i)
1762 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv2sd))) THEN
1763 got_var(idv2sd)=.true.
1764 rst(ng)%Vid(idv2sd)=var_id(i)
1765# ifdef SOLVE3D
1766 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu3sd))) THEN
1767 got_var(idu3sd)=.true.
1768 rst(ng)%Vid(idu3sd)=var_id(i)
1769 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv3sd))) THEN
1770 got_var(idv3sd)=.true.
1771 rst(ng)%Vid(idv3sd)=var_id(i)
1772# endif
1773#endif
1774 END IF
1775#ifdef SOLVE3D
1776 DO itrc=1,nt(ng)
1777 IF (trim(var_name(i)).eq.trim(vname(1,idtvar(itrc)))) THEN
1778 got_var(idtvar(itrc))=.true.
1779 rst(ng)%Tid(itrc)=var_id(i)
1780 END IF
1781 END DO
1782# ifdef SEDIMENT
1783 DO itrc=1,nst
1784 IF (trim(var_name(i)).eq. &
1785 & trim(vname(1,idfrac(itrc)))) THEN
1786 got_var(idfrac(itrc))=.true.
1787 rst(ng)%Vid(idfrac(itrc))=var_id(i)
1788 ELSE IF (trim(var_name(i)).eq. &
1789 & trim(vname(1,idbmas(itrc)))) THEN
1790 got_var(idbmas(itrc))=.true.
1791 rst(ng)%Vid(idbmas(itrc))=var_id(i)
1792# ifdef BEDLOAD
1793 ELSE IF (trim(var_name(i)).eq. &
1794 & trim(vname(1,idubld(itrc)))) THEN
1795 got_var(idubld(itrc))=.true.
1796 rst(ng)%Vid(idubld(itrc))=var_id(i)
1797 ELSE IF (trim(var_name(i)).eq. &
1798 & trim(vname(1,idvbld(itrc)))) THEN
1799 got_var(idvbld(itrc))=.true.
1800 rst(ng)%Vid(idvbld(itrc))=var_id(i)
1801# endif
1802 END IF
1803 END DO
1804 DO itrc=1,mbedp
1805 IF (trim(var_name(i)).eq.trim(vname(1,idsbed(itrc)))) THEN
1806 got_var(idsbed(itrc))=.true.
1807 rst(ng)%Vid(idsbed(itrc))=var_id(i)
1808 END IF
1809 END DO
1810# endif
1811# if defined SEDIMENT || defined BBL_MODEL
1812 DO itrc=1,6
1813 IF (trim(var_name(i)).eq.trim(vname(1,idbott(itrc)))) THEN
1814 got_var(idbott(itrc))=.true.
1815 rst(ng)%Vid(idbott(itrc))=var_id(i)
1816 END IF
1817 END DO
1818# endif
1819#endif
1820 END DO
1821!
1822! Check if initialization variables are available in input NetCDF
1823! file.
1824!
1825 IF (.not.got_var(idtime)) THEN
1826 IF (master) WRITE (stdout,60) trim(vname(1,idtime)), &
1827 & trim(ncname)
1828 exit_flag=3
1829 RETURN
1830 END IF
1831#if defined SEDIMENT && defined SED_MORPH
1832 IF (.not.got_var(idbath)) THEN
1833 IF (master) WRITE (stdout,60) trim(vname(1,idbath)), &
1834 & trim(ncname)
1835 exit_flag=3
1836 RETURN
1837 END IF
1838#endif
1839#if defined WET_DRY
1840 IF (.not.got_var(idrwet)) THEN
1841 IF (master) WRITE (stdout,60) trim(vname(1,idrwet)), &
1842 & trim(ncname)
1843 exit_flag=3
1844 RETURN
1845 END IF
1846 IF (.not.got_var(iduwet)) THEN
1847 IF (master) WRITE (stdout,60) trim(vname(1,iduwet)), &
1848 & trim(ncname)
1849 exit_flag=3
1850 RETURN
1851 END IF
1852 IF (.not.got_var(idvwet)) THEN
1853 IF (master) WRITE (stdout,60) trim(vname(1,idvwet)), &
1854 & trim(ncname)
1855 exit_flag=3
1856 RETURN
1857 END IF
1858 IF (.not.got_var(idpwet)) THEN
1859 IF (master) WRITE (stdout,60) trim(vname(1,idpwet)), &
1860 & trim(ncname)
1861 exit_flag=3
1862 RETURN
1863 END IF
1864#endif
1865 IF (.not.got_var(idfsur)) THEN
1866 IF (master) WRITE (stdout,60) trim(vname(1,idfsur)), &
1867 & trim(ncname)
1868 exit_flag=3
1869 RETURN
1870 END IF
1871#ifdef PERFECT_RESTART
1872 IF (.not.got_var(idrzet)) THEN
1873 IF (master) WRITE (stdout,60) trim(vname(1,idrzet)), &
1874 & trim(ncname)
1875 exit_flag=3
1876 RETURN
1877 END IF
1878#endif
1879 IF (.not.got_var(idubar)) THEN
1880 IF (master) WRITE (stdout,60) trim(vname(1,idubar)), &
1881 & trim(ncname)
1882 exit_flag=3
1883 RETURN
1884 END IF
1885#ifdef PERFECT_RESTART
1886 IF (.not.got_var(idru2d)) THEN
1887 IF (master) WRITE (stdout,60) trim(vname(1,idru2d)), &
1888 & trim(ncname)
1889 exit_flag=3
1890 RETURN
1891 END IF
1892#endif
1893 IF (.not.got_var(idvbar)) THEN
1894 IF (master) WRITE (stdout,60) trim(vname(1,idvbar)), &
1895 & trim(ncname)
1896 exit_flag=3
1897 RETURN
1898 END IF
1899#ifdef PERFECT_RESTART
1900 IF (.not.got_var(idrv2d)) THEN
1901 IF (master) WRITE (stdout,60) trim(vname(1,idrv2d)), &
1902 & trim(ncname)
1903 exit_flag=3
1904 RETURN
1905 END IF
1906#endif
1907#ifdef SOLVE3D
1908 IF (.not.got_var(iduvel)) THEN
1909 IF (master) WRITE (stdout,60) trim(vname(1,iduvel)), &
1910 & trim(ncname)
1911 exit_flag=3
1912 RETURN
1913 END IF
1914# ifdef PERFECT_RESTART
1915 IF (.not.got_var(idru3d)) THEN
1916 IF (master) WRITE (stdout,60) trim(vname(1,idru3d)), &
1917 & trim(ncname)
1918 exit_flag=3
1919 RETURN
1920 END IF
1921# endif
1922 IF (.not.got_var(idvvel)) THEN
1923 IF (master) WRITE (stdout,60) trim(vname(1,idvvel)), &
1924 & trim(ncname)
1925 exit_flag=3
1926 RETURN
1927 END IF
1928# ifdef PERFECT_RESTART
1929 IF (.not.got_var(idrv3d)) THEN
1930 IF (master) WRITE (stdout,60) trim(vname(1,idrv3d)), &
1931 & trim(ncname)
1932 exit_flag=3
1933 RETURN
1934 END IF
1935# endif
1936 IF (.not.got_var(iddano)) THEN
1937 IF (master) WRITE (stdout,60) trim(vname(1,iddano)), &
1938 & trim(ncname)
1939 exit_flag=3
1940 RETURN
1941 END IF
1942# if defined PERFECT_RESTART && \
1943 (defined gls_mixing || defined my25_mixing)
1944 IF (.not.got_var(idmtke)) THEN
1945 IF (master) WRITE (stdout,60) trim(vname(1,idmtke)), &
1946 & trim(ncname)
1947 exit_flag=3
1948 RETURN
1949 END IF
1950 IF (.not.got_var(idmtls)) THEN
1951 IF (master) WRITE (stdout,60) trim(vname(1,idmtls)), &
1952 & trim(ncname)
1953 exit_flag=3
1954 RETURN
1955 END IF
1956 IF (.not.got_var(idvmls)) THEN
1957 IF (master) WRITE (stdout,60) trim(vname(1,idvmls)), &
1958 & trim(ncname)
1959 exit_flag=3
1960 RETURN
1961 END IF
1962 IF (.not.got_var(idvmkk)) THEN
1963 IF (master) WRITE (stdout,60) trim(vname(1,idvmkk)), &
1964 & trim(ncname)
1965 exit_flag=3
1966 RETURN
1967 END IF
1968# ifdef GLS_MIXING
1969 IF (.not.got_var(idvmkp)) THEN
1970 IF (master) WRITE (stdout,60) trim(vname(1,idvmkp)), &
1971 & trim(ncname)
1972 exit_flag=3
1973 RETURN
1974 END IF
1975# endif
1976# endif
1977#endif
1978#ifdef WEC
1979 IF (.not.got_var(idu2sd)) THEN
1980 IF (master) WRITE (stdout,60) trim(vname(1,idu2sd)), &
1981 & trim(ncname)
1982 exit_flag=3
1983 RETURN
1984 END IF
1985 IF (.not.got_var(idv2sd)) THEN
1986 IF (master) WRITE (stdout,60) trim(vname(1,idv2sd)), &
1987 & trim(ncname)
1988 exit_flag=3
1989 RETURN
1990 END IF
1991# ifdef SOLVE3D
1992 IF (.not.got_var(idu3sd)) THEN
1993 IF (master) WRITE (stdout,60) trim(vname(1,idu3sd)), &
1994 & trim(ncname)
1995 exit_flag=3
1996 RETURN
1997 END IF
1998 IF (.not.got_var(idv3sd)) THEN
1999 IF (master) WRITE (stdout,60) trim(vname(1,idv3sd)), &
2000 & trim(ncname)
2001 exit_flag=3
2002 RETURN
2003 END IF
2004# endif
2005#endif
2006#ifdef SOLVE3D
2007 DO itrc=1,nt(ng)
2008 IF (.not.got_var(idtvar(itrc))) THEN
2009 IF (master) WRITE (stdout,60) trim(vname(1,idtvar(itrc))), &
2010 & trim(ncname)
2011 exit_flag=3
2012 RETURN
2013 END IF
2014 END DO
2015# ifdef SEDIMENT
2016 DO i=1,nst
2017 IF (.not.got_var(idfrac(i))) THEN
2018 IF (master) WRITE (stdout,60) trim(vname(1,idfrac(i))), &
2019 & trim(ncname)
2020 exit_flag=3
2021 RETURN
2022 END IF
2023 IF (.not.got_var(idbmas(i))) THEN
2024 IF (master) WRITE (stdout,60) trim(vname(1,idbmas(i))), &
2025 & trim(ncname)
2026 exit_flag=3
2027 RETURN
2028 END IF
2029# ifdef BEDLOAD
2030 IF (.not.got_var(idubld(i))) THEN
2031 IF (master) WRITE (stdout,60) trim(vname(1,idubld(i))), &
2032 & trim(ncname)
2033 exit_flag=3
2034 RETURN
2035 END IF
2036 IF (.not.got_var(idvbld(i))) THEN
2037 IF (master) WRITE (stdout,60) trim(vname(1,idvbld(i))), &
2038 & trim(ncname)
2039 exit_flag=3
2040 RETURN
2041 END IF
2042# endif
2043 END DO
2044 DO i=1,mbedp
2045 IF (.not.got_var(idsbed(i))) THEN
2046 IF (master) WRITE (stdout,60) trim(vname(1,idsbed(i))), &
2047 & trim(ncname)
2048 exit_flag=3
2049 RETURN
2050 END IF
2051 END DO
2052# endif
2053# if defined SEDIMENT || defined BBL_MODEL
2054 DO i=1,6
2055 IF (.not.got_var(idbott(i))) THEN
2056 IF (master) WRITE (stdout,60) trim(vname(1,idbott(i))), &
2057 & trim(ncname)
2058 exit_flag=3
2059 RETURN
2060 END IF
2061 END DO
2062# endif
2063#endif
2064#ifdef ICE_MODEL
2065!
2066! Scan sea-ice variables from input NetCDF and activate switches for
2067! restart variables. Get variable IDs.
2068!
2069 CALL ice_def_nf90 (ng, model, ldefine, hout, rst)
2070#endif
2071!
2072! Set unlimited time record dimension to current value.
2073!
2074 IF (lcyclerst(ng)) THEN
2075 rst(ng)%Rindex=0
2076 ELSE
2077 rst(ng)%Rindex=rec_size
2078 END IF
2079 END IF query
2080!
2081 10 FORMAT (2x,'DEF_RST_NF90 - creating restart file,',t56, &
2082 & 'Grid ',i2.2,': ',a)
2083 20 FORMAT (2x,'DEF_RST_NF90 - inquiring restart file,',t56, &
2084 & 'Grid ',i2.2,': ',a)
2085 30 FORMAT (/,' DEF_RST_NF90 - unable to create restart NetCDF', &
2086 & ' file:',a)
2087 40 FORMAT (1pe11.4,1x,'millimeter')
2088 50 FORMAT (/,' DEF_RST_NF90 - unable to open restart NetCDF', &
2089 & ' file: ',a)
2090 60 FORMAT (/,' DEF_RST_NF90 - unable to find variable: ',a,2x, &
2091 & ' in restart NetCDF file: ',a)
2092!
2093 RETURN
2094 END SUBROUTINE def_rst_nf90
2095
2096#if defined PIO_LIB && defined DISTRIBUTE
2097!
2098!***********************************************************************
2099 SUBROUTINE def_rst_pio (ng, model)
2100!***********************************************************************
2101!
2102 USE mod_pio_netcdf
2103!
2104! Imported variable declarations.
2105!
2106 integer, intent(in) :: ng, model
2107!
2108! Local variable declarations.
2109!
2110 logical :: ldefine, got_var(nv)
2111!
2112 integer, parameter :: natt = 25
2113
2114 integer :: i, j, nvd3, nvd4, nvd5
2115 integer :: recdim, status
2116
2117 integer :: dimids(ndimid)
2118 integer :: r2dgrd(4), ru2dgrd(4), rv2dgrd(4)
2119 integer :: sp2dgrd(3), sr2dgrd(3), su2dgrd(3), sv2dgrd(3)
2120 integer :: sr3dgrd(4), su3dgrd(4), sv3dgrd(4)
2121 integer :: t2dgrd(4), u2dgrd(4), v2dgrd(4)
2122
2123# ifdef SOLVE3D
2124 integer :: itrc
2125
2126 integer :: k3dgrd(5), t3dgrd(5)
2127 integer :: r3dgrd(4), ru3dgrd(5), rv3dgrd(5)
2128 integer :: u3dgrd(5), v3dgrd(5), w3dgrd(4)
2129# endif
2130!
2131 real(r8) :: aval(6)
2132!
2133 character (len=256) :: ncname
2134 character (len=MaxLen) :: vinfo(natt)
2135
2136 character (len=*), parameter :: myfile = &
2137 & __FILE__//", def_rst_pio"
2138!
2139 TYPE (var_desc_t) :: vardesc
2140!
2141 sourcefile=myfile
2142!
2143!-----------------------------------------------------------------------
2144! Set and report file name.
2145!-----------------------------------------------------------------------
2146!
2147! Activate creation of restart NetCDF file. If a restart run, the
2148! restart filename "RST(ng)%name" is different than the initial
2149! filename "INI(ng)%name".
2150!
2151 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2152 ncname=rst(ng)%name
2153 ldefine=.false.
2154 IF (((nrrec(ng).eq.0).and.(iic(ng).eq.ntstart(ng))).or. &
2155 & ((nrrec(ng).ne.0).and. &
2156 & (trim(ncname).ne.trim(ini(ng)%name)))) THEN
2157 ldefine=.true.
2158 END IF
2159!
2160 IF (master) THEN
2161 IF (ldefine) THEN
2162 WRITE (stdout,10) ng, trim(ncname)
2163 ELSE
2164 WRITE (stdout,20) ng, trim(ncname)
2165 END IF
2166 END IF
2167!
2168!=======================================================================
2169! Create a new restart NetCDF file.
2170!=======================================================================
2171!
2172 define : IF (ldefine) THEN
2173 CALL pio_netcdf_create (ng, model, trim(ncname), rst(ng)%pioFile)
2174 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
2175 IF (master) WRITE (stdout,30) trim(ncname)
2176 RETURN
2177 END IF
2178!
2179!-----------------------------------------------------------------------
2180! Define file dimensions.
2181!-----------------------------------------------------------------------
2182!
2183 dimids=0
2184!
2185 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'xi_rho', &
2186 & iobounds(ng)%xi_rho, dimids( 1))
2187 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2188
2189 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'xi_u', &
2190 & iobounds(ng)%xi_u, dimids( 2))
2191 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2192
2193 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'xi_v', &
2194 & iobounds(ng)%xi_v, dimids( 3))
2195 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2196
2197 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'xi_psi', &
2198 & iobounds(ng)%xi_psi, dimids( 4))
2199 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2200
2201 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'eta_rho', &
2202 & iobounds(ng)%eta_rho, dimids( 5))
2203 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2204
2205 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'eta_u', &
2206 & iobounds(ng)%eta_u, dimids( 6))
2207 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2208
2209 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'eta_v', &
2210 & iobounds(ng)%eta_v, dimids( 7))
2211 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2212
2213 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'eta_psi', &
2214 & iobounds(ng)%eta_psi, dimids( 8))
2215 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2216
2217# if !defined PERFECT_RESTART && \
2218 (defined write_water && defined masking)
2219 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'xy_rho', &
2220 & iobounds(ng)%xy_rho, dimids(17))
2221 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2222
2223 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'xy_u', &
2224 & iobounds(ng)%xy_u, dimids(18))
2225 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2226
2227 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'xy_v', &
2228 & iobounds(ng)%xy_v, dimids(19))
2229 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2230# endif
2231
2232# ifdef SOLVE3D
2233# if !defined PERFECT_RESTART && \
2234 (defined write_water && defined masking)
2235 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'xyz_rho', &
2236 & iobounds(ng)%xy_rho*n(ng), dimids(20))
2237 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2238
2239 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'xyz_u', &
2240 & iobounds(ng)%xy_u*n(ng), dimids(21))
2241 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2242
2243 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'xyz_v', &
2244 & iobounds(ng)%xy_v*n(ng), dimids(22))
2245 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2246
2247 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'xyz_w', &
2248 & iobounds(ng)%xy_rho*(n(ng)+1), dimids(23))
2249 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2250# endif
2251
2252 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'N', &
2253 & n(ng), dimids( 9))
2254 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2255
2256 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 's_rho', &
2257 & n(ng), dimids( 9))
2258 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2259
2260 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 's_w', &
2261 & n(ng)+1, dimids(10))
2262 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2263
2264 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'tracer', &
2265 & nt(ng), dimids(11))
2266 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2267
2268# ifdef SEDIMENT
2269 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'NST', &
2270 & nst, dimids(32))
2271 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2272
2273 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'Nbed', &
2274 & nbed, dimids(16))
2275 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2276
2277# if !defined PERFECT_RESTART && \
2278 (defined write_water && defined masking)
2279 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'xybed', &
2280 & iobounds(ng)%xy_rho*nbed, dimids(24))
2281 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2282# endif
2283# endif
2284
2285# ifdef ECOSIM
2286 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'Nbands', &
2287 & nbands, dimids(33))
2288 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2289
2290 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'Nphy', &
2291 & nphy, dimids(25))
2292 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2293
2294 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'Nbac', &
2295 & nbac, dimids(26))
2296 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2297
2298 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'Ndom', &
2299 & ndom, dimids(27))
2300 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2301
2302 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'Nfec', &
2303 & nfec, dimids(28))
2304 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2305# endif
2306# endif
2307
2308 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'boundary', &
2309 & 4, dimids(14))
2310 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2311
2312# ifdef FOUR_DVAR
2313 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'Nstate', &
2314 & nstatevar(ng), dimids(29))
2315 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2316# endif
2317
2318# ifdef PERFECT_RESTART
2319 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'two', &
2320 & 2, dimids(30))
2321 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2322
2323 status=def_dim(ng, model, rst(ng)%pioFile, ncname, 'three', &
2324 & 3, dimids(31))
2325 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2326# endif
2327
2328 status=def_dim(ng, model, rst(ng)%pioFile, ncname, &
2329 & trim(adjustl(vname(5,idtime))), &
2330 & pio_unlimited, dimids(12))
2331 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2332
2333 recdim=dimids(12)
2334!
2335! Set number of dimensions for output variables.
2336!
2337# if !defined PERFECT_RESTART && \
2338 (defined write_water && defined masking)
2339 nvd3=2
2340 nvd4=2
2341 nvd5=2
2342# else
2343 nvd3=3
2344 nvd4=4
2345 nvd5=5
2346# endif
2347!
2348! Define dimension vectors for staggered tracer type variables.
2349!
2350# if !defined PERFECT_RESTART && \
2351 (defined write_water && defined masking)
2352 t2dgrd(1)=dimids(17)
2353 t2dgrd(2)=dimids(12)
2354 sr2dgrd(1)=dimids(17)
2355 sr2dgrd(2)=dimids(12)
2356# ifdef SOLVE3D
2357 t3dgrd(1)=dimids(20)
2358 t3dgrd(2)=dimids(12)
2359 r3dgrd(1)=dimids(20)
2360 r3dgrd(2)=dimids(12)
2361# endif
2362# else
2363 t2dgrd(1)=dimids( 1)
2364 t2dgrd(2)=dimids( 5)
2365 sr2dgrd(1)=dimids( 1)
2366 sr2dgrd(2)=dimids( 5)
2367 sr2dgrd(3)=dimids(12)
2368# ifdef PERFECT_RESTART
2369 t2dgrd(3)=dimids(31)
2370 t2dgrd(4)=dimids(12)
2371# else
2372 t2dgrd(3)=dimids(12)
2373# endif
2374# ifdef SOLVE3D
2375 t3dgrd(1)=dimids( 1)
2376 t3dgrd(2)=dimids( 5)
2377 t3dgrd(3)=dimids( 9)
2378 r3dgrd(1)=dimids( 1)
2379 r3dgrd(2)=dimids( 5)
2380 r3dgrd(3)=dimids( 9)
2381# ifdef PERFECT_RESTART
2382 t3dgrd(4)=dimids(30)
2383 t3dgrd(5)=dimids(12)
2384# else
2385 t3dgrd(4)=dimids(12)
2386# endif
2387 r3dgrd(4)=dimids(12)
2388# endif
2389# endif
2390!
2391! Define dimension vectors for staggered type variables at PSI-points.
2392!
2393 sp2dgrd(1)=dimids( 4)
2394 sp2dgrd(2)=dimids( 8)
2395 sp2dgrd(3)=dimids(12)
2396!
2397! Define dimension vectors for staggered u-momentum type variables.
2398!
2399# if !defined PERFECT_RESTART && \
2400 (defined write_water && defined masking)
2401 u2dgrd(1)=dimids(18)
2402 u2dgrd(2)=dimids(12)
2403# ifdef SOLVE3D
2404 u3dgrd(1)=dimids(21)
2405 u3dgrd(2)=dimids(12)
2406# endif
2407# else
2408 u2dgrd(1)=dimids( 2)
2409 u2dgrd(2)=dimids( 6)
2410# ifdef PERFECT_RESTART
2411 u2dgrd(3)=dimids(31)
2412 u2dgrd(4)=dimids(12)
2413# else
2414 u2dgrd(3)=dimids(12)
2415# endif
2416# ifdef SOLVE3D
2417 u3dgrd(1)=dimids( 2)
2418 u3dgrd(2)=dimids( 6)
2419 u3dgrd(3)=dimids( 9)
2420# ifdef PERFECT_RESTART
2421 u3dgrd(4)=dimids(30)
2422 u3dgrd(5)=dimids(12)
2423# else
2424 u3dgrd(4)=dimids(12)
2425# endif
2426# endif
2427# endif
2428!
2429! Define dimension vectors for staggered v-momentum type variables.
2430!
2431# if !defined PERFECT_RESTART && \
2432 (defined write_water && defined masking)
2433 v2dgrd(1)=dimids(19)
2434 v2dgrd(2)=dimids(12)
2435# ifdef SOLVE3D
2436 v3dgrd(1)=dimids(22)
2437 v3dgrd(2)=dimids(12)
2438# endif
2439# else
2440 v2dgrd(1)=dimids( 3)
2441 v2dgrd(2)=dimids( 7)
2442# ifdef PERFECT_RESTART
2443 v2dgrd(3)=dimids(31)
2444 v2dgrd(4)=dimids(12)
2445# else
2446 v2dgrd(3)=dimids(12)
2447# endif
2448# ifdef SOLVE3D
2449 v3dgrd(1)=dimids( 3)
2450 v3dgrd(2)=dimids( 7)
2451 v3dgrd(3)=dimids( 9)
2452# ifdef PERFECT_RESTART
2453 v3dgrd(4)=dimids(30)
2454 v3dgrd(5)=dimids(12)
2455# else
2456 v3dgrd(4)=dimids(12)
2457# endif
2458# endif
2459# endif
2460# ifdef PERFECT_RESTART
2461!
2462! Define dimension vectors for RHS free-surface equation.
2463!
2464# if !defined PERFECT_RESTART && \
2465 (defined write_water && defined masking)
2466 r2dgrd(1)=dimids(17)
2467 r2dgrd(2)=dimids(12)
2468# else
2469 r2dgrd(1)=dimids( 1)
2470 r2dgrd(2)=dimids( 5)
2471 r2dgrd(3)=dimids(30)
2472 r2dgrd(4)=dimids(12)
2473# endif
2474!
2475! Define dimension vectors for RHS u-momentum equation.
2476!
2477# if !defined PERFECT_RESTART && \
2478 (defined write_water && defined masking)
2479 ru2dgrd(1)=dimids(18)
2480 ru2dgrd(2)=dimids(12)
2481# ifdef SOLVE3D
2482 ru2dgrd(1)=dimids(21)
2483 ru2dgrd(2)=dimids(12)
2484# endif
2485# else
2486 ru2dgrd(1)=dimids( 2)
2487 ru2dgrd(2)=dimids( 6)
2488 ru2dgrd(3)=dimids(30)
2489 ru2dgrd(4)=dimids(12)
2490# ifdef SOLVE3D
2491 ru3dgrd(1)=dimids( 2)
2492 ru3dgrd(2)=dimids( 6)
2493 ru3dgrd(3)=dimids(10)
2494 ru3dgrd(4)=dimids(30)
2495 ru3dgrd(5)=dimids(12)
2496# endif
2497# endif
2498!
2499! Define dimension vectors for RHS v-momentum equation.
2500!
2501# if !defined PERFECT_RESTART && \
2502 (defined write_water && defined masking)
2503 rv2dgrd(1)=dimids(19)
2504 rv2dgrd(2)=dimids(12)
2505# ifdef SOLVE3D
2506 rv3dgrd(1)=dimids(22)
2507 rv3dgrd(2)=dimids(12)
2508# endif
2509# else
2510 rv2dgrd(1)=dimids( 3)
2511 rv2dgrd(2)=dimids( 7)
2512 rv2dgrd(3)=dimids(30)
2513 rv2dgrd(4)=dimids(12)
2514# ifdef SOLVE3D
2515 rv3dgrd(1)=dimids( 3)
2516 rv3dgrd(2)=dimids( 7)
2517 rv3dgrd(3)=dimids(10)
2518 rv3dgrd(4)=dimids(30)
2519 rv3dgrd(5)=dimids(12)
2520# endif
2521# endif
2522# endif
2523# ifdef SOLVE3D
2524!
2525! Define dimension vector for staggered w-momentum type variables.
2526!
2527# if !defined PERFECT_RESTART && \
2528 (defined write_water && defined masking)
2529 w3dgrd(1)=dimids(23)
2530 w3dgrd(2)=dimids(12)
2531# ifdef PERFECT_RESTART
2532 k3dgrd(1)=dimids(23)
2533 k3dgrd(2)=dimids(12)
2534# endif
2535# else
2536 w3dgrd(1)=dimids( 1)
2537 w3dgrd(2)=dimids( 5)
2538 w3dgrd(3)=dimids(10)
2539 w3dgrd(4)=dimids(12)
2540# ifdef PERFECT_RESTART
2541 k3dgrd(1)=dimids( 1)
2542 k3dgrd(2)=dimids( 5)
2543 k3dgrd(3)=dimids(10)
2544 k3dgrd(4)=dimids(30)
2545 k3dgrd(5)=dimids(12)
2546# endif
2547# endif
2548# endif
2549!
2550! Define dimension vector for sediment, radiation stress variables.
2551!
2552# if !defined PERFECT_RESTART && \
2553 (defined write_water && defined masking)
2554 su2dgrd(1)=dimids(18)
2555 su2dgrd(2)=dimids(12)
2556 sv2dgrd(1)=dimids(19)
2557 sv2dgrd(2)=dimids(12)
2558# else
2559 su2dgrd(1)=dimids( 2)
2560 su2dgrd(2)=dimids( 6)
2561 su2dgrd(3)=dimids(12)
2562 sv2dgrd(1)=dimids( 3)
2563 sv2dgrd(2)=dimids( 7)
2564 sv2dgrd(3)=dimids(12)
2565# endif
2566# ifdef SOLVE3D
2567# if !defined PERFECT_RESTART && \
2568 (defined write_water && defined masking)
2569 sr3dgrd(1)=dimids(24)
2570 sr3dgrd(2)=dimids(12)
2571 su3dgrd(1)=dimids(21)
2572 su3dgrd(2)=dimids(12)
2573 sv3dgrd(1)=dimids(22)
2574 sv3dgrd(2)=dimids(12)
2575# else
2576 sr3dgrd(1)=dimids( 1)
2577 sr3dgrd(2)=dimids( 5)
2578 sr3dgrd(3)=dimids(16)
2579 sr3dgrd(4)=dimids(12)
2580 su3dgrd(1)=dimids( 2)
2581 su3dgrd(2)=dimids( 6)
2582 su3dgrd(3)=dimids( 9)
2583 su3dgrd(4)=dimids(12)
2584 sv3dgrd(1)=dimids( 3)
2585 sv3dgrd(2)=dimids( 7)
2586 sv3dgrd(3)=dimids( 9)
2587 sv3dgrd(4)=dimids(12)
2588# endif
2589# endif
2590!
2591! Initialize unlimited time record dimension.
2592!
2593 rst(ng)%Rindex=0
2594!
2595! Initialize local information variable arrays.
2596!
2597 DO i=1,natt
2598 DO j=1,len(vinfo(1))
2599 vinfo(i)(j:j)=' '
2600 END DO
2601 END DO
2602 DO i=1,6
2603 aval(i)=0.0_r8
2604 END DO
2605!
2606!-----------------------------------------------------------------------
2607! Define time-recordless information variables.
2608!-----------------------------------------------------------------------
2609!
2610 CALL def_info (ng, model, rst(ng)%pioFile, ncname, dimids)
2611 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2612!
2613!-----------------------------------------------------------------------
2614! Define time-varying variables.
2615!-----------------------------------------------------------------------
2616
2617# ifdef PERFECT_RESTART
2618!
2619! Define time-stepping indices.
2620!
2621# ifdef SOLVE3D
2622 vinfo( 1)='nstp'
2623 vinfo( 2)='3D equations time level index, nstp'
2624 status=def_var(ng, model, rst(ng)%pioFile, vardesc, pio_int, &
2625 & 1, (/recdim/), aval, vinfo, ncname, &
2626 & setparaccess = .true.)
2627 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2628!
2629 vinfo( 1)='nrhs'
2630 vinfo( 2)='3D equations time level index, nrhs'
2631 status=def_var(ng, model, rst(ng)%pioFile, vardesc, pio_int, &
2632 & 1, (/recdim/), aval, vinfo, ncname, &
2633 & setparaccess = .true.)
2634 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2635!
2636 vinfo( 1)='nnew'
2637 vinfo( 2)='3D equations time level index, nnew'
2638 status=def_var(ng, model, rst(ng)%pioFile, vardesc, pio_int, &
2639 & 1, (/recdim/), aval, vinfo, ncname, &
2640 & setparaccess = .true.)
2641 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2642!
2643# endif
2644 vinfo( 1)='kstp'
2645 vinfo( 2)='3D equations time level index, kstp'
2646 status=def_var(ng, model, rst(ng)%pioFile, vardesc, pio_int, &
2647 & 1, (/recdim/), aval, vinfo, ncname, &
2648 & setparaccess = .true.)
2649 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2650!
2651 vinfo( 1)='krhs'
2652 vinfo( 2)='3D equations time level index, krhs'
2653 status=def_var(ng, model, rst(ng)%pioFile, vardesc, pio_int, &
2654 & 1, (/recdim/), aval, vinfo, ncname, &
2655 & setparaccess = .true.)
2656 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2657!
2658 vinfo( 1)='knew'
2659 vinfo( 2)='3D equations time level index, knew'
2660 status=def_var(ng, model, rst(ng)%pioFile, vardesc, pio_int, &
2661 & 1, (/recdim/), aval, vinfo, ncname, &
2662 & setparaccess = .true.)
2663 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2664# endif
2665!
2666! Define model time.
2667!
2668 vinfo( 1)=vname(1,idtime)
2669 vinfo( 2)=vname(2,idtime)
2670 WRITE (vinfo( 3),'(a,a)') 'seconds since ', trim(rclock%string)
2671 vinfo( 4)=trim(rclock%calendar)
2672 vinfo(14)=vname(4,idtime)
2673 vinfo(21)=vname(6,idtime)
2674 rst(ng)%pioVar(idtime)%dkind=pio_tout
2675 rst(ng)%pioVar(idtime)%gtype=0
2676!
2677 status=def_var(ng, model, rst(ng)%pioFile, &
2678 & rst(ng)%pioVar(idtime)%vd, &
2679 & pio_tout, 1, (/recdim/), aval, vinfo, ncname, &
2680 & setparaccess = .true.)
2681 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2682
2683# ifdef WET_DRY
2684!
2685! Define wet/dry mask on PSI-points.
2686!
2687 vinfo( 1)=vname(1,idpwet)
2688 vinfo( 2)=vname(2,idpwet)
2689 vinfo( 3)=vname(3,idpwet)
2690 vinfo( 9)='land'
2691 vinfo(10)='water'
2692 vinfo(14)=vname(4,idpwet)
2693 vinfo(16)=vname(1,idtime)
2694 vinfo(21)=vname(6,idpwet)
2695 vinfo(22)='coordinates'
2696 aval(5)=real(iinfo(1,idpwet,ng),r8)
2697 rst(ng)%pioVar(idpwet)%dkind=pio_frst
2698 rst(ng)%pioVar(idpwet)%gtype=p2dvar
2699!
2700 status=def_var(ng, model, rst(ng)%pioFile, &
2701 & rst(ng)%pioVar(idpwet)%vd, &
2702 & pio_frst, nvd3, sp2dgrd, aval, vinfo, ncname, &
2703 & setfillval = .false.)
2704 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2705!
2706! Define wet/dry mask on RHO-points.
2707!
2708 vinfo( 1)=vname(1,idrwet)
2709 vinfo( 2)=vname(2,idrwet)
2710 vinfo( 3)=vname(3,idrwet)
2711 vinfo( 9)='land'
2712 vinfo(10)='water'
2713 vinfo(14)=vname(4,idrwet)
2714 vinfo(16)=vname(1,idtime)
2715 vinfo(21)=vname(6,idrwet)
2716 vinfo(22)='coordinates'
2717 aval(5)=real(iinfo(1,idrwet,ng),r8)
2718 rst(ng)%pioVar(idrwet)%dkind=pio_frst
2719 rst(ng)%pioVar(idrwet)%gtype=r2dvar
2720!
2721 status=def_var(ng, model, rst(ng)%pioFile, &
2722 & rst(ng)%pioVar(idrwet)%vd, &
2723 & pio_frst, nvd3, sr2dgrd, aval, vinfo, ncname, &
2724 & setfillval = .false.)
2725 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2726!
2727! Define wet/dry mask on U-points.
2728!
2729 vinfo( 1)=vname(1,iduwet)
2730 vinfo( 2)=vname(2,iduwet)
2731 vinfo( 3)=vname(3,iduwet)
2732 vinfo( 9)='land'
2733 vinfo(10)='water'
2734 vinfo(14)=vname(4,iduwet)
2735 vinfo(16)=vname(1,idtime)
2736 vinfo(21)=vname(6,iduwet)
2737 vinfo(22)='coordinates'
2738 aval(5)=real(iinfo(1,iduwet,ng),r8)
2739 rst(ng)%pioVar(iduwet)%dkind=pio_frst
2740 rst(ng)%pioVar(iduwet)%gtype=u2dvar
2741!
2742 status=def_var(ng, model, rst(ng)%pioFile, &
2743 & rst(ng)%pioVar(iduwet)%vd, &
2744 & pio_frst, nvd3, su2dgrd, aval, vinfo, ncname, &
2745 & setfillval = .false.)
2746 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2747!
2748! Define wet/dry mask on V-points.
2749!
2750 vinfo( 1)=vname(1,idvwet)
2751 vinfo( 2)=vname(2,idvwet)
2752 vinfo( 3)=vname(3,idvwet)
2753 vinfo(14)=vname(4,idvwet)
2754 vinfo(16)=vname(1,idtime)
2755 vinfo( 9)='land'
2756 vinfo(10)='water'
2757 vinfo(21)=vname(6,idvwet)
2758 vinfo(22)='coordinates'
2759 aval(5)=real(iinfo(1,idvwet,ng),r8)
2760 rst(ng)%pioVar(idvwet)%dkind=pio_frst
2761 rst(ng)%pioVar(idvwet)%gtype=v2dvar
2762!
2763 status=def_var(ng, model, rst(ng)%pioFile, &
2764 & rst(ng)%pioVar(idvwet)%vd, &
2765 & pio_frst, nvd3, sv2dgrd, aval, vinfo, ncname, &
2766 & setfillval = .false.)
2767 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2768# endif
2769# if defined SEDIMENT && defined SED_MORPH
2770!
2771! Define time-varying bathymetry.
2772!
2773 vinfo( 1)=vname(1,idbath)
2774 vinfo( 2)=vname(2,idbath)
2775 vinfo( 3)=vname(3,idbath)
2776 vinfo(14)=vname(4,idbath)
2777 vinfo(16)=vname(1,idtime)
2778 vinfo(21)=vname(6,idbath)
2779 vinfo(22)='coordinates'
2780 aval(5)=real(iinfo(1,idbath,ng),r8)
2781 rst(ng)%pioVar(idbath)%dkind=pio_frst
2782 rst(ng)%pioVar(idbath)%gtype=r2dvar
2783!
2784 status=def_var(ng, model, rst(ng)%pioFile, &
2785 & rst(ng)%pioVar(idbath)%vd, &
2786 & pio_frst, nvd3, t2dgrd, aval, vinfo, ncname, &
2787 & setfillval = .false.)
2788 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2789# endif
2790!
2791! Define free-surface.
2792!
2793 vinfo( 1)=vname(1,idfsur)
2794 vinfo( 2)=vname(2,idfsur)
2795 vinfo( 3)=vname(3,idfsur)
2796 vinfo(14)=vname(4,idfsur)
2797 vinfo(16)=vname(1,idtime)
2798# if defined WRITE_WATER && defined MASKING
2799# if !defined WET_DRY && defined PERFECT_RESTART
2800 vinfo(24)='_FillValue'
2801 aval(6)=spval
2802# else
2803 vinfo(20)='mask_rho'
2804# endif
2805# endif
2806 vinfo(21)=vname(6,idfsur)
2807 vinfo(22)='coordinates'
2808 aval(5)=real(iinfo(1,idfsur,ng),r8)
2809 rst(ng)%pioVar(idfsur)%dkind=pio_frst
2810 rst(ng)%pioVar(idfsur)%gtype=r2dvar
2811!
2812# ifdef PERFECT_RESTART
2813 status=def_var(ng, model, rst(ng)%pioFile, &
2814 & rst(ng)%pioVar(idfsur)%vd, &
2815# ifdef WET_DRY
2816 & pio_frst, nvd4, t2dgrd, aval, vinfo, ncname, &
2817 & setfillval = .false.)
2818# else
2819 & pio_frst, nvd4, t2dgrd, aval, vinfo, ncname)
2820# endif
2821# else
2822 status=def_var(ng, model, rst(ng)%pioFile, &
2823 & rst(ng)%pioVar(idfsur)%vd, &
2824# ifdef WET_DRY
2825 & pio_frst, nvd3, t2dgrd, aval, vinfo, ncname, &
2826 & setfillval = .false.)
2827# else
2828 & pio_frst, nvd3, t2dgrd, aval, vinfo, ncname)
2829
2830# endif
2831# endif
2832 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2833
2834# ifdef PERFECT_RESTART
2835!
2836! Define RHS of free-surface equation.
2837!
2838 vinfo( 1)=vname(1,idrzet)
2839 vinfo( 2)=vname(2,idrzet)
2840 vinfo( 3)=vname(3,idrzet)
2841 vinfo(14)=vname(4,idrzet)
2842 vinfo(16)=vname(1,idtime)
2843# if defined WRITE_WATER && defined MASKING
2844# if defined PERFECT_RESTART
2845 vinfo(24)='_FillValue'
2846 aval(6)=spval
2847# else
2848 vinfo(20)='mask_rho'
2849# endif
2850# endif
2851 vinfo(21)=vname(6,idrzet)
2852 vinfo(22)='coordinates'
2853 aval(5)=real(iinfo(1,idfsur,ng),r8)
2854 rst(ng)%pioVar(idrzet)%dkind=pio_frst
2855 rst(ng)%pioVar(idrzet)%gtype=r2dvar
2856!
2857 status=def_var(ng, model, rst(ng)%pioFile, &
2858 & rst(ng)%pioVar(idrzet)%vd, &
2859 & pio_frst, nvd4, r2dgrd, aval, vinfo, ncname)
2860 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2861# endif
2862!
2863! Define 2D momentum in the XI-direction.
2864!
2865 vinfo( 1)=vname(1,idubar)
2866 vinfo( 2)=vname(2,idubar)
2867 vinfo( 3)=vname(3,idubar)
2868 vinfo(14)=vname(4,idubar)
2869 vinfo(16)=vname(1,idtime)
2870# if defined WRITE_WATER && defined MASKING
2871# if defined PERFECT_RESTART
2872 vinfo(24)='_FillValue'
2873 aval(6)=spval
2874# else
2875 vinfo(20)='mask_u'
2876# endif
2877# endif
2878 vinfo(21)=vname(6,idubar)
2879 vinfo(22)='coordinates'
2880 aval(5)=real(iinfo(1,idubar,ng),r8)
2881 rst(ng)%pioVar(idubar)%dkind=pio_frst
2882 rst(ng)%pioVar(idubar)%gtype=u2dvar
2883!
2884# ifdef PERFECT_RESTART
2885 status=def_var(ng, model, rst(ng)%pioFile, &
2886 & rst(ng)%pioVar(idubar)%vd, &
2887 & pio_frst, nvd4, u2dgrd, aval, vinfo, ncname)
2888# else
2889 status=def_var(ng, model, rst(ng)%pioFile, &
2890 & rst(ng)%pioVar(idubar)%vd, &
2891 & pio_frst, nvd3, u2dgrd, aval, vinfo, ncname)
2892# endif
2893 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2894
2895# ifdef PERFECT_RESTART
2896!
2897! Define RHS of 2D momentum equation in the XI-direction.
2898!
2899 vinfo( 1)=vname(1,idru2d)
2900 vinfo( 2)=vname(2,idru2d)
2901 vinfo( 3)=vname(3,idru2d)
2902 vinfo(14)=vname(4,idru2d)
2903 vinfo(16)=vname(1,idtime)
2904# if defined WRITE_WATER && defined MASKING
2905# if defined PERFECT_RESTART
2906 vinfo(24)='_FillValue'
2907 aval(6)=spval
2908# else
2909 vinfo(20)='mask_u'
2910# endif
2911# endif
2912 vinfo(21)=vname(6,idru2d)
2913 vinfo(22)='coordinates'
2914 aval(5)=real(iinfo(1,idru2d,ng),r8)
2915 rst(ng)%pioVar(idru2d)%dkind=pio_frst
2916 rst(ng)%pioVar(idru2d)%gtype=u2dvar
2917!
2918 status=def_var(ng, model, rst(ng)%pioFile, &
2919 & rst(ng)%pioVar(idru2d)%vd, &
2920 & pio_frst, nvd4, ru2dgrd, aval, vinfo, ncname)
2921 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2922# endif
2923!
2924! Define 2D momentum in the ETA-direction.
2925!
2926 vinfo( 1)=vname(1,idvbar)
2927 vinfo( 2)=vname(2,idvbar)
2928 vinfo( 3)=vname(3,idvbar)
2929 vinfo(14)=vname(4,idvbar)
2930 vinfo(16)=vname(1,idtime)
2931# if defined WRITE_WATER && defined MASKING
2932# if defined PERFECT_RESTART
2933 vinfo(24)='_FillValue'
2934 aval(6)=spval
2935# else
2936 vinfo(20)='mask_v'
2937# endif
2938# endif
2939 vinfo(21)=vname(6,idvbar)
2940 vinfo(22)='coordinates'
2941 aval(5)=real(iinfo(1,idvbar,ng),r8)
2942 rst(ng)%pioVar(idvbar)%dkind=pio_frst
2943 rst(ng)%pioVar(idvbar)%gtype=v2dvar
2944!
2945# ifdef PERFECT_RESTART
2946 status=def_var(ng, model, rst(ng)%pioFile, &
2947 & rst(ng)%pioVar(idvbar)%vd, &
2948 & pio_frst, nvd4, v2dgrd, aval, vinfo, ncname)
2949# else
2950 status=def_var(ng, model, rst(ng)%pioFile, &
2951 & rst(ng)%pioVar(idvbar)%vd, &
2952 & pio_frst, nvd3, v2dgrd, aval, vinfo, ncname)
2953# endif
2954 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2955
2956# ifdef PERFECT_RESTART
2957!
2958! Define RHS of 2D momentum equation in the ETA-direction.
2959!
2960 vinfo( 1)=vname(1,idrv2d)
2961 vinfo( 2)=vname(2,idrv2d)
2962 vinfo( 3)=vname(3,idrv2d)
2963 vinfo(14)=vname(4,idrv2d)
2964 vinfo(16)=vname(1,idtime)
2965# if defined WRITE_WATER && defined MASKING
2966# if defined PERFECT_RESTART
2967 vinfo(24)='_FillValue'
2968 aval(6)=spval
2969# else
2970 vinfo(20)='mask_v'
2971# endif
2972# endif
2973 vinfo(21)=vname(6,idrv2d)
2974 vinfo(22)='coordinates'
2975 aval(5)=real(iinfo(1,idrv2d,ng),r8)
2976 rst(ng)%pioVar(idrv2d)%dkind=pio_frst
2977 rst(ng)%pioVar(idrv2d)%gtype=v2dvar
2978!
2979 status=def_var(ng, model, rst(ng)%pioFile, &
2980 & rst(ng)%pioVar(idrv2d)%vd, &
2981 & pio_frst, nvd4, rv2dgrd, aval, vinfo, ncname)
2982 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2983# endif
2984# ifdef SOLVE3D
2985!
2986! Define 3D momentum component in the XI-direction.
2987!
2988 vinfo( 1)=vname(1,iduvel)
2989 vinfo( 2)=vname(2,iduvel)
2990 vinfo( 3)=vname(3,iduvel)
2991 vinfo(14)=vname(4,iduvel)
2992 vinfo(16)=vname(1,idtime)
2993# if defined WRITE_WATER && defined MASKING
2994# if defined PERFECT_RESTART
2995 vinfo(24)='_FillValue'
2996 aval(6)=spval
2997# else
2998 vinfo(20)='mask_u'
2999# endif
3000# endif
3001 vinfo(21)=vname(6,iduvel)
3002 vinfo(22)='coordinates'
3003 aval(5)=real(iinfo(1,iduvel,ng),r8)
3004 rst(ng)%pioVar(iduvel)%dkind=pio_frst
3005 rst(ng)%pioVar(iduvel)%gtype=u3dvar
3006!
3007# ifdef PERFECT_RESTART
3008 status=def_var(ng, model, rst(ng)%pioFile, &
3009 & rst(ng)%pioVar(iduvel)%vd, &
3010 & pio_frst, nvd5, u3dgrd, aval, vinfo, ncname)
3011# else
3012 status=def_var(ng, model, rst(ng)%pioFile, &
3013 & rst(ng)%pioVar(iduvel)%vd, &
3014 & pio_frst, nvd4, u3dgrd, aval, vinfo, ncname)
3015# endif
3016 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3017
3018# ifdef PERFECT_RESTART
3019!
3020! Define RHS of 3D momentum equation in the XI-direction.
3021! Although this variable is a U-points, a negative value is used
3022! here to set "s_w" in the "coordinate" attribute. The k=0 index
3023! is used during coupling in step2d.
3024!
3025 vinfo( 1)=vname(1,idru3d)
3026 vinfo( 2)=vname(2,idru3d)
3027 vinfo( 3)=vname(3,idru3d)
3028 vinfo(14)=vname(4,idru3d)
3029 vinfo(16)=vname(1,idtime)
3030# if defined WRITE_WATER && defined MASKING
3031# if defined PERFECT_RESTART
3032 vinfo(24)='_FillValue'
3033 aval(6)=spval
3034# else
3035 vinfo(20)='mask_u'
3036# endif
3037# endif
3038 vinfo(21)=vname(6,idru3d)
3039 vinfo(22)='coordinates'
3040 aval(5)=real(-u3dvar,r8)
3041 rst(ng)%pioVar(idru3d)%dkind=pio_frst
3042 rst(ng)%pioVar(idru3d)%gtype=u3dvar
3043!
3044 status=def_var(ng, model, rst(ng)%pioFile, &
3045 & rst(ng)%pioVar(idru3d)%vd, &
3046 & pio_frst, nvd5, ru3dgrd, aval, vinfo, ncname)
3047 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3048# endif
3049!
3050! Define 3D momentum component in the ETA-direction.
3051!
3052 vinfo( 1)=vname(1,idvvel)
3053 vinfo( 2)=vname(2,idvvel)
3054 vinfo( 3)=vname(3,idvvel)
3055 vinfo(14)=vname(4,idvvel)
3056 vinfo(16)=vname(1,idtime)
3057# if defined WRITE_WATER && defined MASKING
3058# if defined PERFECT_RESTART
3059 vinfo(24)='_FillValue'
3060 aval(6)=spval
3061# else
3062 vinfo(20)='mask_v'
3063# endif
3064# endif
3065 vinfo(21)=vname(6,idvvel)
3066 vinfo(22)='coordinates'
3067 aval(5)=real(iinfo(1,idvvel,ng),r8)
3068 rst(ng)%pioVar(idvvel)%dkind=pio_frst
3069 rst(ng)%pioVar(idvvel)%gtype=v3dvar
3070!
3071# ifdef PERFECT_RESTART
3072 status=def_var(ng, model, rst(ng)%pioFile, &
3073 & rst(ng)%pioVar(idvvel)%vd, &
3074 & pio_frst, nvd5, v3dgrd, aval, vinfo, ncname)
3075# else
3076 status=def_var(ng, model, rst(ng)%pioFile, &
3077 & rst(ng)%pioVar(idvvel)%vd, &
3078 & pio_frst, nvd4, v3dgrd, aval, vinfo, ncname)
3079# endif
3080 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3081
3082# ifdef PERFECT_RESTART
3083!
3084! Define RHS of 3D momentum equation in the ETA-direction.
3085! Although this variable is a V-points, a negative value is used
3086! here to set "s_w" in the "coordinate" attribute. The k=0 index
3087! is used during coupling in step2d.
3088!
3089 vinfo( 1)=vname(1,idrv3d)
3090 vinfo( 2)=vname(2,idrv3d)
3091 vinfo( 3)=vname(3,idrv3d)
3092 vinfo(14)=vname(4,idrv3d)
3093 vinfo(16)=vname(1,idtime)
3094# if defined WRITE_WATER && defined MASKING
3095# if defined PERFECT_RESTART
3096 vinfo(24)='_FillValue'
3097 aval(6)=spval
3098# else
3099 vinfo(20)='mask_v'
3100# endif
3101# endif
3102 vinfo(21)=vname(6,idrv3d)
3103 vinfo(22)='coordinates'
3104 aval(5)=real(-v3dvar,r8)
3105 rst(ng)%pioVar(idrv3d)%dkind=pio_frst
3106 rst(ng)%pioVar(idrv3d)%gtype=v3dvar
3107!
3108 status=def_var(ng, model, rst(ng)%pioFile, &
3109 & rst(ng)%pioVar(idrv3d)%vd, &
3110 & pio_frst, nvd5, rv3dgrd, aval, vinfo, ncname)
3111 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3112# endif
3113!
3114! Define tracer type variables.
3115!
3116 DO itrc=1,nt(ng)
3117 vinfo( 1)=vname(1,idtvar(itrc))
3118 vinfo( 2)=vname(2,idtvar(itrc))
3119 vinfo( 3)=vname(3,idtvar(itrc))
3120 vinfo(14)=vname(4,idtvar(itrc))
3121 vinfo(16)=vname(1,idtime)
3122# ifdef SEDIMENT
3123 DO i=1,nst
3124 IF (itrc.eq.idsed(i)) THEN
3125 WRITE (vinfo(19),40) 1000.0_r8*sd50(i,ng)
3126 END IF
3127 END DO
3128# endif
3129# if defined WRITE_WATER && defined MASKING
3130# if defined PERFECT_RESTART
3131 vinfo(24)='_FillValue'
3132 aval(6)=spval
3133# else
3134 vinfo(20)='mask_rho'
3135# endif
3136# endif
3137 vinfo(21)=vname(6,idtvar(itrc))
3138 vinfo(22)='coordinates'
3139 aval(5)=real(r3dvar,r8)
3140 rst(ng)%pioTrc(itrc)%dkind=pio_frst
3141 rst(ng)%pioTrc(itrc)%gtype=r3dvar
3142!
3143# ifdef PERFECT_RESTART
3144 status=def_var(ng, model, rst(ng)%pioFile, &
3145 & rst(ng)%pioTrc(itrc)%vd, &
3146 & pio_frst, nvd5, t3dgrd, aval, vinfo, ncname)
3147# else
3148 status=def_var(ng, model, rst(ng)%pioFile, &
3149 & rst(ng)%pioTrc(itrc)%vd, &
3150 & pio_frst, nvd4, t3dgrd, aval, vinfo, ncname)
3151# endif
3152 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3153 END DO
3154!
3155! Define density anomaly.
3156!
3157 vinfo( 1)=vname(1,iddano)
3158 vinfo( 2)=vname(2,iddano)
3159 vinfo( 3)=vname(3,iddano)
3160 vinfo(14)=vname(4,iddano)
3161 vinfo(16)=vname(1,idtime)
3162# if defined WRITE_WATER && defined MASKING
3163# if defined PERFECT_RESTART
3164 vinfo(24)='_FillValue'
3165 aval(6)=spval
3166# else
3167 vinfo(20)='mask_rho'
3168# endif
3169# endif
3170 vinfo(21)=vname(6,iddano)
3171 vinfo(22)='coordinates'
3172 aval(5)=real(iinfo(1,iddano,ng),r8)
3173 rst(ng)%pioVar(iddano)%dkind=pio_frst
3174 rst(ng)%pioVar(iddano)%gtype=r3dvar
3175!
3176 status=def_var(ng, model, rst(ng)%pioFile, &
3177 & rst(ng)%pioVar(iddano)%vd, &
3178 & pio_frst, nvd4, r3dgrd, aval, vinfo, ncname)
3179 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3180
3181# ifdef LMD_SKPP
3182!
3183! Define depth of surface boundary layer.
3184!
3185 vinfo( 1)=vname(1,idhsbl)
3186 vinfo( 2)=vname(2,idhsbl)
3187 vinfo( 3)=vname(3,idhsbl)
3188 vinfo(14)=vname(4,idhsbl)
3189 vinfo(16)=vname(1,idtime)
3190# if defined WRITE_WATER && defined MASKING
3191# if defined PERFECT_RESTART
3192 vinfo(24)='_FillValue'
3193 aval(6)=spval
3194# else
3195 vinfo(20)='mask_rho'
3196# endif
3197# endif
3198 vinfo(21)=vname(6,idhsbl)
3199 vinfo(22)='coordinates'
3200 aval(5)=real(iinfo(1,idhsbl,ng),r8)
3201 rst(ng)%pioVar(idhsbl)%dkind=pio_frst
3202 rst(ng)%pioVar(idhsbl)%gtype=r2dvar
3203!
3204 status=def_var(ng, model, rst(ng)%pioFile, &
3205 & rst(ng)%pioVar(idhsbl)%vd, &
3206 & pio_frst, nvd3, sr2dgrd, aval, vinfo, ncname)
3207 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3208# endif
3209
3210# ifdef LMD_BKPP
3211!
3212! Define depth of bottom boundary layer.
3213!
3214 vinfo( 1)=vname(1,idhbbl)
3215 vinfo( 2)=vname(2,idhbbl)
3216 vinfo( 3)=vname(3,idhbbl)
3217 vinfo(14)=vname(4,idhbbl)
3218 vinfo(16)=vname(1,idtime)
3219# if defined WRITE_WATER && defined MASKING
3220# if defined PERFECT_RESTART
3221 vinfo(24)='_FillValue'
3222 aval(6)=spval
3223# else
3224 vinfo(20)='mask_rho'
3225# endif
3226# endif
3227 vinfo(21)=vname(6,idhbbl)
3228 vinfo(22)='coordinates'
3229 aval(5)=real(iinfo(1,idhbbl,ng),r8)
3230 rst(ng)%pioVar(idhbbl)%dkind=pio_frst
3231 rst(ng)%pioVar(idhbbl)%gtype=r2dvar
3232!
3233 status=def_var(ng, model, rst(ng)%pioFile, &
3234 & rst(ng)%pioVar(idhbbl)%vd, &
3235 & pio_frst, nvd3, sr2dgrd, aval, vinfo, ncname)
3236 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3237# endif
3238# if defined PERFECT_RESTART && defined LMD_NONLOCAL
3239!
3240! Define out KPP nonlocal transport.
3241!
3242 DO itrc=1,nat
3243 vinfo( 1)=vname(1,idghat(itrc))
3244 vinfo( 2)=vname(2,idghat(itrc))
3245 vinfo( 3)=vname(3,idghat(itrc))
3246 vinfo(14)=vname(4,idghat(itrc))
3247 vinfo(16)=vname(1,idtime)
3248# if defined WRITE_WATER && defined MASKING
3249 vinfo(20)='mask_rho'
3250# endif
3251 vinfo(21)=vname(6,idghat(itrc))
3252 vinfo(22)='coordinates'
3253 aval(5)=real(iinfo(1,idghat(itrc),ng),r8)
3254 rst(ng)%pioVar(idghat(itrc))%dkind=pio_frst
3255 rst(ng)%pioVar(idghat(itrc))%gtype=w3dvar
3256!
3257 status=def_var(ng, model, rst(ng)%pioFile, &
3258 & rst(ng)%pioVar(idghat(itrc))%vd, &
3259 & pio_frst, nvd4, w3dgrd, aval, vinfo, ncname)
3260 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3261 END DO
3262# endif
3263# if defined BVF_MIXING || defined LMD_MIXING || \
3264 defined gls_mixing || defined my25_mixing
3265!
3266! Define vertical viscosity coefficient.
3267!
3268 vinfo( 1)=vname(1,idvvis)
3269 vinfo( 2)=vname(2,idvvis)
3270 vinfo( 3)=vname(3,idvvis)
3271 vinfo(14)=vname(4,idvvis)
3272 vinfo(16)=vname(1,idtime)
3273 vinfo(21)=vname(6,idvvis)
3274 vinfo(22)='coordinates'
3275 aval(5)=real(iinfo(1,idvvis,ng),r8)
3276 rst(ng)%pioVar(idvvis)%dkind=pio_frst
3277 rst(ng)%pioVar(idvvis)%gtype=w3dvar
3278!
3279 status=def_var(ng, model, rst(ng)%pioFile, &
3280 & rst(ng)%pioVar(idvvis)%vd, &
3281 & pio_frst, nvd4, w3dgrd, aval, vinfo, ncname, &
3282 & setfillval = .false.)
3283 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3284!
3285! Define vertical diffusion coefficient for potential temperature.
3286!
3287 vinfo( 1)=vname(1,idtdif)
3288 vinfo( 2)=vname(2,idtdif)
3289 vinfo( 3)=vname(3,idtdif)
3290 vinfo(14)=vname(4,idtdif)
3291 vinfo(16)=vname(1,idtime)
3292 vinfo(21)=vname(6,idtdif)
3293 vinfo(22)='coordinates'
3294 aval(5)=real(iinfo(1,idtdif,ng),r8)
3295 rst(ng)%pioVar(idtdif)%dkind=pio_frst
3296 rst(ng)%pioVar(idtdif)%gtype=w3dvar
3297!
3298 status=def_var(ng, model, rst(ng)%pioFile, &
3299 & rst(ng)%pioVar(idtdif)%vd, &
3300 & pio_frst, nvd4, w3dgrd, aval, vinfo, ncname, &
3301 & setfillval = .false.)
3302 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3303
3304# ifdef SALINITY
3305!
3306! Define vertical diffusion coefficient for salinity.
3307!
3308 vinfo( 1)=vname(1,idsdif)
3309 vinfo( 2)=vname(2,idsdif)
3310 vinfo( 3)=vname(3,idsdif)
3311 vinfo(14)=vname(4,idsdif)
3312 vinfo(16)=vname(1,idtime)
3313 vinfo(21)=vname(6,idsdif)
3314 vinfo(22)='coordinates'
3315 aval(5)=real(iinfo(1,idsdif,ng),r8)
3316 rst(ng)%pioVar(idsdif)%dkind=pio_frst
3317 rst(ng)%pioVar(idsdif)%gtype=w3dvar
3318!
3319 status=def_var(ng, model, rst(ng)%pioFile, &
3320 & rst(ng)%pioVar(idsdif)%vd, &
3321 & pio_frst, nvd4, w3dgrd, aval, vinfo, ncname, &
3322 & setfillval = .false.)
3323 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3324# endif
3325# endif
3326# if defined PERFECT_RESTART && \
3327 (defined gls_mixing || defined my25_mixing)
3328!
3329! Define turbulent kinetic energy.
3330!
3331 vinfo( 1)=vname(1,idmtke)
3332 vinfo( 2)=vname(2,idmtke)
3333 vinfo( 3)=vname(3,idmtke)
3334 vinfo(14)=vname(4,idmtke)
3335 vinfo(16)=vname(1,idtime)
3336 vinfo(21)=vname(6,idmtke)
3337 vinfo(22)='coordinates'
3338 aval(5)=real(iinfo(1,idmtke,ng),r8)
3339 rst(ng)%pioVar(idmtke)%dkind=pio_frst
3340 rst(ng)%pioVar(idmtke)%gtype=w3dvar
3341!
3342 status=def_var(ng, model, rst(ng)%pioFile, &
3343 & rst(ng)%pioVar(idmtke)%vd, &
3344 & pio_frst, nvd5, k3dgrd, aval, vinfo, ncname, &
3345 & setfillval = .false.)
3346 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3347!
3348! Define turbulent kinetic energy time length scale.
3349!
3350 vinfo( 1)=vname(1,idmtls)
3351 vinfo( 2)=vname(2,idmtls)
3352 vinfo( 3)=vname(3,idmtls)
3353 vinfo(14)=vname(4,idmtls)
3354 vinfo(16)=vname(1,idtime)
3355 vinfo(21)=vname(6,idmtls)
3356 vinfo(22)='coordinates'
3357 aval(5)=real(iinfo(1,idmtls,ng),r8)
3358 rst(ng)%pioVar(idmtls)%dkind=pio_frst
3359 rst(ng)%pioVar(idmtls)%gtype=w3dvar
3360!
3361 status=def_var(ng, model, rst(ng)%pioFile, &
3362 & rst(ng)%pioVar(idmtls)%vd, &
3363 & pio_frst, nvd5, k3dgrd, aval, vinfo, ncname, &
3364 & setfillval = .false.)
3365 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3366!
3367! Define vertical mixing turbulent length scale.
3368!
3369 vinfo( 1)=vname(1,idvmls)
3370 vinfo( 2)=vname(2,idvmls)
3371 vinfo( 3)=vname(3,idvmls)
3372 vinfo(14)=vname(4,idvmls)
3373 vinfo(16)=vname(1,idtime)
3374# if defined WRITE_WATER && defined MASKING
3375# if defined PERFECT_RESTART
3376 vinfo(24)='_FillValue'
3377 aval(6)=spval
3378# else
3379 vinfo(20)='mask_rho'
3380# endif
3381# endif
3382 vinfo(21)=vname(6,idvmls)
3383 vinfo(22)='coordinates'
3384 aval(5)=real(iinfo(1,idvmls,ng),r8)
3385 rst(ng)%pioVar(idvmls)%dkind=pio_frst
3386 rst(ng)%pioVar(idvmls)%gtype=w3dvar
3387!
3388 status=def_var(ng, model, rst(ng)%pioFile, &
3389 & rst(ng)%pioVar(idvmls)%vd, &
3390 & pio_frst, nvd4, w3dgrd, aval, vinfo, ncname)
3391 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3392!
3393! Define turbulent kinetic energy vertical diffusion coefficient.
3394!
3395 vinfo( 1)=vname(1,idvmkk)
3396 vinfo( 2)=vname(2,idvmkk)
3397 vinfo( 3)=vname(3,idvmkk)
3398 vinfo(14)=vname(4,idvmkk)
3399 vinfo(16)=vname(1,idtime)
3400# if defined WRITE_WATER && defined MASKING
3401# if defined PERFECT_RESTART
3402 vinfo(24)='_FillValue'
3403 aval(6)=spval
3404# else
3405 vinfo(20)='mask_rho'
3406# endif
3407# endif
3408 vinfo(21)=vname(6,idvmkk)
3409 vinfo(22)='coordinates'
3410 aval(5)=real(iinfo(1,idvmkk,ng),r8)
3411 rst(ng)%pioVar(idvmkk)%dkind=pio_frst
3412 rst(ng)%pioVar(idvmkk)%gtype=w3dvar
3413!
3414 status=def_var(ng, model, rst(ng)%pioFile, &
3415 & rst(ng)%pioVar(idvmkk)%vd, &
3416 & pio_frst, nvd4, w3dgrd, aval, vinfo, ncname)
3417 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3418
3419# ifdef GLS_MIXING
3420!
3421! Define turbulent length scale vertical diffusion coefficient.
3422!
3423 vinfo( 1)=vname(1,idvmkp)
3424 vinfo( 2)=vname(2,idvmkp)
3425 vinfo( 3)=vname(3,idvmkp)
3426 vinfo(14)=vname(4,idvmkp)
3427 vinfo(16)=vname(1,idtime)
3428# if defined WRITE_WATER && defined MASKING
3429# if defined PERFECT_RESTART
3430 vinfo(24)='_FillValue'
3431 aval(6)=spval
3432# else
3433 vinfo(20)='mask_rho'
3434# endif
3435# endif
3436 vinfo(21)=vname(6,idvmkp)
3437 vinfo(22)='coordinates'
3438 aval(5)=real(iinfo(1,idvmkp,ng),r8)
3439 rst(ng)%pioVar(idvmkp)%dkind=pio_frst
3440 rst(ng)%pioVar(idvmkp)%gtype=w3dvar
3441!
3442 status=def_var(ng, model, rst(ng)%pioFile, &
3443 & rst(ng)%pioVar(idvmkp)%vd, &
3444 & pio_frst, nvd4, w3dgrd, aval, vinfo, ncname)
3445 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3446# endif
3447# endif
3448# ifdef SEDIMENT
3449# ifdef BEDLOAD
3450!
3451! Define Bedload U-direction.
3452!
3453 DO i=1,nst
3454 vinfo( 1)=vname(1,idubld(i))
3455 vinfo( 2)=vname(2,idubld(i))
3456 vinfo( 3)=vname(3,idubld(i))
3457 vinfo(14)=vname(4,idubld(i))
3458 vinfo(16)=vname(1,idtime)
3459# if defined WRITE_WATER && defined MASKING
3460# if defined PERFECT_RESTART
3461 vinfo(24)='_FillValue'
3462 aval(6)=spval
3463# else
3464 vinfo(20)='mask_u'
3465# endif
3466# endif
3467 vinfo(21)=vname(6,idubld(i))
3468 vinfo(22)='coordinates'
3469 aval(5)=real(iinfo(1,idubld(i),ng),r8)
3470 rst(ng)%pioVar(idubld(i))%dkind=pio_frst
3471 rst(ng)%pioVar(idubld(i))%gtype=u2dvar
3472!
3473 status=def_var(ng, model, rst(ng)%pioFile, &
3474 & rst(ng)%pioVar(idubld(i))%vd, &
3475 & pio_frst, nvd3, su2dgrd, aval, vinfo, ncname)
3476 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3477!
3478! Define Bedload V-direction.
3479!
3480 vinfo( 1)=vname(1,idvbld(i))
3481 vinfo( 2)=vname(2,idvbld(i))
3482 vinfo( 3)=vname(3,idvbld(i))
3483 vinfo(14)=vname(4,idvbld(i))
3484 vinfo(16)=vname(1,idtime)
3485# if defined WRITE_WATER && defined MASKING
3486# if defined PERFECT_RESTART
3487 vinfo(24)='_FillValue'
3488 aval(6)=spval
3489# else
3490 vinfo(20)='mask_v'
3491# endif
3492# endif
3493 vinfo(21)=vname(6,idvbld(i))
3494 vinfo(22)='coordinates'
3495 aval(5)=real(iinfo(1,idvbld(i),ng),r8)
3496 rst(ng)%pioVar(idvbld(i))%dkind=pio_frst
3497 rst(ng)%pioVar(idvbld(i))%gtype=v2dvar
3498!
3499 status=def_var(ng, model, rst(ng)%pioFile, &
3500 & rst(ng)%pioVar(idvbld(i))%vd, &
3501 & pio_frst, nvd3, sv2dgrd, aval, vinfo, ncname)
3502 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3503 END DO
3504# endif
3505!
3506! Define sediment fraction of each size class in each bed layer.
3507!
3508 DO i=1,nst
3509 vinfo( 1)=vname(1,idfrac(i))
3510 vinfo( 2)=vname(2,idfrac(i))
3511 vinfo( 3)=vname(3,idfrac(i))
3512 vinfo(14)=vname(4,idfrac(i))
3513 vinfo(16)=vname(1,idtime)
3514 WRITE (vinfo(19),40) 1000.0_r8*sd50(i,ng)
3515# if defined WRITE_WATER && defined MASKING
3516# if defined PERFECT_RESTART
3517 vinfo(24)='_FillValue'
3518 aval(6)=spval
3519# else
3520 vinfo(20)='mask_rho'
3521# endif
3522# endif
3523 vinfo(21)=vname(6,idfrac(i))
3524 vinfo(22)='coordinates'
3525 aval(5)=real(iinfo(1,idfrac(i),ng),r8)
3526 rst(ng)%pioVar(idfrac(i))%dkind=pio_frst
3527 rst(ng)%pioVar(idfrac(i))%gtype=b3dvar
3528!
3529 status=def_var(ng, model, rst(ng)%pioFile, &
3530 & rst(ng)%pioVar(idfrac(i))%vd, &
3531 & pio_frst, nvd4, sr3dgrd, aval, vinfo, ncname)
3532 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3533 END DO
3534!
3535! Define sediment mass of each size class in each bed layer.
3536!
3537 DO i=1,nst
3538 vinfo( 1)=vname(1,idbmas(i))
3539 vinfo( 2)=vname(2,idbmas(i))
3540 vinfo( 3)=vname(3,idbmas(i))
3541 vinfo(14)=vname(4,idbmas(i))
3542 vinfo(16)=vname(1,idtime)
3543 WRITE (vinfo(19),40) 1000.0_r8*sd50(i,ng)
3544# if defined WRITE_WATER && defined MASKING
3545# if defined PERFECT_RESTART
3546 vinfo(24)='_FillValue'
3547 aval(6)=spval
3548# else
3549 vinfo(20)='mask_rho'
3550# endif
3551# endif
3552 vinfo(21)=vname(6,idbmas(i))
3553 vinfo(22)='coordinates'
3554 aval(5)=real(iinfo(1,idbmas(i),ng),r8)
3555 rst(ng)%pioVar(idbmas(i))%dkind=pio_frst
3556 rst(ng)%pioVar(idbmas(i))%gtype=b3dvar
3557!
3558 status=def_var(ng, model, rst(ng)%pioFile, &
3559 & rst(ng)%pioVar(idbmas(i))%vd, &
3560 & pio_frst, nvd4, sr3dgrd, aval, vinfo, ncname)
3561 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3562 END DO
3563!
3564! Define sediment properties in each bed layer.
3565!
3566 DO i=1,mbedp
3567 vinfo( 1)=vname(1,idsbed(i))
3568 vinfo( 2)=vname(2,idsbed(i))
3569 vinfo( 3)=vname(3,idsbed(i))
3570 vinfo(14)=vname(4,idsbed(i))
3571 vinfo(16)=vname(1,idtime)
3572# if defined WRITE_WATER && defined MASKING
3573# if defined PERFECT_RESTART
3574 vinfo(24)='_FillValue'
3575 aval(6)=spval
3576# else
3577 vinfo(20)='mask_rho'
3578# endif
3579# endif
3580 vinfo(21)=vname(6,idsbed(i))
3581 vinfo(22)='coordinates'
3582 aval(5)=real(iinfo(1,idsbed(i),ng),r8)
3583 rst(ng)%pioVar(idsbed(i))%dkind=pio_frst
3584 rst(ng)%pioVar(idsbed(i))%gtype=b3dvar
3585!
3586 status=def_var(ng, model, rst(ng)%pioFile, &
3587 & rst(ng)%pioVar(idsbed(i))%vd, &
3588 & pio_frst, nvd4, sr3dgrd, aval, vinfo, ncname)
3589 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3590 END DO
3591# endif
3592# if defined SEDIMENT || defined BBL_MODEL
3593!
3594! define exposed sediment layer properties. Notice that only the
3595! first four properties (mean grain diameter, mean grain density,
3596! mean settling velocity, mean critical erosion stress,
3597! ripple length and ripple height) are written.
3598!
3599 DO i=1,6
3600 vinfo( 1)=vname(1,idbott(i))
3601 vinfo( 2)=vname(2,idbott(i))
3602 vinfo( 3)=vname(3,idbott(i))
3603 vinfo(14)=vname(4,idbott(i))
3604 vinfo(16)=vname(1,idtime)
3605# if defined WRITE_WATER && defined MASKING
3606# if defined PERFECT_RESTART
3607 vinfo(24)='_FillValue'
3608 aval(6)=spval
3609# else
3610 vinfo(20)='mask_rho'
3611# endif
3612# endif
3613 vinfo(21)=vname(6,idbott(i))
3614 vinfo(22)='coordinates'
3615 aval(5)=real(iinfo(1,idbott(i),ng),r8)
3616 rst(ng)%pioVar(idbott(i))%dkind=pio_frst
3617 rst(ng)%pioVar(idbott(i))%gtype=r2dvar
3618!
3619 status=def_var(ng, model, rst(ng)%pioFile, &
3620 & rst(ng)%pioVar(idbott(i))%vd, &
3621 & pio_frst, nvd3, sr2dgrd, aval, vinfo, ncname)
3622 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3623 END DO
3624# endif
3625# endif
3626# ifdef WEC
3627!
3628! Define 2D Stokes U-velocity.
3629!
3630 vinfo( 1)=vname(1,idu2sd)
3631 vinfo( 2)=vname(2,idu2sd)
3632 vinfo( 3)=vname(3,idu2sd)
3633 vinfo(14)=vname(4,idu2sd)
3634 vinfo(16)=vname(1,idtime)
3635# if defined WRITE_WATER && defined MASKING
3636 vinfo(20)='mask_u'
3637# endif
3638 vinfo(21)=vname(6,idu2sd)
3639 vinfo(22)='coordinates'
3640 aval(5)=real(iinfo(1,idu2sd,ng),r8)
3641 rst(ng)%pioVar(idu2sd)%dkind=pio_frst
3642 rst(ng)%pioVar(idu2sd)%gtype=u2dvar
3643!
3644 status=def_var(ng, model, rst(ng)%pioFile, &
3645 & rst(ng)%pioVar(idu2sd)%vd, &
3646 & pio_frst, nvd3, u2dgrd, aval, vinfo, ncname)
3647 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3648!
3649! Define 2D Stokes V-velocity.
3650!
3651 vinfo( 1)=vname(1,idv2sd)
3652 vinfo( 2)=vname(2,idv2sd)
3653 vinfo( 3)=vname(3,idv2sd)
3654 vinfo(14)=vname(4,idv2sd)
3655 vinfo(16)=vname(1,idtime)
3656# if defined WRITE_WATER && defined MASKING
3657 vinfo(20)='mask_u'
3658# endif
3659 vinfo(21)=vname(6,idv2sd)
3660 vinfo(22)='coordinates'
3661 aval(5)=real(iinfo(1,idv2sd,ng),r8)
3662 rst(ng)%pioVar(idv2sd)%dkind=pio_frst
3663 rst(ng)%pioVar(idv2sd)%gtype=v2dvar
3664!
3665 status=def_var(ng, model, rst(ng)%pioFile, &
3666 & rst(ng)%pioVar(idv2sd)%vd, &
3667 & pio_frst, nvd3, u2dgrd, aval, vinfo, ncname)
3668 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3669
3670# ifdef SOLVE3D
3671!
3672! Define 3D Stokes U-velocity.
3673!
3674 vinfo( 1)=vname(1,idu3sd)
3675 vinfo( 2)=vname(2,idu3sd)
3676 vinfo( 3)=vname(3,idu3sd)
3677 vinfo(14)=vname(4,idu3sd)
3678 vinfo(16)=vname(1,idtime)
3679# if defined WRITE_WATER && defined MASKING
3680 vinfo(20)='mask_u'
3681# endif
3682 vinfo(21)=vname(6,idu3sd)
3683 vinfo(22)='coordinates'
3684 aval(5)=real(iinfo(1,idu3sd,ng),r8)
3685 rst(ng)%pioVar(idu3sd)%dkind=pio_fout
3686 rst(ng)%pioVar(idu3sd)%gtype=u3dvar
3687!
3688 status=def_var(ng, model, rst(ng)%pioFile, &
3689 & rst(ng)%pioVar(idu3sd)%vd, &
3690 & pio_frst, nvd4, u3dgrd, aval, vinfo, ncname)
3691 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3692!
3693! Define 3D Stokes V-velocity.
3694!
3695 vinfo( 1)=vname(1,idv3sd)
3696 vinfo( 2)=vname(2,idv3sd)
3697 vinfo( 3)=vname(3,idv3sd)
3698 vinfo(14)=vname(4,idv3sd)
3699 vinfo(16)=vname(1,idtime)
3700# if defined WRITE_WATER && defined MASKING
3701 vinfo(20)='mask_v'
3702# endif
3703 vinfo(21)=vname(6,idv3sd)
3704 vinfo(22)='coordinates'
3705 aval(5)=real(iinfo(1,idv3sd,ng),r8)
3706 rst(ng)%pioVar(idv3sd)%dkind=pio_frst
3707 rst(ng)%pioVar(idv3sd)%gtype=v3dvar
3708!
3709 status=def_var(ng, model, rst(ng)%pioFile, &
3710 & rst(ng)%pioVar(idv3sd)%vd, &
3711 & pio_frst, nvd4, v3dgrd, aval, vinfo, ncname)
3712 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3713 END IF
3714# endif
3715# endif
3716# ifdef ICE_MODEL
3717!
3718!-----------------------------------------------------------------------
3719! Define sea-ice model variables.
3720!-----------------------------------------------------------------------
3721!
3722 CALL ice_def_pio (ng, model, ldefine, hout, rst, &
3723 & t2dgrd, u2dgrd, v2dgrd)
3724 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3725# endif
3726!
3727!-----------------------------------------------------------------------
3728! Leave definition mode.
3729!-----------------------------------------------------------------------
3730!
3731 CALL pio_netcdf_enddef (ng, model, ncname, rst(ng)%pioFile)
3732 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3733!
3734!-----------------------------------------------------------------------
3735! Write out time-recordless, information variables.
3736!-----------------------------------------------------------------------
3737!
3738 CALL wrt_info (ng, model, rst(ng)%pioFile, ncname)
3739 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3740
3741 END IF define
3742!
3743!=======================================================================
3744! Open an existing restart file, check its contents, and prepare for
3745! appending data.
3746!=======================================================================
3747!
3748 query : IF (.not.ldefine) THEN
3749 ncname=rst(ng)%name
3750!
3751! Open restart file for read/write.
3752!
3753 CALL pio_netcdf_open (ng, model, ncname, 1, rst(ng)%pioFile)
3754 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
3755 WRITE (stdout,50) trim(ncname)
3756 RETURN
3757 END IF
3758!
3759! Inquire about the dimensions and check for consistency.
3760!
3761 CALL pio_netcdf_check_dim (ng, model, ncname, &
3762 & piofile = rst(ng)%pioFile)
3763 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3764!
3765! Inquire about the variables.
3766!
3767 CALL pio_netcdf_inq_var (ng, model, ncname, &
3768 & piofile = rst(ng)%pioFile)
3769 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3770!
3771! Initialize logical switches.
3772!
3773 DO i=1,nv
3774 got_var(i)=.false.
3775 END DO
3776!
3777! Scan variable list from input NetCDF and activate switches for
3778! restart variables. Get variable IDs.
3779!
3780 DO i=1,n_var
3781 IF (trim(var_name(i)).eq.trim(vname(1,idtime))) THEN
3782 got_var(idtime)=.true.
3783 rst(ng)%pioVar(idtime)%vd=var_desc(i)
3784 rst(ng)%pioVar(idtime)%dkind=pio_tout
3785 rst(ng)%pioVar(idtime)%gtype=0
3786# if defined SEDIMENT && defined SED_MORPH
3787 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idbath))) THEN
3788 got_var(idbath)=.true.
3789 rst(ng)%pioVar(idbath)%vd=var_desc(i)
3790 rst(ng)%pioVar(idbath)%dkind=pio_frst
3791 rst(ng)%pioVar(idbath)%gtype=r2dvar
3792# endif
3793# if defined WET_DRY
3794 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrwet))) THEN
3795 got_var(idrwet)=.true.
3796 rst(ng)%pioVar(idrwet)%vd=var_desc(i)
3797 rst(ng)%pioVar(idrwet)%dkind=pio_frst
3798 rst(ng)%pioVar(idrwet)%gtype=r2dvar
3799 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduwet))) THEN
3800 got_var(iduwet)=.true.
3801 rst(ng)%pioVar(iduwet)%vd=var_desc(i)
3802 rst(ng)%pioVar(iduwet)%dkind=pio_frst
3803 rst(ng)%pioVar(iduwet)%gtype=u2dvar
3804 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvwet))) THEN
3805 got_var(idvwet)=.true.
3806 rst(ng)%pioVar(idvwet)%vd=var_desc(i)
3807 rst(ng)%pioVar(idvwet)%dkind=pio_frst
3808 rst(ng)%pioVar(idvwet)%gtype=v2dvar
3809 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idpwet))) THEN
3810 got_var(idpwet)=.true.
3811 rst(ng)%pioVar(idpwet)%vd=var_desc(i)
3812 rst(ng)%pioVar(idpwet)%dkind=pio_frst
3813 rst(ng)%pioVar(idpwet)%gtype=p2dvar
3814# endif
3815 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idfsur))) THEN
3816 got_var(idfsur)=.true.
3817 rst(ng)%pioVar(idfsur)%vd=var_desc(i)
3818 rst(ng)%pioVar(idfsur)%dkind=pio_frst
3819 rst(ng)%pioVar(idfsur)%gtype=r2dvar
3820# ifdef PERFECT_RESTART
3821 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrzet))) THEN
3822 got_var(idrzet)=.true.
3823 rst(ng)%pioVar(idrzet)%vd=var_desc(i)
3824 rst(ng)%pioVar(idrzet)%dkind=pio_frst
3825 rst(ng)%pioVar(idrzet)%gtype=r2dvar
3826# endif
3827 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubar))) THEN
3828 got_var(idubar)=.true.
3829 rst(ng)%pioVar(idubar)%vd=var_desc(i)
3830 rst(ng)%pioVar(idubar)%dkind=pio_frst
3831 rst(ng)%pioVar(idubar)%gtype=u2dvar
3832# ifdef PERFECT_RESTART
3833 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idru2d))) THEN
3834 got_var(idru2d)=.true.
3835 rst(ng)%pioVar(idru2d)%vd=var_desc(i)
3836 rst(ng)%pioVar(idru2d)%dkind=pio_frst
3837 rst(ng)%pioVar(idru2d)%gtype=u2dvar
3838# endif
3839 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbar))) THEN
3840 got_var(idvbar)=.true.
3841 rst(ng)%pioVar(idvbar)%vd=var_desc(i)
3842 rst(ng)%pioVar(idvbar)%dkind=pio_frst
3843 rst(ng)%pioVar(idvbar)%gtype=v2dvar
3844# ifdef PERFECT_RESTART
3845 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrv2d))) THEN
3846 got_var(idrv2d)=.true.
3847 rst(ng)%pioVar(idrv2d)%vd=var_desc(i)
3848 rst(ng)%pioVar(idrv2d)%dkind=pio_frst
3849 rst(ng)%pioVar(idrv2d)%gtype=v2dvar
3850# endif
3851# ifdef SOLVE3D
3852 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduvel))) THEN
3853 got_var(iduvel)=.true.
3854 rst(ng)%pioVar(iduvel)%vd=var_desc(i)
3855 rst(ng)%pioVar(iduvel)%dkind=pio_frst
3856 rst(ng)%pioVar(iduvel)%gtype=u3dvar
3857# ifdef PERFECT_RESTART
3858 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idru3d))) THEN
3859 got_var(idru3d)=.true.
3860 rst(ng)%pioVar(idru3d)%vd=var_desc(i)
3861 rst(ng)%pioVar(idru3d)%dkind=pio_frst
3862 rst(ng)%pioVar(idru3d)%gtype=u3dvar
3863# endif
3864 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvel))) THEN
3865 got_var(idvvel)=.true.
3866 rst(ng)%pioVar(idvvel)%vd=var_desc(i)
3867 rst(ng)%pioVar(idvvel)%dkind=pio_frst
3868 rst(ng)%pioVar(idvvel)%gtype=v3dvar
3869# ifdef PERFECT_RESTART
3870 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrv3d))) THEN
3871 got_var(idrv3d)=.true.
3872 rst(ng)%pioVar(idrv3d)%vd=var_desc(i)
3873 rst(ng)%pioVar(idrv3d)%dkind=pio_frst
3874 rst(ng)%pioVar(idrv3d)%gtype=v3dvar
3875# endif
3876 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iddano))) THEN
3877 got_var(iddano)=.true.
3878 rst(ng)%pioVar(iddano)%vd=var_desc(i)
3879 rst(ng)%pioVar(iddano)%dkind=pio_frst
3880 rst(ng)%pioVar(iddano)%gtype=r3dvar
3881# ifdef LMD_SKPP
3882 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idhsbl))) THEN
3883 got_var(idhsbl)=.true.
3884 rst(ng)%pioVar(idhsbl)%vd=var_desc(i)
3885 rst(ng)%pioVar(idhsbl)%dkind=pio_frst
3886 rst(ng)%pioVar(idhsbl)%gtype=r2dvar
3887# endif
3888# ifdef LMD_BKPP
3889 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idhbbl))) THEN
3890 got_var(idhbbl)=.true.
3891 rst(ng)%pioVar(idhbbl)%vd=var_desc(i)
3892 rst(ng)%pioVar(idhbbl)%dkind=pio_frst
3893 rst(ng)%pioVar(idhbbl)%gtype=r2dvar
3894# endif
3895# if defined PERFECT_RESTART && defined LMD_NONLOCAL
3896 ELSE IF (trim(var_name(i)).eq. &
3897 & trim(vname(1,idghat(itemp)))) THEN
3898 got_var(idghat(itemp))=.true.
3899 rst(ng)%pioVar(idghat(itemp))%vd=var_desc(i)
3900 rst(ng)%pioVar(idghat(itemp))%dkind=pio_frst
3901 rst(ng)%pioVar(idghat(itemp))%gtype=w3dvar
3902# ifdef SALINITY
3903 ELSE IF (trim(var_name(i)).eq. &
3904 & trim(vname(1,idghat(isalt)))) THEN
3905 got_var(idghat(isalt))=.true.
3906 rst(ng)%pioVar(idghat(isalt))%vd=var_desc(i)
3907 rst(ng)%pioVar(idghat(isalt))%dkind=pio_frst
3908 rst(ng)%pioVar(idghat(isalt))%gtype=w3dvar
3909# endif
3910# endif
3911 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvis))) THEN
3912 got_var(idvvis)=.true.
3913 rst(ng)%pioVar(idvvis)%vd=var_desc(i)
3914 rst(ng)%pioVar(idvvis)%dkind=pio_frst
3915 rst(ng)%pioVar(idvvis)%gtype=w3dvar
3916 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idtdif))) THEN
3917 got_var(idtdif)=.true.
3918 rst(ng)%pioVar(idtdif)%vd=var_desc(i)
3919 rst(ng)%pioVar(idtdif)%dkind=pio_frst
3920 rst(ng)%pioVar(idtdif)%gtype=w3dvar
3921 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idsdif))) THEN
3922 got_var(idsdif)=.true.
3923 rst(ng)%pioVar(idsdif)%vd=var_desc(i)
3924 rst(ng)%pioVar(idsdif)%dkind=pio_frst
3925 rst(ng)%pioVar(idsdif)%gtype=w3dvar
3926# if defined PERFECT_RESTART && \
3927 (defined gls_mixing || defined my25_mixing)
3928 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idmtke))) THEN
3929 got_var(idmtke)=.true.
3930 rst(ng)%pioVar(idmtke)%vd=var_desc(i)
3931 rst(ng)%pioVar(idmtke)%dkind=pio_frst
3932 rst(ng)%pioVar(idmtke)%gtype=w3dvar
3933 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idmtls))) THEN
3934 got_var(idmtls)=.true.
3935 rst(ng)%pioVar(idmtls)%vd=var_desc(i)
3936 rst(ng)%pioVar(idmtls)%dkind=pio_frst
3937 rst(ng)%pioVar(idmtls)%gtype=w3dvar
3938 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvmls))) THEN
3939 got_var(idvmls)=.true.
3940 rst(ng)%pioVar(idvmls)%vd=var_desc(i)
3941 rst(ng)%pioVar(idvmls)%dkind=pio_frst
3942 rst(ng)%pioVar(idvmls)%gtype=w3dvar
3943 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvmkk))) THEN
3944 got_var(idvmkk)=.true.
3945 rst(ng)%pioVar(idvmkk)%vd=var_desc(i)
3946 rst(ng)%pioVar(idvmkk)%dkind=pio_frst
3947 rst(ng)%pioVar(idvmkk)%gtype=w3dvar
3948# ifdef GLS_MIXING
3949 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvmkp))) THEN
3950 got_var(idvmkp)=.true.
3951 rst(ng)%pioVar(idvmkp)%vd=var_desc(i)
3952 rst(ng)%pioVar(idvmkp)%dkind=pio_frst
3953 rst(ng)%pioVar(idvmkp)%gtype=w3dvar
3954# endif
3955# endif
3956# endif
3957# ifdef WEC
3958 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu2sd))) THEN
3959 got_var(idu2sd)=.true.
3960 rst(ng)%pioVar(idu2sd)%vd=var_desc(i)
3961 rst(ng)%pioVar(idu2sd)%dkind=pio_frst
3962 rst(ng)%pioVar(idu2sd)%gtype=u2dvar
3963 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv2sd))) THEN
3964 got_var(idv2sd)=.true.
3965 rst(ng)%pioVar(idv2rs)%vd=var_desc(i)
3966 rst(ng)%pioVar(idv2rs)%dkind=pio_frst
3967 rst(ng)%pioVar(idv2rs)%gtype=v2dvar
3968# ifdef SOLVE3D
3969 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu3sd))) THEN
3970 got_var(idu3sd)=.true.
3971 rst(ng)%pioVar(idu3sd)%vd=var_desc(i)
3972 rst(ng)%pioVar(idu3sd)%dkind=pio_frst
3973 rst(ng)%pioVar(idu3sd)%gtype=u3dvar
3974 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv3sd))) THEN
3975 got_var(idv3sd)=.true.
3976 rst(ng)%pioVar(idv3sd)%vd=var_desc(i)
3977 rst(ng)%pioVar(idv3sd)%dkind=pio_frst
3978 rst(ng)%pioVar(idv3sd)%gtype=v3dvar
3979# endif
3980# endif
3981 END IF
3982# ifdef SOLVE3D
3983 DO itrc=1,nt(ng)
3984 IF (trim(var_name(i)).eq.trim(vname(1,idtvar(itrc)))) THEN
3985 got_var(idtvar(itrc))=.true.
3986 rst(ng)%pioTrc(itrc)%vd=var_desc(i)
3987 rst(ng)%pioTrc(itrc)%dkind=pio_frst
3988 rst(ng)%pioTrc(itrc)%gtype=r3dvar
3989 END IF
3990 END DO
3991# ifdef SEDIMENT
3992 DO itrc=1,nst
3993 IF (trim(var_name(i)).eq. &
3994 & trim(vname(1,idfrac(itrc)))) THEN
3995 got_var(idfrac(itrc))=.true.
3996 rst(ng)%pioVar(idfrac(itrc))%vd=var_desc(i)
3997 rst(ng)%pioVar(idfrac(itrc))%dkind=pio_frst
3998 rst(ng)%pioVar(idfrac(itrc))%gtype=b3dvar
3999 ELSE IF (trim(var_name(i)).eq. &
4000 & trim(vname(1,idbmas(itrc)))) THEN
4001 got_var(idbmas(itrc))=.true.
4002 rst(ng)%pioVar(idbmas(itrc))%vd=var_desc(i)
4003 rst(ng)%pioVar(idbmas(itrc))%dkind=pio_frst
4004 rst(ng)%pioVar(idbmas(itrc))%gtype=b3dvar
4005# ifdef BEDLOAD
4006 ELSE IF (trim(var_name(i)).eq. &
4007 & trim(vname(1,idubld(itrc)))) THEN
4008 got_var(idubld(itrc))=.true.
4009 rst(ng)%pioVar(idubld(itrc))%vd=var_desc(i)
4010 rst(ng)%pioVar(idubld(itrc))%dkind=pio_frst
4011 rst(ng)%pioVar(idubld(itrc))%gtype=u2dvar
4012 ELSE IF (trim(var_name(i)).eq. &
4013 & trim(vname(1,idvbld(itrc)))) THEN
4014 got_var(idvbld(itrc))=.true.
4015 rst(ng)%pioVar(idvbld(itrc))%vd=var_desc(i)
4016 rst(ng)%pioVar(idvbld(itrc))%dkind=pio_frst
4017 rst(ng)%pioVar(idvbld(itrc))%gtype=v2dvar
4018# endif
4019 END IF
4020 END DO
4021 DO itrc=1,mbedp
4022 IF (trim(var_name(i)).eq.trim(vname(1,idsbed(itrc)))) THEN
4023 got_var(idsbed(itrc))=.true.
4024 rst(ng)%pioVar(idsbed(itrc))%vd=var_desc(i)
4025 rst(ng)%pioVar(idsbed(itrc))%dkind=pio_frst
4026 rst(ng)%pioVar(idsbed(itrc))%gtype=b3dvar
4027 END IF
4028 END DO
4029# endif
4030# if defined SEDIMENT || defined BBL_MODEL
4031 DO itrc=1,6
4032 IF (trim(var_name(i)).eq.trim(vname(1,idbott(itrc)))) THEN
4033 got_var(idbott(itrc))=.true.
4034 rst(ng)%pioVar(idbott(itrc))%vd=var_desc(i)
4035 rst(ng)%pioVar(idbott(itrc))%dkind=pio_frst
4036 rst(ng)%pioVar(idbott(itrc))%gtype=r2dvar
4037 END IF
4038 END DO
4039# endif
4040# endif
4041 END DO
4042!
4043! Check if initialization variables are available in input NetCDF
4044! file.
4045!
4046 IF (.not.got_var(idtime)) THEN
4047 IF (master) WRITE (stdout,60) trim(vname(1,idtime)), &
4048 & trim(ncname)
4049 exit_flag=3
4050 RETURN
4051 END IF
4052# if defined SEDIMENT && defined SED_MORPH
4053 IF (.not.got_var(idbath)) THEN
4054 IF (master) WRITE (stdout,60) trim(vname(1,idbath)), &
4055 & trim(ncname)
4056 exit_flag=3
4057 RETURN
4058 END IF
4059# endif
4060# if defined WET_DRY
4061 IF (.not.got_var(idrwet)) THEN
4062 IF (master) WRITE (stdout,60) trim(vname(1,idrwet)), &
4063 & trim(ncname)
4064 exit_flag=3
4065 RETURN
4066 END IF
4067 IF (.not.got_var(iduwet)) THEN
4068 IF (master) WRITE (stdout,60) trim(vname(1,iduwet)), &
4069 & trim(ncname)
4070 exit_flag=3
4071 RETURN
4072 END IF
4073 IF (.not.got_var(idvwet)) THEN
4074 IF (master) WRITE (stdout,60) trim(vname(1,idvwet)), &
4075 & trim(ncname)
4076 exit_flag=3
4077 RETURN
4078 END IF
4079 IF (.not.got_var(idpwet)) THEN
4080 IF (master) WRITE (stdout,60) trim(vname(1,idpwet)), &
4081 & trim(ncname)
4082 exit_flag=3
4083 RETURN
4084 END IF
4085# endif
4086 IF (.not.got_var(idfsur)) THEN
4087 IF (master) WRITE (stdout,60) trim(vname(1,idfsur)), &
4088 & trim(ncname)
4089 exit_flag=3
4090 RETURN
4091 END IF
4092# ifdef PERFECT_RESTART
4093 IF (.not.got_var(idrzet)) THEN
4094 IF (master) WRITE (stdout,60) trim(vname(1,idrzet)), &
4095 & trim(ncname)
4096 exit_flag=3
4097 RETURN
4098 END IF
4099# endif
4100 IF (.not.got_var(idubar)) THEN
4101 IF (master) WRITE (stdout,60) trim(vname(1,idubar)), &
4102 & trim(ncname)
4103 exit_flag=3
4104 RETURN
4105 END IF
4106# ifdef PERFECT_RESTART
4107 IF (.not.got_var(idru2d)) THEN
4108 IF (master) WRITE (stdout,60) trim(vname(1,idru2d)), &
4109 & trim(ncname)
4110 exit_flag=3
4111 RETURN
4112 END IF
4113# endif
4114 IF (.not.got_var(idvbar)) THEN
4115 IF (master) WRITE (stdout,60) trim(vname(1,idvbar)), &
4116 & trim(ncname)
4117 exit_flag=3
4118 RETURN
4119 END IF
4120# ifdef PERFECT_RESTART
4121 IF (.not.got_var(idrv2d)) THEN
4122 IF (master) WRITE (stdout,60) trim(vname(1,idrv2d)), &
4123 & trim(ncname)
4124 exit_flag=3
4125 RETURN
4126 END IF
4127# endif
4128# ifdef SOLVE3D
4129 IF (.not.got_var(iduvel)) THEN
4130 IF (master) WRITE (stdout,60) trim(vname(1,iduvel)), &
4131 & trim(ncname)
4132 exit_flag=3
4133 RETURN
4134 END IF
4135# ifdef PERFECT_RESTART
4136 IF (.not.got_var(idru3d)) THEN
4137 IF (master) WRITE (stdout,60) trim(vname(1,idru3d)), &
4138 & trim(ncname)
4139 exit_flag=3
4140 RETURN
4141 END IF
4142# endif
4143 IF (.not.got_var(idvvel)) THEN
4144 IF (master) WRITE (stdout,60) trim(vname(1,idvvel)), &
4145 & trim(ncname)
4146 exit_flag=3
4147 RETURN
4148 END IF
4149# ifdef PERFECT_RESTART
4150 IF (.not.got_var(idrv3d)) THEN
4151 IF (master) WRITE (stdout,60) trim(vname(1,idrv3d)), &
4152 & trim(ncname)
4153 exit_flag=3
4154 RETURN
4155 END IF
4156# endif
4157 IF (.not.got_var(iddano)) THEN
4158 IF (master) WRITE (stdout,60) trim(vname(1,iddano)), &
4159 & trim(ncname)
4160 exit_flag=3
4161 RETURN
4162 END IF
4163# if defined PERFECT_RESTART && \
4164 (defined gls_mixing || defined my25_mixing)
4165 IF (.not.got_var(idmtke)) THEN
4166 IF (master) WRITE (stdout,60) trim(vname(1,idmtke)), &
4167 & trim(ncname)
4168 exit_flag=3
4169 RETURN
4170 END IF
4171 IF (.not.got_var(idmtls)) THEN
4172 IF (master) WRITE (stdout,60) trim(vname(1,idmtls)), &
4173 & trim(ncname)
4174 exit_flag=3
4175 RETURN
4176 END IF
4177 IF (.not.got_var(idvmls)) THEN
4178 IF (master) WRITE (stdout,60) trim(vname(1,idvmls)), &
4179 & trim(ncname)
4180 exit_flag=3
4181 RETURN
4182 END IF
4183 IF (.not.got_var(idvmkk)) THEN
4184 IF (master) WRITE (stdout,60) trim(vname(1,idvmkk)), &
4185 & trim(ncname)
4186 exit_flag=3
4187 RETURN
4188 END IF
4189# ifdef GLS_MIXING
4190 IF (.not.got_var(idvmkp)) THEN
4191 IF (master) WRITE (stdout,60) trim(vname(1,idvmkp)), &
4192 & trim(ncname)
4193 exit_flag=3
4194 RETURN
4195 END IF
4196# endif
4197# endif
4198# endif
4199# ifdef WEC
4200 IF (.not.got_var(idu2sd)) THEN
4201 IF (master) WRITE (stdout,60) trim(vname(1,idu2sd)), &
4202 & trim(ncname)
4203 exit_flag=3
4204 RETURN
4205 END IF
4206 IF (.not.got_var(idv2sd)) THEN
4207 IF (master) WRITE (stdout,60) trim(vname(1,idv2sd)), &
4208 & trim(ncname)
4209 exit_flag=3
4210 RETURN
4211 END IF
4212# ifdef SOLVE3D
4213 IF (.not.got_var(idu3sd)) THEN
4214 IF (master) WRITE (stdout,60) trim(vname(1,idu3sd)), &
4215 & trim(ncname)
4216 exit_flag=3
4217 RETURN
4218 END IF
4219 IF (.not.got_var(idv3sd)) THEN
4220 IF (master) WRITE (stdout,60) trim(vname(1,idv3sd)), &
4221 & trim(ncname)
4222 exit_flag=3
4223 RETURN
4224 END IF
4225# endif
4226# endif
4227# ifdef SOLVE3D
4228 DO itrc=1,nt(ng)
4229 IF (.not.got_var(idtvar(itrc))) THEN
4230 IF (master) WRITE (stdout,60) trim(vname(1,idtvar(itrc))), &
4231 & trim(ncname)
4232 exit_flag=3
4233 RETURN
4234 END IF
4235 END DO
4236# ifdef SEDIMENT
4237 DO i=1,nst
4238 IF (.not.got_var(idfrac(i))) THEN
4239 IF (master) WRITE (stdout,60) trim(vname(1,idfrac(i))), &
4240 & trim(ncname)
4241 exit_flag=3
4242 RETURN
4243 END IF
4244 IF (.not.got_var(idbmas(i))) THEN
4245 IF (master) WRITE (stdout,60) trim(vname(1,idbmas(i))), &
4246 & trim(ncname)
4247 exit_flag=3
4248 RETURN
4249 END IF
4250# ifdef BEDLOAD
4251 IF (.not.got_var(idubld(i))) THEN
4252 IF (master) WRITE (stdout,60) trim(vname(1,idubld(i))), &
4253 & trim(ncname)
4254 exit_flag=3
4255 RETURN
4256 END IF
4257 IF (.not.got_var(idvbld(i))) THEN
4258 IF (master) WRITE (stdout,60) trim(vname(1,idvbld(i))), &
4259 & trim(ncname)
4260 exit_flag=3
4261 RETURN
4262 END IF
4263# endif
4264 END DO
4265 DO i=1,mbedp
4266 IF (.not.got_var(idsbed(i))) THEN
4267 IF (master) WRITE (stdout,60) trim(vname(1,idsbed(i))), &
4268 & trim(ncname)
4269 exit_flag=3
4270 RETURN
4271 END IF
4272 END DO
4273# endif
4274# if defined SEDIMENT || defined BBL_MODEL
4275 DO i=1,6
4276 IF (.not.got_var(idbott(i))) THEN
4277 IF (master) WRITE (stdout,60) trim(vname(1,idbott(i))), &
4278 & trim(ncname)
4279 exit_flag=3
4280 RETURN
4281 END IF
4282 END DO
4283# endif
4284# endif
4285# ifdef ICE_MODEL
4286!
4287! Scan sea-ice variables from input NetCDF and activate switches for
4288! restart variables. Get variable IDs.
4289!
4290 CALL ice_def_pio (ng, model, ldefine, hout, rst)
4291# endif
4292!
4293! Set unlimited time record dimension to current value.
4294!
4295 IF (lcyclerst(ng)) THEN
4296 rst(ng)%Rindex=0
4297 ELSE
4298 rst(ng)%Rindex=rec_size
4299 END IF
4300 END IF query
4301!
4302 10 FORMAT (2x,'DEF_RST_PIO - creating restart file,',t56, &
4303 & 'Grid ',i2.2,': ',a)
4304 20 FORMAT (2x,'DEF_RST_PIO - inquiring restart file,',t56, &
4305 & 'Grid ',i2.2,': ',a)
4306 30 FORMAT (/,' DEF_RST_PIO - unable to create restart NetCDF', &
4307 & ' file:',a)
4308 40 FORMAT (1pe11.4,1x,'millimeter')
4309 50 FORMAT (/,' DEF_RST_PIO - unable to open restart NetCDF', &
4310 & ' file: ',a)
4311 60 FORMAT (/,' DEF_RST_PIO - unable to find variable: ',a,2x, &
4312 & ' in restart NetCDF file: ',a)
4313!
4314 RETURN
4315 END SUBROUTINE def_rst_pio
4316#endif
4317 END MODULE def_rst_mod
subroutine, public def_rst(ng)
Definition def_rst.F:61
subroutine, private def_rst_pio(ng, model)
Definition def_rst.F:2100
subroutine, private def_rst_nf90(ng, model)
Definition def_rst.F:98
integer, parameter nfec
Definition ecosim_mod.h:204
integer, parameter nbac
Definition ecosim_mod.h:202
integer, parameter ndom
Definition ecosim_mod.h:203
integer, parameter nbands
Definition ecosim_mod.h:201
integer, parameter nphy
Definition ecosim_mod.h:205
integer, dimension(:), allocatable nstatevar
type(t_io), dimension(:), allocatable rst
type(t_io), dimension(:), allocatable ini
integer stdout
character(len=256) sourcefile
integer iddano
integer idvmls
logical, dimension(:,:), allocatable hout
integer, parameter io_nf90
Definition mod_ncparam.F:95
integer idv2rs
integer idv3sd
integer idrv3d
integer idubar
integer idvvel
integer idhsbl
integer, parameter nv
integer, parameter io_pio
Definition mod_ncparam.F:96
integer idrwet
integer idsdif
integer idru2d
integer idvmkp
integer idtdif
integer idfsur
integer, dimension(:), allocatable idtvar
integer idhbbl
integer idbath
integer idmtke
integer iduvel
integer, dimension(2) idghat
integer iduwet
character(len=maxlen), dimension(6, 0:nv) vname
integer idtime
integer, dimension(:,:,:), allocatable iinfo
integer idpwet
integer idru3d
integer idvmkk
integer, parameter ndimid
integer idvvis
integer idv2sd
integer idrzet
integer idvwet
integer idmtls
integer idu3sd
integer idu2sd
integer idrv2d
integer idvbar
integer, parameter nf_tout
Definition mod_netcdf.F:207
subroutine, public netcdf_check_dim(ng, model, ncname, ncid)
Definition mod_netcdf.F:538
subroutine, public netcdf_open(ng, model, ncname, omode, ncid)
subroutine, public netcdf_enddef(ng, model, ncname, ncid)
character(len=100), dimension(mvars) var_name
Definition mod_netcdf.F:169
integer, dimension(mvars) var_id
Definition mod_netcdf.F:160
integer n_var
Definition mod_netcdf.F:152
integer rec_size
Definition mod_netcdf.F:156
subroutine, public netcdf_create(ng, model, ncname, ncid)
subroutine, public netcdf_inq_var(ng, model, ncname, ncid, myvarname, searchvar, varid, nvardim, nvaratt)
integer, parameter nf_frst
Definition mod_netcdf.F:193
logical master
integer nat
Definition mod_param.F:499
integer, parameter inlm
Definition mod_param.F:662
integer nbed
Definition mod_param.F:517
integer, dimension(:), allocatable n
Definition mod_param.F:479
integer, parameter b3dvar
Definition mod_param.F:725
integer, parameter r3dvar
Definition mod_param.F:721
type(t_iobounds), dimension(:), allocatable iobounds
Definition mod_param.F:282
integer, parameter u3dvar
Definition mod_param.F:722
integer, parameter u2dvar
Definition mod_param.F:718
integer, parameter w3dvar
Definition mod_param.F:724
integer, parameter p2dvar
Definition mod_param.F:716
integer, dimension(:), allocatable nt
Definition mod_param.F:489
integer, parameter r2dvar
Definition mod_param.F:717
integer, parameter v2dvar
Definition mod_param.F:719
integer nst
Definition mod_param.F:521
integer, parameter v3dvar
Definition mod_param.F:723
integer, parameter pio_fout
type(var_desc_t), dimension(:), pointer var_desc
integer, parameter pio_frst
subroutine, public pio_netcdf_create(ng, model, ncname, piofile)
subroutine, public pio_netcdf_inq_var(ng, model, ncname, piofile, myvarname, searchvar, piovar, nvardim, nvaratt)
subroutine, public pio_netcdf_open(ng, model, ncname, omode, piofile)
subroutine, public pio_netcdf_check_dim(ng, model, ncname, piofile)
integer, parameter pio_tout
subroutine, public pio_netcdf_enddef(ng, model, ncname, piofile)
integer, dimension(:), allocatable nrrec
real(dp), parameter spval
integer, dimension(:), allocatable iic
type(t_clock) rclock
integer exit_flag
integer isalt
integer itemp
integer, dimension(:), allocatable ntstart
integer noerror
logical, dimension(:), allocatable lcyclerst
integer, dimension(:), allocatable idubld
integer, dimension(mbedp) idsbed
integer, dimension(:), allocatable idsed
integer, dimension(:), allocatable idfrac
integer, dimension(mbotp) idbott
real(r8), dimension(:,:), allocatable sd50
integer, dimension(:), allocatable idvbld
integer, dimension(:), allocatable idbmas
integer, parameter mbedp
logical function, public founderror(flag, noerr, line, routine)
Definition strings.F:52