3#if (defined I4DVAR && defined EVOLVED_LCZ) || defined LCZ_FINAL
19# ifdef ADJUST_BOUNDARY
32# ifdef ADJUST_BOUNDARY
37# ifdef ADJUST_BOUNDARY
47# if defined PIO_LIB && defined DISTRIBUTE
59 integer,
intent(in) :: ng, tile, kout, nout
63# ifdef ADJUST_BOUNDARY
66 integer :: lbi, ubi, lbj, ubj
68 character (len=*),
parameter :: myfile = &
75# ifdef ADJUST_BOUNDARY
84 SELECT CASE (
lze(ng)%IOtype)
87# ifdef ADJUST_BOUNDARY
92# if defined PIO_LIB && defined DISTRIBUTE
95# ifdef ADJUST_BOUNDARY
106 10
FORMAT (
' WRT_EVOLVED - Illegal output file type, io_type = ',i0, &
107 & /,15x,
'Check KeyWord ''OUT_LIB'' in ''roms.in''.')
114# ifdef ADJUST_BOUNDARY
117 & LBi, UBi, LBj, UBj)
124 integer,
intent(in) :: ng, tile, kout, nout
125# ifdef ADJUST_BOUNDARY
126 integer,
intent(in) :: lbij, ubij
128 integer,
intent(in) :: lbi, ubi, lbj, ubj
132 integer :: fcount, i, j, gfactor, gtype, status
139 character (len=*),
parameter :: myfile = &
140 & __FILE__//
", wrt_evolved_nf90"
153# if defined WRITE_WATER && defined MASKING
161 lze(ng)%Rindex=
lze(ng)%Rindex+1
162 fcount=
lze(ng)%Fcount
163 lze(ng)%Nrec(fcount)=
lze(ng)%Nrec(fcount)+1
185 & (/
lze(ng)%Rindex/), (/1/), &
186 & ncid =
lze(ng)%ncid, &
196 &
lze(ng)%Rindex, gtype, &
197 & lbi, ubi, lbj, ubj, scale, &
199 &
grid(ng) % rmask, &
201 &
ocean(ng)% tl_zeta(:,:,kout))
202 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
211# ifdef ADJUST_BOUNDARY
221 & lbij, ubij,
nbrec(ng), scale, &
222 &
boundary(ng) % tl_zeta_obc(lbij:,:,:, &
224 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
242 &
lze(ng)%Rindex, gtype, &
243 & lbi, ubi, lbj, ubj, scale, &
245 &
grid(ng) % umask_full, &
247 &
ocean(ng) % tl_ubar(:,:,kout))
248 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
257# ifdef ADJUST_BOUNDARY
267 & lbij, ubij,
nbrec(ng), scale, &
268 &
boundary(ng) % tl_ubar_obc(lbij:,:,:, &
270 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
288 &
lze(ng)%Rindex, gtype, &
289 & lbi, ubi, lbj, ubj, scale, &
291 &
grid(ng) % vmask_full, &
293 &
ocean(ng) % tl_vbar(:,:,kout))
294 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
303# ifdef ADJUST_BOUNDARY
313 & lbij, ubij,
nbrec(ng), scale, &
314 &
boundary(ng) % tl_vbar_obc(lbij:,:,:, &
316 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
336 &
lze(ng)%Rindex, gtype, &
337 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
339 &
grid(ng) % umask_full, &
341 &
ocean(ng) % tl_u(:,:,:,nout))
342 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
351# ifdef ADJUST_BOUNDARY
361 & lbij, ubij, 1,
n(ng),
nbrec(ng), scale, &
362 &
boundary(ng) % tl_u_obc(lbij:,:,:,:, &
364 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
382 &
lze(ng)%Rindex, gtype, &
383 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
385 &
grid(ng) % vmask_full, &
387 &
ocean(ng) % tl_v(:,:,:,nout))
388 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
397# ifdef ADJUST_BOUNDARY
407 & lbij, ubij, 1,
n(ng),
nbrec(ng), scale, &
408 &
boundary(ng) % tl_v_obc(lbij:,:,:,:, &
410 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
428 &
lze(ng)%Tid(itrc), &
429 &
lze(ng)%Rindex, gtype, &
430 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
432 &
grid(ng) % rmask, &
434 &
ocean(ng) % tl_t(:,:,:,nout,itrc))
435 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
446# ifdef ADJUST_BOUNDARY
457 & lbij, ubij, 1,
n(ng),
nbrec(ng), &
459 &
boundary(ng) % tl_t_obc(lbij:,:,:,:, &
461 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
486 &
lze(ng)%Rindex, gtype, &
487 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
489 &
grid(ng) % rmask, &
491 &
forces(ng) % tl_tflux(:,:,:,kout,itrc))
492 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
505# ifdef ADJUST_WSTRESS
515 &
lze(ng)%Rindex, gtype, &
516 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
518 &
grid(ng) % umask_full, &
520 &
forces(ng) % tl_ustr(:,:,:,kout))
521 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
536 &
lze(ng)%Rindex, gtype, &
537 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
539 &
grid(ng) % vmask_full, &
541 &
forces(ng) % tl_vstr(:,:,:,kout))
542 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
560 10
FORMAT (2x,
'WRT_EVOLVED_NF90 - writing evolved LCZ',t42, &
563 &
'fields (Index=',i1,
',',i1,
') in record = ',i0,t92,i2.2)
565 &
'fields (Index=',i1,
',',i1,
') in record = ',i0)
569 &
'fields (Index=',i1,
') in record = ',i0,t92,i2.2)
571 &
'fields (Index=',i1,
') in record = ',i0)
574 20
FORMAT (/,
' WRT_EVOLVED_NF90 - error while writing variable: ',a, &
575 & /,20x,
'into evolved LCZ NetCDF file for time record: ',i0)
580# if defined PIO_LIB && defined DISTRIBUTE
584# ifdef ADJUST_BOUNDARY
587 & LBi, UBi, LBj, UBj)
594 integer,
intent(in) :: ng, tile, kout, nout
595# ifdef ADJUST_BOUNDARY
596 integer,
intent(in) :: lbij, ubij
598 integer,
intent(in) :: lbi, ubi, lbj, ubj
602 integer :: fcount, i, ifield, j, status
609 character (len=*),
parameter :: myfile = &
610 & __FILE__//
", wrt_evolved_pio"
612 TYPE (io_desc_t),
pointer :: iodesc
624 lze(ng)%Rindex=
lze(ng)%Rindex+1
625 fcount=
lze(ng)%Fcount
626 lze(ng)%Nrec(fcount)=
lze(ng)%Nrec(fcount)+1
648 & (/
lze(ng)%Rindex/), (/1/), &
649 & piofile =
lze(ng)%pioFile, &
656 IF (
lze(ng)%pioVar(
idfsur)%dkind.eq.pio_double)
THEN
666 & lbi, ubi, lbj, ubj, scale, &
668 &
grid(ng) % rmask, &
670 &
ocean(ng)% tl_zeta(:,:,kout))
671 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
680# ifdef ADJUST_BOUNDARY
698 & lbij, ubij,
nbrec(ng), scale, &
699 &
boundary(ng) % tl_zeta_obc(lbij:,:,:, &
701 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
716 IF (
lze(ng)%pioVar(
idubar)%dkind.eq.pio_double)
THEN
726 & lbi, ubi, lbj, ubj, scale, &
728 &
grid(ng) % umask_full, &
730 &
ocean(ng) % tl_ubar(:,:,kout))
731 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
740# ifdef ADJUST_BOUNDARY
758 & lbij, ubij,
nbrec(ng), scale, &
759 &
boundary(ng) % tl_ubar_obc(lbij:,:,:, &
761 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
776 IF (
lze(ng)%pioVar(
idvbar)%dkind.eq.pio_double)
THEN
786 & lbi, ubi, lbj, ubj, scale, &
788 &
grid(ng) % vmask_full, &
790 &
ocean(ng) % tl_vbar(:,:,kout))
791 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
800# ifdef ADJUST_BOUNDARY
818 & lbij, ubij,
nbrec(ng), scale, &
819 &
boundary(ng) % tl_vbar_obc(lbij:,:,:, &
821 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
838 IF (
lze(ng)%pioVar(
iduvel)%dkind.eq.pio_double)
THEN
848 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
850 &
grid(ng) % umask_full, &
852 &
ocean(ng) % tl_u(:,:,:,nout))
853 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
862# ifdef ADJUST_BOUNDARY
880 & lbij, ubij, 1,
n(ng),
nbrec(ng), scale, &
881 &
boundary(ng) % tl_u_obc(lbij:,:,:,:, &
883 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
898 IF (
lze(ng)%pioVar(
idvvel)%dkind.eq.pio_double)
THEN
908 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
910 &
grid(ng) % vmask_full, &
912 &
ocean(ng) % tl_v(:,:,:,nout))
913 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
922# ifdef ADJUST_BOUNDARY
940 & lbij, ubij, 1,
n(ng),
nbrec(ng), scale, &
941 &
boundary(ng) % tl_v_obc(lbij:,:,:,:, &
943 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
959 IF (
lze(ng)%pioTrc(itrc)%dkind.eq.pio_double)
THEN
966 &
lze(ng)%pioTrc(itrc), &
969 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
971 &
grid(ng) % rmask, &
973 &
ocean(ng) % tl_t(:,:,:,nout,itrc))
974 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
985# ifdef ADJUST_BOUNDARY
993 IF (
lze(ng)%pioVar(ifield)%dkind.eq.pio_double)
THEN
1000 &
lze(ng)%pioFile, &
1001 &
vname(1,ifield), &
1002 &
lze(ng)%pioVar(ifield), &
1005 & lbij, ubij, 1,
n(ng),
nbrec(ng), &
1007 &
boundary(ng) % tl_t_obc(lbij:,:,:,:, &
1009 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1021# ifdef ADJUST_STFLUX
1030 IF (
lze(ng)%pioVar(
idtsur(itrc))%dkind.eq.pio_double)
THEN
1040 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
1042 &
grid(ng) % rmask, &
1044 &
forces(ng) % tl_tflux(:,:,:,kout,itrc))
1045 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1058# ifdef ADJUST_WSTRESS
1065 IF (
lze(ng)%pioVar(
idusms)%dkind.eq.pio_double)
THEN
1075 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
1077 &
grid(ng) % umask_full, &
1079 &
forces(ng) % tl_ustr(:,:,:,kout))
1080 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1092 IF (
lze(ng)%pioVar(
idvsms)%dkind.eq.pio_double)
THEN
1102 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
1104 &
grid(ng) % vmask_full, &
1106 &
forces(ng) % tl_vstr(:,:,:,kout))
1107 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1125 10
FORMAT (2x,
'WRT_EVOLVED_PIO - writing evolved LCZ',t42, &
1128 &
'fields (Index=',i1,
',',i1,
') in record = ',i0,t92,i2.2)
1130 &
'fields (Index=',i1,
',',i1,
') in record = ',i0)
1134 &
'fields (Index=',i1,
') in record = ',i0,t92,i2.2)
1136 &
'fields (Index=',i1,
') in record = ',i0)
1139 20
FORMAT (/,
' WRT_EVOLVED_PIO - error while writing variable: ',a, &
1140 & /,20x,
'into evolved LCZ NetCDF file for time record: ',i0)
type(t_boundary), dimension(:), allocatable boundary
type(t_forces), dimension(:), allocatable forces
type(t_grid), dimension(:), allocatable grid
type(t_io), dimension(:), allocatable lze
character(len=256) sourcefile
integer, parameter io_nf90
integer, dimension(:), allocatable idsbry
integer, parameter io_pio
integer, dimension(:), allocatable idtsur
integer, dimension(:), allocatable idtvar
integer, dimension(:), allocatable istvar
character(len=maxlen), dimension(6, 0:nv) vname
subroutine, public netcdf_sync(ng, model, ncname, ncid)
type(t_ocean), dimension(:), allocatable ocean
integer, dimension(:), allocatable n
type(t_bounds), dimension(:), allocatable bounds
integer, parameter r3dvar
integer, parameter u3dvar
integer, parameter u2dvar
integer, dimension(:), allocatable nt
integer, parameter r2dvar
integer, parameter v2dvar
integer, parameter v3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dobc
type(io_desc_t), dimension(:), pointer iodesc_dp_r3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_u3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_v2dobc
type(io_desc_t), dimension(:), pointer iodesc_sp_u2dfrc
type(io_desc_t), dimension(:), pointer iodesc_dp_v3dobc
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_u3dobc
type(io_desc_t), dimension(:), pointer iodesc_sp_r3dobc
type(io_desc_t), dimension(:), pointer iodesc_dp_u3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dobc
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dobc
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_u3dobc
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dfrc
type(io_desc_t), dimension(:), pointer iodesc_dp_r2dobc
type(io_desc_t), dimension(:), pointer iodesc_sp_u2dobc
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_v2dfrc
type(io_desc_t), dimension(:), pointer iodesc_dp_v3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dfrc
type(io_desc_t), dimension(:), pointer iodesc_dp_r2dfrc
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_dp_r3dobc
type(io_desc_t), dimension(:), pointer iodesc_sp_v3dobc
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dfrc
logical, dimension(:,:,:), allocatable lobc
logical, dimension(:,:), allocatable lstflux
integer, dimension(:), allocatable nfrec
real(dp), dimension(:), allocatable time
integer, dimension(:), allocatable nbrec
logical function, public founderror(flag, noerr, line, routine)
subroutine, private wrt_evolved_nf90(ng, tile, kout, nout, lbij, ubij, lbi, ubi, lbj, ubj)
subroutine, private wrt_evolved_pio(ng, tile, kout, nout, lbij, ubij, lbi, ubi, lbj, ubj)
subroutine, public wrt_evolved(ng, tile, kout, nout)