4 (defined weak_constraint && \
5 (defined posterior_eofs || defined posterior_error_i ||\
6 defined posterior_error_f)) || defined lcz_final
26# ifdef ADJUST_BOUNDARY
39# ifdef ADJUST_BOUNDARY
44# ifdef ADJUST_BOUNDARY
54# if defined PIO_LIB && defined DISTRIBUTE
66 integer,
intent(in) :: ng, tile, kout, nout
70# ifdef ADJUST_BOUNDARY
73 integer :: lbi, ubi, lbj, ubj
75 character (len=*),
parameter :: myfile = &
82# ifdef ADJUST_BOUNDARY
91 SELECT CASE (
hss(ng)%IOtype)
94# ifdef ADJUST_BOUNDARY
99# if defined PIO_LIB && defined DISTRIBUTE
102# ifdef ADJUST_BOUNDARY
105 & lbi, ubi, lbj, ubj)
113 10
FORMAT (
' WRT_HESSIAN - Illegal output file type, io_type = ',i0, &
114 & /,15x,
'Check KeyWord ''OUT_LIB'' in ''roms.in''.')
121# ifdef ADJUST_BOUNDARY
124 & LBi, UBi, LBj, UBj)
131 integer,
intent(in) :: ng, tile, kout, nout
132# ifdef ADJUST_BOUNDARY
133 integer,
intent(in) :: lbij, ubij
135 integer,
intent(in) :: lbi, ubi, lbj, ubj
139 integer :: fcount, i, j, gfactor, gtype, status
146 character (len=*),
parameter :: myfile = &
147 & __FILE__//
", wrt_hessian_nf90"
160# if defined WRITE_WATER && defined MASKING
168 hss(ng)%Rindex=
hss(ng)%Rindex+1
169 fcount=
hss(ng)%Fcount
170 hss(ng)%Nrec(fcount)=
hss(ng)%Nrec(fcount)+1
192 & (/
hss(ng)%Rindex/), (/1/), &
193 & ncid =
hss(ng)%ncid, &
203 &
hss(ng)%Rindex, gtype, &
204 & lbi, ubi, lbj, ubj, scale, &
206 &
grid(ng) % rmask, &
208 &
ocean(ng)% ad_zeta(:,:,kout))
209 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
218# ifdef ADJUST_BOUNDARY
228 & lbij, ubij,
nbrec(ng), scale, &
229 &
boundary(ng) % ad_zeta_obc(lbij:,:,:, &
231 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
249 &
hss(ng)%Rindex, gtype, &
250 & lbi, ubi, lbj, ubj, scale, &
252 &
grid(ng) % umask_full, &
254 &
ocean(ng) % ad_ubar(:,:,kout))
255 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
264# ifdef ADJUST_BOUNDARY
274 & lbij, ubij,
nbrec(ng), scale, &
275 &
boundary(ng) % ad_ubar_obc(lbij:,:,:, &
277 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
295 &
hss(ng)%Rindex, gtype, &
296 & lbi, ubi, lbj, ubj, scale, &
298 &
grid(ng) % vmask_full, &
300 &
ocean(ng) % ad_vbar(:,:,kout))
301 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
310# ifdef ADJUST_BOUNDARY
320 & lbij, ubij,
nbrec(ng), scale, &
321 &
boundary(ng) % ad_vbar_obc(lbij:,:,:, &
323 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
343 &
hss(ng)%Rindex, gtype, &
344 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
346 &
grid(ng) % umask_full, &
348 &
ocean(ng) % ad_u(:,:,:,nout))
349 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
358# ifdef ADJUST_BOUNDARY
368 & lbij, ubij, 1,
n(ng),
nbrec(ng), scale, &
369 &
boundary(ng) % ad_u_obc(lbij:,:,:,:, &
371 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
389 &
hss(ng)%Rindex, gtype, &
390 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
392 &
grid(ng) % vmask_full, &
394 &
ocean(ng) % ad_v(:,:,:,nout))
395 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
404# ifdef ADJUST_BOUNDARY
414 & lbij, ubij, 1,
n(ng),
nbrec(ng), scale, &
415 &
boundary(ng) % ad_v_obc(lbij:,:,:,:, &
417 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
435 &
hss(ng)%Tid(itrc), &
436 &
hss(ng)%Rindex, gtype, &
437 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
439 &
grid(ng) % rmask, &
441 &
ocean(ng) % ad_t(:,:,:,nout,itrc))
442 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
453# ifdef ADJUST_BOUNDARY
464 & lbij, ubij, 1,
n(ng),
nbrec(ng), &
466 &
boundary(ng) % ad_t_obc(lbij:,:,:,:, &
468 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
493 &
hss(ng)%Rindex, gtype, &
494 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
496 &
grid(ng) % rmask, &
498 &
forces(ng) % ad_tflux(:,:,:,kout,itrc))
499 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
512# ifdef ADJUST_WSTRESS
522 &
hss(ng)%Rindex, gtype, &
523 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
525 &
grid(ng) % umask, &
527 &
forces(ng) % ad_ustr(:,:,:,kout))
528 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
543 &
hss(ng)%Rindex, gtype, &
544 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
546 &
grid(ng) % vmask, &
548 &
forces(ng) % ad_vstr(:,:,:,kout))
549 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
567 10
FORMAT (2x,
'WRT_HESSIAN_NF90 - writing Hessian', t42, &
570 &
'fields (Index=',i1,
',',i1,
') in record = ',i0,t92,i2.2)
572 &
'fields (Index=',i1,
',',i1,
') in record = ',i0)
576 &
'fields (Index=',i1,
') in record = ',i0,t92,i2.2)
578 &
'fields (Index=',i1,
') in record = ',i0)
581 20
FORMAT (/,
' WRT_HESSIAN_NF90 - error while writing variable: ',a, &
582 & /,20x,
'into Hessian NetCDF file for time record: ',i0)
587# if defined PIO_LIB && defined DISTRIBUTE
591# ifdef ADJUST_BOUNDARY
594 & LBi, UBi, LBj, UBj)
601 integer,
intent(in) :: ng, tile, kout, nout
602# ifdef ADJUST_BOUNDARY
603 integer,
intent(in) :: lbij, ubij
605 integer,
intent(in) :: lbi, ubi, lbj, ubj
609 integer :: fcount, i, ifield, j, status
616 character (len=*),
parameter :: myfile = &
617 & __FILE__//
", wrt_hessian_pio"
619 TYPE (io_desc_t),
pointer :: iodesc
631 hss(ng)%Rindex=
hss(ng)%Rindex+1
632 fcount=
hss(ng)%Fcount
633 hss(ng)%Nrec(fcount)=
hss(ng)%Nrec(fcount)+1
655 & (/
hss(ng)%Rindex/), (/1/), &
656 & piofile =
hss(ng)%pioFile, &
663 IF (
hss(ng)%pioVar(
idfsur)%dkind.eq.pio_double)
THEN
673 & lbi, ubi, lbj, ubj, scale, &
675 &
grid(ng) % rmask, &
677 &
ocean(ng)% ad_zeta(:,:,kout))
678 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
687# ifdef ADJUST_BOUNDARY
705 & lbij, ubij,
nbrec(ng), scale, &
706 &
boundary(ng) % ad_zeta_obc(lbij:,:,:, &
708 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
723 IF (
hss(ng)%pioVar(
idubar)%dkind.eq.pio_double)
THEN
733 & lbi, ubi, lbj, ubj, scale, &
735 &
grid(ng) % umask_full, &
737 &
ocean(ng) % ad_ubar(:,:,kout))
738 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
747# ifdef ADJUST_BOUNDARY
765 & lbij, ubij,
nbrec(ng), scale, &
766 &
boundary(ng) % ad_ubar_obc(lbij:,:,:, &
768 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
783 IF (
hss(ng)%pioVar(
idvbar)%dkind.eq.pio_double)
THEN
793 & lbi, ubi, lbj, ubj, scale, &
795 &
grid(ng) % vmask_full, &
797 &
ocean(ng) % ad_vbar(:,:,kout))
798 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
807# ifdef ADJUST_BOUNDARY
825 & lbij, ubij,
nbrec(ng), scale, &
826 &
boundary(ng) % ad_vbar_obc(lbij:,:,:, &
828 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
845 IF (
hss(ng)%pioVar(
iduvel)%dkind.eq.pio_double)
THEN
855 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
857 &
grid(ng) % umask_full, &
859 &
ocean(ng) % ad_u(:,:,:,nout))
860 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
869# ifdef ADJUST_BOUNDARY
887 & lbij, ubij, 1,
n(ng),
nbrec(ng), scale, &
888 &
boundary(ng) % ad_u_obc(lbij:,:,:,:, &
890 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
905 IF (
hss(ng)%pioVar(
idvvel)%dkind.eq.pio_double)
THEN
915 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
917 &
grid(ng) % vmask_full, &
919 &
ocean(ng) % ad_v(:,:,:,nout))
920 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
929# ifdef ADJUST_BOUNDARY
947 & lbij, ubij, 1,
n(ng),
nbrec(ng), scale, &
948 &
boundary(ng) % ad_v_obc(lbij:,:,:,:, &
950 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
966 IF (
hss(ng)%pioTrc(itrc)%dkind.eq.pio_double)
THEN
973 &
hss(ng)%pioTrc(itrc), &
976 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
978 &
grid(ng) % rmask, &
980 &
ocean(ng) % ad_t(:,:,:,nout,itrc))
981 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
992# ifdef ADJUST_BOUNDARY
1000 IF (
hss(ng)%pioVar(ifield)%dkind.eq.pio_double)
THEN
1007 &
hss(ng)%pioFile, &
1008 &
vname(1,ifield), &
1009 &
hss(ng)%pioVar(ifield), &
1012 & lbij, ubij, 1,
n(ng),
nbrec(ng), &
1014 &
boundary(ng) % ad_t_obc(lbij:,:,:,:, &
1016 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1028# ifdef ADJUST_STFLUX
1037 IF (
hss(ng)%pioVar(
idtsur(itrc))%dkind.eq.pio_double)
THEN
1047 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
1049 &
grid(ng) % rmask, &
1051 &
forces(ng) % ad_tflux(:,:,:,kout,itrc))
1052 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1065# ifdef ADJUST_WSTRESS
1072 IF (
hss(ng)%pioVar(
idusms)%dkind.eq.pio_double)
THEN
1082 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
1084 &
grid(ng) % umask, &
1086 &
forces(ng) % ad_ustr(:,:,:,kout))
1087 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1099 IF (
hss(ng)%pioVar(
idvsms)%dkind.eq.pio_double)
THEN
1109 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
1111 &
grid(ng) % vmask, &
1113 &
forces(ng) % ad_vstr(:,:,:,kout))
1114 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1132 10
FORMAT (2x,
'WRT_HESSIAN_PIO - writing Hessian', t42, &
1135 &
'fields (Index=',i1,
',',i1,
') in record = ',i0,t92,i2.2)
1137 &
'fields (Index=',i1,
',',i1,
') in record = ',i0)
1141 &
'fields (Index=',i1,
') in record = ',i0,t92,i2.2)
1143 &
'fields (Index=',i1,
') in record = ',i0)
1146 20
FORMAT (/,
' WRT_HESSIAN_PIO - error while writing variable: ',a, &
1147 & /,19x,
'into Hessian 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 hss
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, public wrt_hessian(ng, tile, kout, nout)
subroutine, private wrt_hessian_nf90(ng, tile, kout, nout, lbij, ubij, lbi, ubi, lbj, ubj)
subroutine, private wrt_hessian_pio(ng, tile, kout, nout, lbij, ubij, lbi, ubi, lbj, ubj)