110
111
113
114
115
116 integer, intent(in) :: ng, model, tile
117 integer, intent(in) :: LBi, UBi, LBj, UBj
118
119
120
121 integer :: Fcount, gfactor, gtype, i, itrc, status
122# if defined PERFECT_RESTART || defined SOLVE3D
123 integer :: ntmp(1)
124# endif
125
126 real(dp) :: scale
127
128 character (len=*), parameter :: MyFile = &
129 & __FILE__//", wrt_rst_nf90"
130
131 sourcefile=myfile
132
133
134
135
136
137 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
138
139
140
141
142#if !defined PERFECT_RESTART && \
143 (defined write_water && defined masking)
144 gfactor=-1
145#else
146 gfactor=1
147#endif
148
149
150
151 rst(ng)%Rindex=rst(ng)%Rindex+1
152 fcount=rst(ng)%Fcount
153 rst(ng)%Nrec(fcount)=rst(ng)%Nrec(fcount)+1
154
155
156
157#ifdef SOLVE3D
158# ifdef NESTING
159 IF (master) WRITE (stdout,10) kout, nout, rst(ng)%Rindex, ng
160# else
161 IF (master) WRITE (stdout,10) kout, nout, rst(ng)%Rindex
162# endif
163#else
164# ifdef NESTING
165 IF (master) WRITE (stdout,10) kout, rst(ng)%Rindex, ng
166# else
167 IF (master) WRITE (stdout,10) kout, rst(ng)%Rindex
168# endif
169#endif
170
171
172
173
174 IF (lcyclerst(ng)) THEN
175 rst(ng)%Rindex=mod(rst(ng)%Rindex-1,2)+1
176 END IF
177
178#ifdef PERFECT_RESTART
179
180
181
182# ifdef SOLVE3D
183 ntmp(1)=1+mod((iic(ng)-1)-ntstart(ng),2)
185 & ntmp, (/rst(ng)%Rindex/), (/1/), &
186 & ncid = rst(ng)%ncid)
187 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
188
190 & ntmp, (/rst(ng)%Rindex/), (/1/), &
191 & ncid = rst(ng)%ncid)
192 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
193
194 ntmp(1)=3-ntmp(1)
196 & ntmp, (/rst(ng)%Rindex/), (/1/), &
197 & ncid = rst(ng)%ncid)
198 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
199# endif
201 & kstp(ng:), (/rst(ng)%Rindex/), (/1/), &
202 & ncid = rst(ng)%ncid)
203 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
204
206 & krhs(ng:), (/rst(ng)%Rindex/), (/1/), &
207 & ncid = rst(ng)%ncid)
208 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
209
211 & knew(ng:), (/rst(ng)%Rindex/), (/1/), &
212 & ncid = rst(ng)%ncid)
213 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
214#endif
215
216
217
219 & trim(vname(1,idtime)), time(ng:), &
220 & (/rst(ng)%Rindex/), (/1/), &
221 & ncid = rst(ng)%ncid, &
222 & varid = rst(ng)%Vid(idtime))
223 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
224
225#if defined SEDIMENT && defined SED_MORPH
226
227
228
229 IF (hout(idbath,ng)) THEN
230 scale=1.0_dp
231 gtype=gfactor*r2dvar
232 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idbath, &
233 & rst(ng)%Vid(idbath), &
234 & rst(ng)%Rindex, gtype, &
235 & lbi, ubi, lbj, ubj, scale, &
236# ifdef MASKING
237 & grid(ng) % rmask, &
238# endif
239 & grid(ng) % h, &
240 & setfillval = .false.)
241 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
242 IF (master) THEN
243 WRITE (stdout,20) trim(vname(1,idbath)), rst(ng)%Rindex
244 END IF
245 exit_flag=3
246 ioerror=status
247 RETURN
248 END IF
249 END IF
250#endif
251#ifdef WET_DRY
252
253
254
255 scale=1.0_dp
256 gtype=gfactor*p2dvar
257 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idpwet, &
258 & rst(ng)%Vid(idpwet), &
259 & rst(ng)%Rindex, gtype, &
260 & lbi, ubi, lbj, ubj, scale, &
261# ifdef MASKING
262 & grid(ng) % pmask, &
263# endif
264 & grid(ng) % pmask_wet, &
265 & setfillval = .false.)
266 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
267 IF (master) THEN
268 WRITE (stdout,20) trim(vname(1,idpwet)), rst(ng)%Rindex
269 END IF
270 exit_flag=3
271 ioerror=status
272 RETURN
273 END IF
274
275
276
277 scale=1.0_dp
278 gtype=gfactor*r2dvar
279 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idrwet, &
280 & rst(ng)%Vid(idrwet), &
281 & rst(ng)%Rindex, gtype, &
282 & lbi, ubi, lbj, ubj, scale, &
283# ifdef MASKING
284 & grid(ng) % rmask, &
285# endif
286 & grid(ng) % rmask_wet, &
287 & setfillval = .false.)
288 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
289 IF (master) THEN
290 WRITE (stdout,20) trim(vname(1,idrwet)), rst(ng)%Rindex
291 END IF
292 exit_flag=3
293 ioerror=status
294 RETURN
295 END IF
296
297
298
299 scale=1.0_dp
300 gtype=gfactor*u2dvar
301 status=nf_fwrite2d(ng, model, rst(ng)%ncid, iduwet, &
302 & rst(ng)%Vid(iduwet), &
303 & rst(ng)%Rindex, gtype, &
304 & lbi, ubi, lbj, ubj, scale, &
305# ifdef MASKING
306 & grid(ng) % umask, &
307# endif
308 & grid(ng) % umask_wet, &
309 & setfillval = .false.)
310 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
311 IF (master) THEN
312 WRITE (stdout,20) trim(vname(1,iduwet)), rst(ng)%Rindex
313 END IF
314 exit_flag=3
315 ioerror=status
316 RETURN
317 END IF
318
319
320
321 scale=1.0_dp
322 gtype=gfactor*v2dvar
323 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idvwet, &
324 & rst(ng)%Vid(idvwet), &
325 & rst(ng)%Rindex, gtype, &
326 & lbi, ubi, lbj, ubj, scale, &
327# ifdef MASKING
328 & grid(ng) % vmask, &
329# endif
330 & grid(ng) % vmask_wet, &
331 & setfillval = .false.)
332 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
333 IF (master) THEN
334 WRITE (stdout,20) trim(vname(1,idvwet)), rst(ng)%Rindex
335 END IF
336 exit_flag=3
337 ioerror=status
338 RETURN
339 END IF
340#endif
341
342
343
344 scale=1.0_dp
345#ifdef PERFECT_RESTART
346 gtype=gfactor*r3dvar
347 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idfsur, &
348 & rst(ng)%Vid(idfsur), &
349 & rst(ng)%Rindex, gtype, &
350 & lbi, ubi, lbj, ubj, 1, 3, scale, &
351# ifdef MASKING
352 & grid(ng) % rmask, &
353# endif
354# ifdef WET_DRY
355 & ocean(ng) % zeta, &
356 & setfillval = .false.)
357# else
358 & ocean(ng) % zeta)
359# endif
360#else
361 gtype=gfactor*r2dvar
362 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idfsur, &
363 & rst(ng)%Vid(idfsur), &
364 & rst(ng)%Rindex, gtype, &
365 & lbi, ubi, lbj, ubj, scale, &
366# ifdef MASKING
367 & grid(ng) % rmask, &
368# endif
369# ifdef WET_DRY
370 & ocean(ng) % zeta(:,:,kout), &
371 & setfillval = .false.)
372# else
373 & ocean(ng) % zeta(:,:,kout))
374# endif
375#endif
376 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
377 IF (master) THEN
378 WRITE (stdout,20) trim(vname(1,idfsur)), rst(ng)%Rindex
379 END IF
380 exit_flag=3
381 ioerror=status
382 RETURN
383 END IF
384#ifdef PERFECT_RESTART
385
386
387
388 scale=1.0_dp
389 gtype=gfactor*r3dvar
390 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idrzet, &
391 & rst(ng)%Vid(idrzet), &
392 & rst(ng)%Rindex, gtype, &
393 & lbi, ubi, lbj, ubj, 1, 2, scale, &
394# ifdef MASKING
395 & grid(ng) % rmask, &
396# endif
397 & ocean(ng) % rzeta)
398 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
399 IF (master) THEN
400 WRITE (stdout,20) trim(vname(1,idrzet)), rst(ng)%Rindex
401 END IF
402 exit_flag=3
403 ioerror=status
404 RETURN
405 END IF
406#endif
407
408
409
410 scale=1.0_dp
411#ifdef PERFECT_RESTART
412 gtype=gfactor*u3dvar
413 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idubar, &
414 & rst(ng)%Vid(idubar), &
415 & rst(ng)%Rindex, gtype, &
416 & lbi, ubi, lbj, ubj, 1, 3, scale, &
417# ifdef MASKING
418 & grid(ng) % umask, &
419# endif
420 & ocean(ng) % ubar, &
421 & setfillval = .false.)
422
423#else
424 gtype=gfactor*u2dvar
425 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idubar, &
426 & rst(ng)%Vid(idubar), &
427 & rst(ng)%Rindex, gtype, &
428 & lbi, ubi, lbj, ubj, scale, &
429# ifdef MASKING
430 & grid(ng) % umask_full, &
431# endif
432 & ocean(ng) % ubar(:,:,kout))
433#endif
434 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
435 IF (master) THEN
436 WRITE (stdout,20) trim(vname(1,idubar)), rst(ng)%Rindex
437 END IF
438 exit_flag=3
439 ioerror=status
440 RETURN
441 END IF
442#ifdef PERFECT_RESTART
443
444
445
446 scale=1.0_dp
447 gtype=gfactor*u3dvar
448 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idru2d, &
449 & rst(ng)%Vid(idru2d), &
450 & rst(ng)%Rindex, gtype, &
451 & lbi, ubi, lbj, ubj, 1, 2, scale, &
452# ifdef MASKING
453 & grid(ng) % umask, &
454# endif
455 & ocean(ng) % rubar, &
456 & setfillval = .false.)
457 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
458 IF (master) THEN
459 WRITE (stdout,20) trim(vname(1,idru2d)), rst(ng)%Rindex
460 END IF
461 exit_flag=3
462 ioerror=status
463 RETURN
464 END IF
465#endif
466
467
468
469 scale=1.0_dp
470#ifdef PERFECT_RESTART
471 gtype=gfactor*v3dvar
472 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idvbar, &
473 & rst(ng)%Vid(idvbar), &
474 & rst(ng)%Rindex, gtype, &
475 & lbi, ubi, lbj, ubj, 1, 3, scale, &
476# ifdef MASKING
477 & grid(ng) % vmask, &
478# endif
479 & ocean(ng) % vbar, &
480 & setfillval = .false.)
481#else
482 gtype=gfactor*v2dvar
483 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idvbar, &
484 & rst(ng)%Vid(idvbar), &
485 & rst(ng)%Rindex, gtype, &
486 & lbi, ubi, lbj, ubj, scale, &
487# ifdef MASKING
488 & grid(ng) % vmask_full, &
489# endif
490 & ocean(ng) % vbar(:,:,kout))
491#endif
492 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
493 IF (master) THEN
494 WRITE (stdout,20) trim(vname(1,idvbar)), rst(ng)%Rindex
495 END IF
496 exit_flag=3
497 ioerror=status
498 RETURN
499 END IF
500
501#ifdef PERFECT_RESTART
502
503
504
505 scale=1.0_dp
506 gtype=gfactor*v3dvar
507 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idrv2d, &
508 & rst(ng)%Vid(idrv2d), &
509 & rst(ng)%Rindex, gtype, &
510 & lbi, ubi, lbj, ubj, 1, 2, scale, &
511# ifdef MASKING
512 & grid(ng) % vmask, &
513# endif
514 & ocean(ng) % rvbar, &
515 & setfillval = .false.)
516 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
517 IF (master) THEN
518 WRITE (stdout,20) trim(vname(1,idrv2d)), rst(ng)%Rindex
519 END IF
520 exit_flag=3
521 ioerror=status
522 RETURN
523 END IF
524#endif
525#ifdef SOLVE3D
526
527
528
529 scale=1.0_dp
530 gtype=gfactor*u3dvar
531# ifdef PERFECT_RESTART
532 status=nf_fwrite4d(ng, model, rst(ng)%ncid, iduvel, &
533 & rst(ng)%Vid(iduvel), &
534 & rst(ng)%Rindex, gtype, &
535 & lbi, ubi, lbj, ubj, 1, n(ng), 1, 2, scale, &
536# ifdef MASKING
537 & grid(ng) % umask, &
538# endif
539 & ocean(ng) % u, &
540 & setfillval = .false.)
541# else
542 status=nf_fwrite3d(ng, model, rst(ng)%ncid, iduvel, &
543 & rst(ng)%Vid(iduvel), &
544 & rst(ng)%Rindex, gtype, &
545 & lbi, ubi, lbj, ubj, 1, n(ng), scale, &
546# ifdef MASKING
547 & grid(ng) % umask_full, &
548# endif
549 & ocean(ng) % u(:,:,:,nout))
550# endif
551 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
552 IF (master) THEN
553 WRITE (stdout,20) trim(vname(1,iduvel)), rst(ng)%Rindex
554 END IF
555 exit_flag=3
556 ioerror=status
557 RETURN
558 END IF
559
560# ifdef PERFECT_RESTART
561
562
563
564 scale=1.0_dp
565 gtype=gfactor*u3dvar
566 status=nf_fwrite4d(ng, model, rst(ng)%ncid, idru3d, &
567 & rst(ng)%Vid(idru3d), &
568 & rst(ng)%Rindex, gtype, &
569 & lbi, ubi, lbj, ubj, 0, n(ng), 1, 2, scale, &
570# ifdef MASKING
571 & grid(ng) % umask, &
572# endif
573 & ocean(ng) % ru, &
574 & setfillval = .false.)
575 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
576 IF (master) THEN
577 WRITE (stdout,20) trim(vname(1,idru3d)), rst(ng)%Rindex
578 END IF
579 exit_flag=3
580 ioerror=status
581 RETURN
582 END IF
583# endif
584
585
586
587 scale=1.0_dp
588 gtype=gfactor*v3dvar
589# ifdef PERFECT_RESTART
590 status=nf_fwrite4d(ng, model, rst(ng)%ncid, idvvel, &
591 & rst(ng)%Vid(idvvel), &
592 & rst(ng)%Rindex, gtype, &
593 & lbi, ubi, lbj, ubj, 1, n(ng), 1, 2, scale, &
594# ifdef MASKING
595 & grid(ng) % vmask, &
596# endif
597 & ocean(ng) % v, &
598 & setfillval = .false.)
599# else
600 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idvvel, &
601 & rst(ng)%Vid(idvvel), &
602 & rst(ng)%Rindex, gtype, &
603 & lbi, ubi, lbj, ubj, 1, n(ng), scale, &
604# ifdef MASKING
605 & grid(ng) % vmask_full, &
606# endif
607 & ocean(ng) % v(:,:,:,nout))
608# endif
609 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
610 IF (master) THEN
611 WRITE (stdout,20) trim(vname(1,idvvel)), rst(ng)%Rindex
612 END IF
613 exit_flag=3
614 ioerror=status
615 RETURN
616 END IF
617
618# ifdef PERFECT_RESTART
619
620
621
622 scale=1.0_dp
623 gtype=gfactor*v3dvar
624 status=nf_fwrite4d(ng, model, rst(ng)%ncid, idrv3d, &
625 & rst(ng)%Vid(idrv3d), &
626 & rst(ng)%Rindex, gtype, &
627 & lbi, ubi, lbj, ubj, 0, n(ng), 1, 2, scale, &
628# ifdef MASKING
629 & grid(ng) % vmask, &
630# endif
631 & ocean(ng) % rv, &
632 & setfillval = .false.)
633 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
634 IF (master) THEN
635 WRITE (stdout,20) trim(vname(1,idrv3d)), rst(ng)%Rindex
636 END IF
637 exit_flag=3
638 ioerror=status
639 RETURN
640 END IF
641# endif
642
643
644
645 DO itrc=1,nt(ng)
646 scale=1.0_dp
647 gtype=gfactor*r3dvar
648# ifdef PERFECT_RESTART
649 status=nf_fwrite4d(ng, model, rst(ng)%ncid, idtvar(itrc), &
650 & rst(ng)%Tid(itrc), &
651 & rst(ng)%Rindex, gtype, &
652 & lbi, ubi, lbj, ubj, 1, n(ng), 1, 2, scale, &
653# ifdef MASKING
654 & grid(ng) % rmask, &
655# endif
656 & ocean(ng) % t(:,:,:,:,itrc))
657# else
658 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idtvar(itrc), &
659 & rst(ng)%Tid(itrc), &
660 & rst(ng)%Rindex, gtype, &
661 & lbi, ubi, lbj, ubj, 1, n(ng), scale, &
662# ifdef MASKING
663 & grid(ng) % rmask, &
664# endif
665 & ocean(ng) % t(:,:,:,nout,itrc))
666# endif
667 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
668 IF (master) THEN
669 WRITE (stdout,20) trim(vname(1,idtvar(itrc))), &
670 & rst(ng)%Rindex
671 END IF
672 exit_flag=3
673 ioerror=status
674 RETURN
675 END IF
676 END DO
677
678
679
680 scale=1.0_dp
681 gtype=gfactor*r3dvar
682 status=nf_fwrite3d(ng, model, rst(ng)%ncid, iddano, &
683 & rst(ng)%Vid(iddano), &
684 & rst(ng)%Rindex, gtype, &
685 & lbi, ubi, lbj, ubj, 1, n(ng), scale, &
686# ifdef MASKING
687 & grid(ng) % rmask, &
688# endif
689 & ocean(ng) % rho)
690 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
691 IF (master) THEN
692 WRITE (stdout,20) trim(vname(1,iddano)), rst(ng)%Rindex
693 END IF
694 exit_flag=3
695 ioerror=status
696 RETURN
697 END IF
698
699# ifdef LMD_SKPP
700
701
702
703 scale=1.0_dp
704 gtype=gfactor*r2dvar
705 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idhsbl, &
706 & rst(ng)%Vid(idhsbl), &
707 & rst(ng)%Rindex, gtype, &
708 & lbi, ubi, lbj, ubj, scale, &
709# ifdef MASKING
710 & grid(ng) % rmask, &
711# endif
712 & mixing(ng) % hsbl)
713 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
714 IF (master) THEN
715 WRITE (stdout,20) trim(vname(1,idhsbl)), rst(ng)%Rindex
716 END IF
717 exit_flag=3
718 ioerror=status
719 RETURN
720 END IF
721# endif
722# ifdef LMD_BKPP
723
724
725
726 scale=1.0_dp
727 gtype=gfactor*r2dvar
728 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idhbbl, &
729 & rst(ng)%Vid(idhbbl), &
730 & rst(ng)%Rindex, gtype, &
731 & lbi, ubi, lbj, ubj, scale, &
732# ifdef MASKING
733 & grid(ng) % rmask, &
734# endif
735 & mixing(ng) % hbbl)
736 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
737 IF (master) THEN
738 WRITE (stdout,20) trim(vname(1,idhbbl)), rst(ng)%Rindex
739 END IF
740 exit_flag=3
741 ioerror=status
742 RETURN
743 END IF
744# endif
745# if defined PERFECT_RESTART && defined LMD_NONLOCAL
746
747
748
749 DO i=1,nat
750 scale=1.0_dp
751 gtype=gfactor*w3dvar
752 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idghat(i), &
753 & rst(ng)%Vid(idghat(i)), &
754 & rst(ng)%Rindex, gtype, &
755 & lbi, ubi, lbj, ubj, 0, n(ng), scale, &
756# ifdef MASKING
757 & grid(ng) % rmask, &
758# endif
759 & mixing(ng) % ghats(:,:,:,i))
760 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
761 IF (master) THEN
762 WRITE (stdout,20) trim(vname(1,idghat(i))), rst(ng)%Rindex
763 END IF
764 exit_flag=3
765 ioerror=status
766 RETURN
767 END IF
768 END DO
769# endif
770# if defined BVF_MIXING || defined GLS_MIXING || \
771 defined my25_mixing || defined lmd_mixing
772
773
774
775 scale=1.0_dp
776 gtype=gfactor*w3dvar
777 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idvvis, &
778 & rst(ng)%Vid(idvvis), &
779 & rst(ng)%Rindex, gtype, &
780 & lbi, ubi, lbj, ubj, 0, n(ng), scale, &
781# ifdef MASKING
782 & grid(ng) % rmask, &
783# endif
784 & mixing(ng) % Akv, &
785 & setfillval = .false.)
786 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
787 IF (master) THEN
788 WRITE (stdout,20) trim(vname(1,idvvis)), rst(ng)%Rindex
789 END IF
790 exit_flag=3
791 ioerror=status
792 RETURN
793 END IF
794
795
796
797 scale=1.0_dp
798 gtype=gfactor*w3dvar
799 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idtdif, &
800 & rst(ng)%Vid(idtdif), &
801 & rst(ng)%Rindex, gtype, &
802 & lbi, ubi, lbj, ubj, 0, n(ng), scale, &
803# ifdef MASKING
804 & grid(ng) % rmask, &
805# endif
806 & mixing(ng) % Akt(:,:,:,itemp), &
807 & setfillval = .false.)
808
809 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
810 IF (master) THEN
811 WRITE (stdout,20) trim(vname(1,idtdif)), rst(ng)%Rindex
812 END IF
813 exit_flag=3
814 ioerror=status
815 RETURN
816 END IF
817
818# ifdef SALINITY
819
820
821
822 scale=1.0_dp
823 gtype=gfactor*w3dvar
824 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idsdif, &
825 & rst(ng)%Vid(idsdif), &
826 & rst(ng)%Rindex, gtype, &
827 & lbi, ubi, lbj, ubj, 0, n(ng), scale, &
828# ifdef MASKING
829 & grid(ng) % rmask, &
830# endif
831 & mixing(ng) % Akt(:,:,:,isalt), &
832 & setfillval = .false.)
833 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
834 IF (master) THEN
835 WRITE (stdout,20) trim(vname(1,idsdif)), rst(ng)%Rindex
836 END IF
837 exit_flag=3
838 ioerror=status
839 RETURN
840 END IF
841# endif
842# endif
843# if defined PERFECT_RESTART && \
844 (defined gls_mixing || defined my25_mixing)
845
846
847
848 scale=1.0_dp
849 gtype=gfactor*w3dvar
850 status=nf_fwrite4d(ng, model, rst(ng)%ncid, idmtke, &
851 & rst(ng)%Vid(idmtke), &
852 & rst(ng)%Rindex, gtype, &
853 & lbi, ubi, lbj, ubj, 0, n(ng), 1, 2, scale, &
854# ifdef MASKING
855 & grid(ng) % rmask, &
856# endif
857 & mixing(ng) % tke, &
858 & setfillval = .false.)
859 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
860 IF (master) THEN
861 WRITE (stdout,20) trim(vname(1,idmtke)), rst(ng)%Rindex
862 END IF
863 exit_flag=3
864 ioerror=status
865 RETURN
866 END IF
867
868
869
870 scale=1.0_dp
871 gtype=gfactor*w3dvar
872 status=nf_fwrite4d(ng, model, rst(ng)%ncid, idmtls, &
873 & rst(ng)%Vid(idmtls), &
874 & rst(ng)%Rindex, gtype, &
875 & lbi, ubi, lbj, ubj, 0, n(ng), 1, 2, scale, &
876# ifdef MASKING
877 & grid(ng) % rmask, &
878# endif
879 & mixing(ng) % gls, &
880 & setfillval = .false.)
881 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
882 IF (master) THEN
883 WRITE (stdout,20) trim(vname(1,idmtls)), rst(ng)%Rindex
884 END IF
885 exit_flag=3
886 ioerror=status
887 RETURN
888 END IF
889
890
891
892 scale=1.0_dp
893 gtype=gfactor*w3dvar
894 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idvmls, &
895 & rst(ng)%Vid(idvmls), &
896 & rst(ng)%Rindex, gtype, &
897 & lbi, ubi, lbj, ubj, 0, n(ng), scale, &
898# ifdef MASKING
899 & grid(ng) % rmask, &
900# endif
901 & mixing(ng) % Lscale)
902 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
903 IF (master) THEN
904 WRITE (stdout,20) trim(vname(1,idvmls)), rst(ng)%Rindex
905 END IF
906 exit_flag=3
907 ioerror=status
908 RETURN
909 END IF
910
911
912
913 scale=1.0_dp
914 gtype=gfactor*w3dvar
915 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idvmkk, &
916 & rst(ng)%Vid(idvmkk), &
917 & rst(ng)%Rindex, gtype, &
918 & lbi, ubi, lbj, ubj, 0, n(ng), scale, &
919# ifdef MASKING
920 & grid(ng) % rmask, &
921# endif
922 & mixing(ng) % Akk)
923 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
924 IF (master) THEN
925 WRITE (stdout,20) trim(vname(1,idvmkk)), rst(ng)%Rindex
926 END IF
927 exit_flag=3
928 ioerror=status
929 RETURN
930 END IF
931# ifdef GLS_MIXING
932
933
934
935 scale=1.0_dp
936 gtype=gfactor*w3dvar
937 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idvmkp, &
938 & rst(ng)%Vid(idvmkp), &
939 & rst(ng)%Rindex, gtype, &
940 & lbi, ubi, lbj, ubj, 0, n(ng), scale, &
941# ifdef MASKING
942 & grid(ng) % rmask, &
943# endif
944 & mixing(ng) % Akp)
945 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
946 IF (master) THEN
947 WRITE (stdout,20) trim(vname(1,idvmkp)), rst(ng)%Rindex
948 END IF
949 exit_flag=3
950 ioerror=status
951 RETURN
952 END IF
953# endif
954# endif
955# ifdef SEDIMENT
956# ifdef BEDLOAD
957
958
959
960 DO i=1,nst
961 scale=1.0_dp
962 gtype=gfactor*u2dvar
963 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idubld(i), &
964 & rst(ng)%Vid(idubld(i)), &
965 & rst(ng)%Rindex, gtype, &
966 & lbi, ubi, lbj, ubj, scale, &
967# ifdef MASKING
968 & grid(ng) % umask, &
969# endif
970 & sedbed(ng) % bedldu(:,:,i))
971 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
972 IF (master) THEN
973 WRITE (stdout,20) trim(vname(1,idubld(i))), rst(ng)%Rindex
974 END IF
975 exit_flag=3
976 ioerror=status
977 RETURN
978 END IF
979 END DO
980
981
982
983 DO i=1,nst
984 scale=1.0_dp
985 gtype=gfactor*v2dvar
986 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idvbld(i), &
987 & rst(ng)%Vid(idvbld(i)), &
988 & rst(ng)%Rindex, gtype, &
989 & lbi, ubi, lbj, ubj, scale, &
990# ifdef MASKING
991 & grid(ng) % vmask, &
992# endif
993 & sedbed(ng) % bedldv(:,:,i))
994 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
995 IF (master) THEN
996 WRITE (stdout,20) trim(vname(1,idvbld(i))), rst(ng)%Rindex
997 END IF
998 exit_flag=3
999 ioerror=status
1000 RETURN
1001 END IF
1002 END DO
1003# endif
1004
1005
1006
1007 DO i=1,nst
1008 scale=1.0_dp
1009 gtype=gfactor*b3dvar
1010 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idfrac(i), &
1011 & rst(ng)%Vid(idfrac(i)), &
1012 & rst(ng)%Rindex, gtype, &
1013 & lbi, ubi, lbj, ubj, 1, nbed, scale, &
1014# ifdef MASKING
1015 & grid(ng) % rmask, &
1016# endif
1017 & sedbed(ng) % bed_frac(:,:,:,i), &
1018 & setfillval = .false.)
1019 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
1020 IF (master) THEN
1021 WRITE (stdout,20) trim(vname(1,idfrac(i))), rst(ng)%Rindex
1022 END IF
1023 exit_flag=3
1024 ioerror=status
1025 RETURN
1026 END IF
1027 END DO
1028
1029
1030
1031 DO i=1,nst
1032 scale=1.0_dp
1033 gtype=gfactor*b3dvar
1034 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idbmas(i), &
1035 & rst(ng)%Vid(idbmas(i)), &
1036 & rst(ng)%Rindex, gtype, &
1037 & lbi, ubi, lbj, ubj, 1, nbed, scale, &
1038# ifdef MASKING
1039 & grid(ng) % rmask, &
1040# endif
1041 & sedbed(ng) % bed_mass(:,:,:,nout,i), &
1042 & setfillval = .false.)
1043 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
1044 IF (master) THEN
1045 WRITE (stdout,20) trim(vname(1,idbmas(i))), rst(ng)%Rindex
1046 END IF
1047 exit_flag=3
1048 ioerror=status
1049 RETURN
1050 END IF
1051 END DO
1052
1053
1054
1055 DO i=1,mbedp
1056 IF (i.eq.itauc) THEN
1057 scale=rho0
1058 ELSE
1059 scale=1.0_dp
1060 END IF
1061 gtype=gfactor*b3dvar
1062 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idsbed(i), &
1063 & rst(ng)%Vid(idsbed(i)), &
1064 & rst(ng)%Rindex, gtype, &
1065 & lbi, ubi, lbj, ubj, 1, nbed, scale, &
1066# ifdef MASKING
1067 & grid(ng) % rmask, &
1068# endif
1069 & sedbed(ng) % bed(:,:,:,i), &
1070 & setfillval = .false.)
1071 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
1072 IF (master) THEN
1073 WRITE (stdout,20) trim(vname(1,idsbed(i))), rst(ng)%Rindex
1074 END IF
1075 exit_flag=3
1076 ioerror=status
1077 RETURN
1078 END IF
1079 END DO
1080# endif
1081# if defined SEDIMENT || defined BBL_MODEL
1082
1083
1084
1085
1086
1087
1088 DO i=1,6
1089 scale=1.0_dp
1090 gtype=gfactor*r2dvar
1091 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idbott(i), &
1092 & rst(ng)%Vid(idbott(i)), &
1093 & rst(ng)%Rindex, gtype, &
1094 & lbi, ubi, lbj, ubj, scale, &
1095# ifdef MASKING
1096 & grid(ng) % rmask, &
1097# endif
1098 & sedbed(ng) % bottom(:,:,i))
1099 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
1100 IF (master) THEN
1101 WRITE (stdout,20) trim(vname(1,idbott(i))), rst(ng)%Rindex
1102 END IF
1103 exit_flag=3
1104 ioerror=status
1105 RETURN
1106 END IF
1107 END DO
1108# endif
1109#endif
1110#ifdef WEC
1111
1112
1113
1114 scale=1.0_dp
1115 gtype=gfactor*u2dvar
1116 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idu2sd, &
1117 & rst(ng)%Vid(idu2sd), &
1118 & rst(ng)%Rindex, gtype, &
1119 & lbi, ubi, lbj, ubj, scale, &
1120# ifdef MASKING
1121 & grid(ng) % umask, &
1122# endif
1123 & ocean(ng) % ubar_stokes)
1124 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
1125 IF (master) WRITE (stdout,20) trim(vname(1,idu2sd)), &
1126 & rst(ng)%Rindex
1127 exit_flag=3
1128 ioerror=status
1129 RETURN
1130 END IF
1131
1132
1133
1134 scale=1.0_dp
1135 gtype=gfactor*v2dvar
1136 status=nf_fwrite2d(ng, model, rst(ng)%ncid, idv2sd, &
1137 & rst(ng)%Vid(idv2sd), &
1138 & rst(ng)%Rindex, gtype, &
1139 & lbi, ubi, lbj, ubj, scale, &
1140# ifdef MASKING
1141 & grid(ng) % vmask, &
1142# endif
1143 & ocean(ng) % vbar_stokes)
1144 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
1145 IF (master) WRITE (stdout,20) trim(vname(1,idv2sd)), &
1146 & rst(ng)%Rindex
1147 exit_flag=3
1148 ioerror=status
1149 RETURN
1150 END IF
1151
1152# ifdef SOLVE3D
1153
1154
1155
1156 scale=1.0_dp
1157 gtype=gfactor*u3dvar
1158 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idu3sd, &
1159 & rst(ng)%Vid(idu3sd), &
1160 & rst(ng)%Rindex, gtype, &
1161 & lbi, ubi, lbj, ubj, 1, n(ng), scale, &
1162# ifdef MASKING
1163 & grid(ng) % umask, &
1164# endif
1165 & ocean(ng) % u_stokes)
1166 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
1167 IF(master) WRITE (stdout,20) trim(vname(1,idu3sd)), &
1168 & rst(ng)%Rindex
1169 exit_flag=3
1170 ioerror=status
1171 RETURN
1172 END IF
1173
1174
1175
1176 scale=1.0_dp
1177 gtype=gfactor*v3dvar
1178 status=nf_fwrite3d(ng, model, rst(ng)%ncid, idv3sd, &
1179 & rst(ng)%Vid(idv3sd), &
1180 & rst(ng)%Rindex, gtype, &
1181 & lbi, ubi, lbj, ubj, 1, n(ng), scale, &
1182# ifdef MASKING
1183 & grid(ng) % vmask, &
1184# endif
1185 & ocean(ng) % v_stokes)
1186 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
1187 IF (master) WRITE (stdout,20) trim(vname(1,idv3sd)), &
1188 & rst(ng)%Rindex
1189 exit_flag=3
1190 ioerror=status
1191 RETURN
1192 END IF
1193# endif
1194#endif
1195#ifdef ICE_MODEL
1196
1197
1198
1199
1200
1201 CALL ice_wrt_nf90 (ng, model, tile, &
1202 & lbi, ubi, lbj, ubj, &
1203 & hout, rst)
1204 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1205#endif
1206
1207
1208
1209
1210
1211 CALL netcdf_sync (ng, model, rst(ng)%name, rst(ng)%ncid)
1212 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1213
1214 10 FORMAT (2x,'WRT_RST_NF90 - writing re-start', t42, &
1215#ifdef SOLVE3D
1216# ifdef NESTING
1217 & 'fields (Index=',i1,',',i1,') in record = ',i0,t92,i2.2)
1218# else
1219 & 'fields (Index=',i1,',',i1,') in record = ',i0)
1220# endif
1221#else
1222# ifdef NESTING
1223 & 'fields (Index=',i1,') in record = ',i0,t92,i2.2)
1224# else
1225 & 'fields (Index=',i1,') in record = ',i0)
1226# endif
1227#endif
1228 20 FORMAT (/,' WRT_RST_NF90 - error while writing variable: ',a, &
1229 & /,16x,'into restart NetCDF file for time record: ',i0)
1230
1231 RETURN
subroutine, public netcdf_sync(ng, model, ncname, ncid)