43# if defined PIO_LIB && defined DISTRIBUTE
55 integer,
intent(in) :: ng, tile
59 integer :: lbi, ubi, lbj, ubj
61 character (len=*),
parameter :: myfile = &
73 SELECT CASE (
dia(ng)%IOtype)
78# if defined PIO_LIB && defined DISTRIBUTE
89 10
FORMAT (
' WRT_DIAGS - Illegal output file type, io_type = ',i0, &
90 & /,13x,
'Check KeyWord ''OUT_LIB'' in ''roms.in''.')
104 integer,
intent(in) :: ng, tile
105 integer,
intent(in) :: lbi, ubi, lbj, ubj
109 integer :: fcount, gfactor, gtype, ifield, itrc, ivar, status
116 character (len=*),
parameter :: myfile = &
117 & __FILE__//
", wrt_diags_nf90"
130# if defined WRITE_WATER && defined MASKING
138 dia(ng)%Rindex=
dia(ng)%Rindex+1
140 dia(ng)%Nrec(fcount)=
dia(ng)%Nrec(fcount)+1
154 & (/
dia(ng)%Rindex/), (/1/), &
155 & ncid =
dia(ng)%ncid, &
165 &
dia(ng)%Rindex, gtype, &
166 & lbi, ubi, lbj, ubj, scale, &
168 &
grid(ng) % rmask, &
170 &
diags(ng) % avgzeta)
171 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
180# ifdef DIAGNOSTICS_UV
186 IF (
dout(ifield,ng))
THEN
190 &
dia(ng)%Vid(ifield), &
191 &
dia(ng)%Rindex, gtype, &
192 & lbi, ubi, lbj, ubj, scale, &
194 &
grid(ng) % umask, &
196 &
diags(ng) % DiaU2d(:,:,ivar), &
197 & setfillval = .false.)
198 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
209 IF (
dout(ifield,ng))
THEN
213 &
dia(ng)%Vid(ifield), &
214 &
dia(ng)%Rindex, gtype, &
215 & lbi, ubi, lbj, ubj, scale, &
217 &
grid(ng) % vmask, &
219 &
diags(ng) % DiaV2d(:,:,ivar), &
220 & setfillval = .false.)
221 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
238 IF (
dout(ifield,ng))
THEN
242 &
dia(ng)%Vid(ifield), &
243 &
dia(ng)%Rindex, gtype, &
244 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
246 &
grid(ng) % umask_dia, &
248 &
diags(ng) % DiaU3d(:,:,:,ivar), &
249 & setfillval = .false.)
250 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
261 IF (
dout(ifield,ng))
THEN
265 &
dia(ng)%Vid(ifield), &
266 &
dia(ng)%Rindex, gtype, &
267 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
269 &
grid(ng) % vmask_dia, &
271 &
diags(ng) % DiaV3d(:,:,:,ivar), &
272 & setfillval = .false.)
273 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
285# ifdef DIAGNOSTICS_TS
292 IF (
dout(ifield,ng))
THEN
296 &
dia(ng)%Vid(ifield), &
297 &
dia(ng)%Rindex, gtype, &
298 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
300 &
grid(ng) % rmask, &
302 &
diags(ng) % DiaTrc(:,:,:,itrc,ivar), &
303 & setfillval = .false.)
304 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
316# ifdef DIAGNOSTICS_BIO
317# if defined BIO_FENNEL || defined HYPOXIA_SRM
325 IF (
dout(ifield,ng))
THEN
326 IF (ivar.eq.
ipco2)
THEN
333 &
dia(ng)%Vid(ifield), &
334 &
dia(ng)%Rindex, gtype, &
335 & lbi, ubi, lbj, ubj, scale, &
337 &
grid(ng) % rmask, &
339 &
diags(ng) % DiaBio2d(:,:,ivar), &
340 & setfillval = .false.)
341 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
352# if defined BIO_FENNEL
358 IF (
dout(ifield,ng))
THEN
362 &
dia(ng)%Vid(ifield), &
363 &
dia(ng)%Rindex, gtype, &
364 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
366 &
grid(ng) % rmask, &
368 &
diags(ng) % DiaBio3d(:,:,:,ivar), &
369 & setfillval = .false.)
370 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
388 IF (
dout(ifield,ng))
THEN
392 &
dia(ng)%Vid(ifield), &
393 &
dia(ng)%Rindex, gtype, &
394 & lbi, ubi, lbj, ubj, 1,
ndbands, scale, &
396 &
grid(ng) % rmask, &
398 &
diags(ng) % DiaBio3d(:,:,:,ivar), &
399 & setfillval = .false.)
400 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
416 IF (
dout(ifield,ng))
THEN
420 &
dia(ng)%Vid(ifield), &
421 &
dia(ng)%Rindex, gtype, &
422 & lbi, ubi, lbj, ubj, 1,
n(ng), 1,
ndbands, &
425 &
grid(ng) % rmask, &
427 &
diags(ng) % DiaBio4d(:,:,:,:,ivar), &
428 & setfillval = .false.)
429 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
448 10
FORMAT (2x,
'WRT_DIAGS_NF90 - writing diagnostics fields',t61, &
450 &
'in record = ',i0,t92,i2.2)
454 20
FORMAT (/,
' WRT_DIAGS_NF90 - error while writing variable: ',a, &
455 & /,18x,
'into diagnostics NetCDF file for time record: ',i0)
460# if defined PIO_LIB && defined DISTRIBUTE
464 & LBi, UBi, LBj, UBj)
471 integer,
intent(in) :: ng, tile
472 integer,
intent(in) :: lbi, ubi, lbj, ubj
476 integer :: fcount, ifield, itrc, ivar, status
483 character (len=*),
parameter :: myfile = &
484 & __FILE__//
", wrt_diags_pio"
486 TYPE (io_desc_t),
pointer :: iodesc
498 dia(ng)%Rindex=
dia(ng)%Rindex+1
500 dia(ng)%Nrec(fcount)=
dia(ng)%Nrec(fcount)+1
514 & (/
dia(ng)%Rindex/), (/1/), &
515 & piofile =
dia(ng)%pioFile, &
522 IF (
dia(ng)%pioVar(
idfsur)%dkind.eq.pio_double)
THEN
531 & lbi, ubi, lbj, ubj, scale, &
533 &
grid(ng) % rmask, &
535 &
diags(ng) % avgzeta)
536 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
545# ifdef DIAGNOSTICS_UV
551 IF (
dout(ifield,ng))
THEN
553 IF (
dia(ng)%pioVar(ifield)%dkind.eq.pio_double)
THEN
559 &
dia(ng)%pioVar(ifield), &
562 & lbi, ubi, lbj, ubj, scale, &
564 &
grid(ng) % umask, &
566 &
diags(ng) % DiaU2d(:,:,ivar), &
567 & setfillval = .false.)
568 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
579 IF (
dout(ifield,ng))
THEN
581 IF (
dia(ng)%pioVar(ifield)%dkind.eq.pio_double)
THEN
587 &
dia(ng)%pioVar(ifield), &
590 & lbi, ubi, lbj, ubj, scale, &
592 &
grid(ng) % vmask, &
594 &
diags(ng) % DiaV2d(:,:,ivar), &
595 & setfillval = .false.)
596 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
613 IF (
dout(ifield,ng))
THEN
615 IF (
dia(ng)%pioVar(ifield)%dkind.eq.pio_double)
THEN
621 &
dia(ng)%pioVar(ifield), &
624 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
626 &
grid(ng) % umask_dia, &
628 &
diags(ng) % DiaU3d(:,:,:,ivar), &
629 & setfillval = .false.)
630 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
641 IF (
dout(ifield,ng))
THEN
643 IF (
dia(ng)%pioVar(ifield)%dkind.eq.pio_double)
THEN
649 &
dia(ng)%pioVar(ifield), &
652 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
654 &
grid(ng) % vmask_dia, &
656 &
diags(ng) % DiaV3d(:,:,:,ivar), &
657 & setfillval = .false.)
658 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
670# ifdef DIAGNOSTICS_TS
677 IF (
dout(ifield,ng))
THEN
679 IF (
dia(ng)%pioVar(ifield)%dkind.eq.pio_double)
THEN
685 &
dia(ng)%pioVar(ifield), &
688 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
690 &
grid(ng) % rmask, &
692 &
diags(ng) % DiaTrc(:,:,:,itrc,ivar), &
693 & setfillval = .false.)
694 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
706# ifdef DIAGNOSTICS_BIO
707# if defined BIO_FENNEL || defined HYPOXIA_SRM
715 IF (
dout(ifield,ng))
THEN
716 IF (ivar.eq.
ipco2)
THEN
721 IF (
dia(ng)%pioVar(ifield)%dkind.eq.pio_double)
THEN
727 &
dia(ng)%pioVar(ifield), &
730 & lbi, ubi, lbj, ubj, scale, &
732 &
grid(ng) % rmask, &
734 &
diags(ng) % DiaBio2d(:,:,ivar), &
735 & setfillval = .false.)
736 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
747# if defined BIO_FENNEL
753 IF (
dout(ifield,ng))
THEN
755 IF (
dia(ng)%pioVar(ifield)%dkind.eq.pio_double)
THEN
761 &
dia(ng)%pioVar(ifield), &
764 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
766 &
grid(ng) % rmask, &
768 &
diags(ng) % DiaBio3d(:,:,:,ivar), &
769 & setfillval = .false.)
770 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
788 IF (
dout(ifield,ng))
THEN
790 IF (
dia(ng)%pioVar(ifield)%dkind.eq.pio_double)
THEN
796 &
dia(ng)%pioVar(ifield), &
799 & lbi, ubi, lbj, ubj, 1,
ndbands, scale, &
801 &
grid(ng) % rmask, &
803 &
diags(ng) % DiaBio3d(:,:,:,ivar), &
804 & setfillval = .false.)
805 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
821 IF (
dout(ifield,ng))
THEN
823 IF (
dia(ng)%pioVar(ifield)%dkind.eq.pio_double)
THEN
829 &
dia(ng)%pioVar(ifield), &
830 &
dia(ng)%Rindex, gtype, &
832 & lbi, ubi, lbj, ubj, 1,
n(ng), 1,
ndbands, &
835 &
grid(ng) % rmask, &
837 &
diags(ng) % DiaBio4d(:,:,:,:,ivar), &
838 & setfillval = .false.)
839 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
858 10
FORMAT (2x,
'WRT_DIAGS_PIO - writing diagnostics fields',t61, &
860 &
'in record = ',i0,t92,i2.2)
864 20
FORMAT (/,
' WRT_DIAGS_PIO - error while writing variable: ',a, &
865 & /,18x,
'into diagnostics NetCDF file for time record: ',i0)
integer, dimension(:), allocatable idbio4
integer, dimension(:), allocatable bioiter
integer, dimension(:), allocatable idbio3
integer, dimension(:), allocatable idbio2
type(t_diags), dimension(:), allocatable diags
type(t_grid), dimension(:), allocatable grid
character(len=256) sourcefile
type(t_io), dimension(:), allocatable dia
integer, dimension(:), allocatable iddu2d
integer, parameter io_nf90
integer, dimension(:), allocatable iddv2d
integer, parameter io_pio
integer, dimension(:), allocatable iddu3d
integer, dimension(:), allocatable iddv3d
character(len=maxlen), dimension(6, 0:nv) vname
logical, dimension(:,:), allocatable dout
integer, dimension(:,:), allocatable iddtrc
subroutine, public netcdf_sync(ng, model, ncname, ncid)
integer, dimension(:), allocatable n
type(t_bounds), dimension(:), allocatable bounds
integer, parameter r3dvar
integer, parameter l4dvar
integer, parameter u3dvar
integer, parameter u2dvar
integer, dimension(:), allocatable nt
integer, parameter r2dvar
integer, parameter l3dvar
integer, parameter v2dvar
integer, parameter v3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_r3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_u3dvar
subroutine, public pio_netcdf_sync(ng, model, ncname, piofile)
type(io_desc_t), dimension(:), pointer iodesc_sp_u2dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_u3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_l3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_l3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_l4dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_l4dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_v3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_v2dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_v3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_r3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_r2dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dvar
real(dp), dimension(:), allocatable dt
real(dp), parameter sec2day
real(dp), dimension(:), allocatable diatime
logical function, public founderror(flag, noerr, line, routine)
subroutine, private wrt_diags_pio(ng, tile, lbi, ubi, lbj, ubj)
subroutine, private wrt_diags_nf90(ng, tile, lbi, ubi, lbj, ubj)
subroutine, public wrt_diags(ng, tile)