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)