125# ifdef ADJUST_BOUNDARY
128 & LBi, UBi, LBj, UBj)
135 integer,
intent(in) :: ng, model, tile
136# ifdef ADJUST_BOUNDARY
137 integer,
intent(in) :: lbij, ubij
139 integer,
intent(in) :: lbi, ubi, lbj, ubj
143 integer :: fcount, i, j, gfactor, gtype, status
145# ifdef WEAK_CONSTRAINT
149 integer :: itrc, k, nout
156 real(r8),
allocatable :: wr3d(:,:,:)
159 character (len=*),
parameter :: myfile = &
160 & __FILE__//
", ad_wrt_his_nf90"
173# if defined WRITE_WATER && defined MASKING
189# if defined WEAK_CONSTRAINT
195# ifdef AD_OUTPUT_STATE
196 lwrtstate3d(ng)=.false.
199# ifdef AD_OUTPUT_STATE
200 lwrtstate3d(ng)=.true.
208 adm(ng)%Rindex=
adm(ng)%Rindex+1
210 adm(ng)%Nrec(fcount)=
adm(ng)%Nrec(fcount)+1
232 adm(ng)%Rindex=mod(
adm(ng)%Rindex-1,2)+1
241# if defined WEAK_CONSTRAINT && !defined WEAK_NOINTERP
249 & (/
adm(ng)%Rindex/), (/1/), &
250 & ncid =
adm(ng)%ncid, &
255# ifdef ADJUST_WSTRESS
265 &
adm(ng)%Rindex, gtype, &
266 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
268 &
grid(ng) % umask, &
271 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
286 &
adm(ng)%Rindex, gtype, &
287 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
289 &
grid(ng) % vmask, &
292 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
301# if defined ADJUST_STFLUX && defined SOLVE3D
313 &
adm(ng)%Rindex, gtype, &
314 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
316 &
grid(ng) % rmask, &
319 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
338 &
adm(ng)%Rindex, gtype, &
339 & lbi, ubi, lbj, ubj, scale, &
341 &
grid(ng) % rmask, &
344 & setfillval = .false.)
345 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
364 &
adm(ng)%Rindex, gtype, &
365 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
367 &
grid(ng) % rmask, &
369 &
grid(ng) % ad_z_r, &
370 & setfillval = .false.)
371 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
388 &
adm(ng)%Rindex, gtype, &
389 & lbi, ubi, lbj, ubj, 0,
n(ng), scale, &
391 &
grid(ng) % rmask, &
393 &
grid(ng) % ad_z_w, &
394 & setfillval = .false.)
395 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
409# ifdef WEAK_CONSTRAINT
415 &
adm(ng)%Rindex, gtype, &
416 & lbi, ubi, lbj, ubj, scale, &
418 &
grid(ng) % rmask, &
420 &
ocean(ng)% f_zetaG(:,:,kfout))
421 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
436 &
adm(ng)%Rindex, gtype, &
437 & lbi, ubi, lbj, ubj, scale, &
439 &
grid(ng) % rmask, &
442 &
ocean(ng)% ad_zeta(:,:,kout), &
443 & setfillval = .false.)
445 &
ocean(ng)% ad_zeta(:,:,kout))
450 &
adm(ng)%Rindex, gtype, &
451 & lbi, ubi, lbj, ubj, scale, &
453 &
grid(ng) % rmask, &
456 &
ocean(ng)% ad_zeta_sol, &
457 & setfillval = .false.)
459 &
ocean(ng)% ad_zeta_sol)
462 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
470# ifdef WEAK_CONSTRAINT
475# ifdef ADJUST_BOUNDARY
485 & lbij, ubij,
nbrec(ng), scale, &
486 &
boundary(ng) % ad_zeta_obc(lbij:,:,:, &
488 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
503# ifdef WEAK_CONSTRAINT
509 &
adm(ng)%Rindex, gtype, &
510 & lbi, ubi, lbj, ubj, scale, &
512 &
grid(ng) % umask_full, &
514 &
ocean(ng) % f_ubarG(:,:,kfout))
515 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
530 &
adm(ng)%Rindex, gtype, &
531 & lbi, ubi, lbj, ubj, scale, &
533 &
grid(ng) % umask_full, &
535 &
ocean(ng) % ad_ubar(:,:,kout))
539 &
adm(ng)%Rindex, gtype, &
540 & lbi, ubi, lbj, ubj, scale, &
542 &
grid(ng) % umask_full, &
544 &
ocean(ng) % ad_ubar_sol)
546 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
554# ifdef WEAK_CONSTRAINT
559# ifdef ADJUST_BOUNDARY
569 & lbij, ubij,
nbrec(ng), scale, &
570 &
boundary(ng) % ad_ubar_obc(lbij:,:,:, &
572 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
587# ifdef WEAK_CONSTRAINT
593 &
adm(ng)%Rindex, gtype, &
594 & lbi, ubi, lbj, ubj, scale, &
596 &
grid(ng) % vmask_full, &
598 &
ocean(ng) % f_vbarG(:,:,kfout))
599 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
614 &
adm(ng)%Rindex, gtype, &
615 & lbi, ubi, lbj, ubj, scale, &
617 &
grid(ng) % vmask_full, &
619 &
ocean(ng) % ad_vbar(:,:,kout))
623 &
adm(ng)%Rindex, gtype, &
624 & lbi, ubi, lbj, ubj, scale, &
626 &
grid(ng) % vmask_full, &
628 &
ocean(ng) % ad_vbar_sol)
630 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
638# ifdef WEAK_CONSTRAINT
643# ifdef ADJUST_BOUNDARY
653 & lbij, ubij,
nbrec(ng), scale, &
654 &
boundary(ng) % ad_vbar_obc(lbij:,:,:, &
656 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
673# ifdef WEAK_CONSTRAINT
679 &
adm(ng)%Rindex, gtype, &
680 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
682 &
grid(ng) % umask_full, &
684 &
ocean(ng) % f_uG(:,:,:,kfout))
685 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
697# ifdef AD_OUTPUT_STATE
698 IF (lwrtstate3d(ng))
THEN
702 &
adm(ng)%Rindex, gtype, &
703 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
705 &
grid(ng) % umask_full, &
707 &
ocean(ng) % ad_u(:,:,:,nout))
708# ifdef AD_OUTPUT_STATE
712 &
adm(ng)%Rindex, gtype, &
713 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
715 &
grid(ng) % umask_full, &
717 &
ocean(ng) % ad_u_sol(:,:,:))
720 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
728# ifdef WEAK_CONSTRAINT
733# ifdef ADJUST_BOUNDARY
743 & lbij, ubij, 1,
n(ng),
nbrec(ng), scale, &
744 &
boundary(ng) % ad_u_obc(lbij:,:,:,:, &
746 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
761# ifdef WEAK_CONSTRAINT
767 &
adm(ng)%Rindex, gtype, &
768 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
770 &
grid(ng) % vmask_full, &
772 &
ocean(ng) % f_vG(:,:,:,kfout))
773 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
785# ifdef AD_OUTPUT_STATE
786 IF (lwrtstate3d(ng))
THEN
790 &
adm(ng)%Rindex, gtype, &
791 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
793 &
grid(ng) % vmask_full, &
795 &
ocean(ng) % ad_v(:,:,:,nout))
796# ifdef AD_OUTPUT_STATE
800 &
adm(ng)%Rindex, gtype, &
801 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
803 &
grid(ng) % vmask_full, &
805 &
ocean(ng) % ad_v_sol(:,:,:))
808 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
816# ifdef WEAK_CONSTRAINT
821# ifdef ADJUST_BOUNDARY
831 & lbij, ubij, 1,
n(ng),
nbrec(ng), scale, &
832 &
boundary(ng) % ad_v_obc(lbij:,:,:,:, &
834 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
845# ifdef UV_DESTAGGERED
854 &
adm(ng)%Rindex, gtype, &
855 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
857 &
grid(ng) % rmask_full, &
860 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
875 &
adm(ng)%Rindex, gtype, &
876 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
878 &
grid(ng) % rmask_full, &
881 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
895 IF (.not.
allocated(wr3d))
THEN
896 allocate (wr3d(lbi:ubi,lbj:ubj,0:
n(ng)))
897 wr3d(lbi:ubi,lbj:ubj,0:
n(ng))=0.0_r8
901 CALL scale_omega (ng, tile, lbi, ubi, lbj, ubj, 0,
n(ng), &
904 &
ocean(ng) % ad_W_sol, &
908 &
adm(ng)%Rindex, gtype, &
909 & lbi, ubi, lbj, ubj, 0,
n(ng), scale, &
911 &
grid(ng) % rmask, &
914 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
929# ifdef WEAK_CONSTRAINT
934 &
adm(ng)%Tid(itrc), &
935 &
adm(ng)%Rindex, gtype, &
936 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
938 &
grid(ng) % rmask, &
940 &
ocean(ng) % f_tG(:,:,:,kfout,itrc))
941 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
954# ifdef AD_OUTPUT_STATE
955 IF (lwrtstate3d(ng))
THEN
958 &
adm(ng)%Tid(itrc), &
959 &
adm(ng)%Rindex, gtype, &
960 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
962 &
grid(ng) % rmask, &
964 &
ocean(ng) % ad_t(:,:,:,nout,itrc))
965# ifdef AD_OUTPUT_STATE
968 &
adm(ng)%Tid(itrc), &
969 &
adm(ng)%Rindex, gtype, &
970 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
972 &
grid(ng) % rmask, &
974 &
ocean(ng) % ad_t_sol(:,:,:,itrc))
977 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
986# ifdef WEAK_CONSTRAINT
992# ifdef ADJUST_BOUNDARY
1003 & lbij, ubij, 1,
n(ng),
nbrec(ng), &
1005 &
boundary(ng) % ad_t_obc(lbij:,:,:,:, &
1007 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1027 &
adm(ng)%Rindex, gtype, &
1028 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
1030 &
grid(ng) % rmask, &
1032 &
ocean(ng) % ad_rho)
1033 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1050 &
adm(ng)%Rindex, gtype, &
1051 & lbi, ubi, lbj, ubj, 0,
n(ng), scale, &
1053 &
grid(ng) % rmask, &
1056 & setfillval = .false.)
1057 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1074 &
adm(ng)%Rindex, gtype, &
1075 & lbi, ubi, lbj, ubj, 0,
n(ng), scale, &
1077 &
grid(ng) % rmask, &
1080 & setfillval = .false.)
1081 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1099 &
adm(ng)%Rindex, gtype, &
1100 & lbi, ubi, lbj, ubj, 0,
n(ng), scale, &
1102 &
grid(ng) % rmask, &
1105 & setfillval = .false.)
1106 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1116# ifndef ADJUST_STFLUX
1122# if defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
1123 defined opt_observations
1124 IF (itrc.eq.
itemp)
THEN
1136 &
adm(ng)%Rindex, gtype, &
1137 & lbi, ubi, lbj, ubj, scale, &
1139 &
grid(ng) % rmask, &
1141 &
forces(ng) % ad_stflx(:,:,itrc))
1142 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1155# ifndef ADJUST_WSTRESS
1160# if defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
1161 defined opt_observations
1170 &
adm(ng)%Rindex, gtype, &
1171 & lbi, ubi, lbj, ubj, scale, &
1173 &
grid(ng) % umask, &
1176 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1190# if defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
1191 defined opt_observations
1199 &
adm(ng)%Rindex, gtype, &
1200 & lbi, ubi, lbj, ubj, scale, &
1202 &
grid(ng) % vmask, &
1205 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1224 &
adm(ng)%Rindex, gtype, &
1225 & lbi, ubi, lbj, ubj, scale, &
1227 &
grid(ng) % umask, &
1229 &
forces(ng) % ad_bustr_sol)
1230 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1248 &
adm(ng)%Rindex, gtype, &
1249 & lbi, ubi, lbj, ubj, scale, &
1251 &
grid(ng) % vmask, &
1253 &
forces(ng) % ad_bvstr_sol)
1254 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1272 10
FORMAT (2x,
'AD_WRT_HIS_NF90 - writing adjoint', t42, &
1275 &
'fields (Index=',i1,
',',i1,
') in record = ',i0,t92,i2.2)
1277 &
'fields (Index=',i1,
',',i1,
') in record = ',i0)
1281 &
'fields (Index=',i1,
') in record = ',i0,t92,i2.2)
1283 &
'fields (Index=',i1,
') in record = ',i0)
1286 20
FORMAT (/,
' AD_WRT_HIS_NF90 - error while writing variable: ',a, &
1287 & /,19x,
'into adjoint NetCDF file for time record: ',i0)
1296# ifdef ADJUST_BOUNDARY
1299 & LBi, UBi, LBj, UBj)
1306 integer,
intent(in) :: ng, tile
1307# ifdef ADJUST_BOUNDARY
1308 integer,
intent(in) :: lbij, ubij
1310 integer,
intent(in) :: lbi, ubi, lbj, ubj
1314 integer :: fcount, i, ifield, j, status
1316# ifdef WEAK_CONSTRAINT
1320 integer :: itrc, k, nout
1327 real(r8),
allocatable :: wr3d(:,:,:)
1330 character (len=*),
parameter :: myfile = &
1331 & __FILE__//
", ad_wrt_his_pio"
1333 TYPE (io_desc_t),
pointer :: iodesc
1353# if defined WEAK_CONSTRAINT
1359# ifdef AD_OUTPUT_STATE
1360 lwrtstate3d(ng)=.false.
1363# ifdef AD_OUTPUT_STATE
1364 lwrtstate3d(ng)=.true.
1372 adm(ng)%Rindex=
adm(ng)%Rindex+1
1374 adm(ng)%Nrec(fcount)=
adm(ng)%Nrec(fcount)+1
1396 adm(ng)%Rindex=mod(
adm(ng)%Rindex-1,2)+1
1405# if defined WEAK_CONSTRAINT && !defined WEAK_NOINTERP
1413 & (/
adm(ng)%Rindex/), (/1/), &
1414 & piofile =
adm(ng)%pioFile, &
1419# ifdef ADJUST_WSTRESS
1426 IF (
adm(ng)%pioVar(
idusms)%dkind.eq.pio_double)
THEN
1434 &
adm(ng)%Rindex, iodesc, &
1435 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
1437 &
grid(ng) % umask, &
1440 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1452 IF (
adm(ng)%pioVar(
idvsms)%dkind.eq.pio_double)
THEN
1460 &
adm(ng)%Rindex, iodesc, &
1461 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
1463 &
grid(ng) % vmask, &
1466 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1475# if defined ADJUST_STFLUX && defined SOLVE3D
1484 IF (
adm(ng)%pioVar(
idtsur(itrc))%dkind.eq.pio_double)
THEN
1492 &
adm(ng)%Rindex, iodesc, &
1493 & lbi, ubi, lbj, ubj, 1,
nfrec(ng), scale, &
1495 &
grid(ng) % rmask, &
1498 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1514 IF (
adm(ng)%pioVar(
idbath)%dkind.eq.pio_double)
THEN
1522 &
adm(ng)%Rindex, iodesc, &
1523 & lbi, ubi, lbj, ubj, scale, &
1525 &
grid(ng) % rmask, &
1528 & setfillval = .false.)
1529 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1545 IF (
his(ng)%pioVar(
idpthr)%dkind.eq.pio_double)
THEN
1554 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
1556 &
grid(ng) % rmask, &
1558 &
grid(ng) % ad_z_r, &
1559 & setfillval = .false.)
1560 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1574 IF (
his(ng)%pioVar(
idpthw)%dkind.eq.pio_double)
THEN
1583 & lbi, ubi, lbj, ubj, 0,
n(ng), scale, &
1585 &
grid(ng) % rmask, &
1587 &
grid(ng) % ad_z_w, &
1588 & setfillval = .false.)
1589 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1603 IF (
adm(ng)%pioVar(
idfsur)%dkind.eq.pio_double)
THEN
1610# ifdef WEAK_CONSTRAINT
1614 &
adm(ng)%Rindex, iodesc, &
1615 & lbi, ubi, lbj, ubj, scale, &
1617 &
grid(ng) % rmask, &
1619 &
ocean(ng)% f_zetaG(:,:,kfout))
1620 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1633 &
adm(ng)%Rindex, iodesc, &
1634 & lbi, ubi, lbj, ubj, scale, &
1636 &
grid(ng) % rmask, &
1639 &
ocean(ng)% ad_zeta(:,:,kout), &
1640 & setfillval = .false.)
1642 &
ocean(ng)% ad_zeta(:,:,kout))
1647 &
adm(ng)%Rindex, iodesc, &
1648 & lbi, ubi, lbj, ubj, scale, &
1650 &
grid(ng) % rmask, &
1653 &
ocean(ng)% ad_zeta_sol, &
1654 & setfillval = .false.)
1656 &
ocean(ng)% ad_zeta_sol)
1659 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1667# ifdef WEAK_CONSTRAINT
1672# ifdef ADJUST_BOUNDARY
1685 &
adm(ng)%pioFile, &
1688 &
adm(ng)%Rindex, iodesc, &
1689 & lbij, ubij,
nbrec(ng), scale, &
1690 &
boundary(ng) % ad_zeta_obc(lbij:,:,:, &
1692 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1707 IF (
adm(ng)%pioVar(
idubar)%dkind.eq.pio_double)
THEN
1714# ifdef WEAK_CONSTRAINT
1718 &
adm(ng)%Rindex, iodesc, &
1719 & lbi, ubi, lbj, ubj, scale, &
1721 &
grid(ng) % umask_full, &
1723 &
ocean(ng) % f_ubarG(:,:,kfout))
1724 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1737 &
adm(ng)%Rindex, iodesc, &
1738 & lbi, ubi, lbj, ubj, scale, &
1740 &
grid(ng) % umask_full, &
1742 &
ocean(ng) % ad_ubar(:,:,kout))
1746 &
adm(ng)%Rindex, iodesc, &
1747 & lbi, ubi, lbj, ubj, scale, &
1749 &
grid(ng) % umask_full, &
1751 &
ocean(ng) % ad_ubar_sol)
1753 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1761# ifdef WEAK_CONSTRAINT
1766# ifdef ADJUST_BOUNDARY
1779 &
adm(ng)%pioFile, &
1782 &
adm(ng)%Rindex, iodesc, &
1783 & lbij, ubij,
nbrec(ng), scale, &
1784 &
boundary(ng) % ad_ubar_obc(lbij:,:,:, &
1786 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1801 IF (
adm(ng)%pioVar(
idvbar)%dkind.eq.pio_double)
THEN
1809# ifdef WEAK_CONSTRAINT
1813 &
adm(ng)%Rindex, iodesc, &
1814 & lbi, ubi, lbj, ubj, scale, &
1816 &
grid(ng) % vmask_full, &
1818 &
ocean(ng) % f_vbarG(:,:,kfout))
1819 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1832 &
adm(ng)%Rindex, iodesc, &
1833 & lbi, ubi, lbj, ubj, scale, &
1835 &
grid(ng) % vmask_full, &
1837 &
ocean(ng) % ad_vbar(:,:,kout))
1841 &
adm(ng)%Rindex, iodesc, &
1842 & lbi, ubi, lbj, ubj, scale, &
1844 &
grid(ng) % vmask_full, &
1846 &
ocean(ng) % ad_vbar_sol)
1848 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1856# ifdef WEAK_CONSTRAINT
1861# ifdef ADJUST_BOUNDARY
1874 &
adm(ng)%pioFile, &
1877 &
adm(ng)%Rindex, iodesc, &
1878 & lbij, ubij,
nbrec(ng), scale, &
1879 &
boundary(ng) % ad_vbar_obc(lbij:,:,:, &
1881 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1898 IF (
adm(ng)%pioVar(
iduvel)%dkind.eq.pio_double)
THEN
1905# ifdef WEAK_CONSTRAINT
1909 &
adm(ng)%Rindex, iodesc, &
1910 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
1912 &
grid(ng) % umask_full, &
1914 &
ocean(ng) % f_uG(:,:,:,kfout))
1915 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1925# ifdef AD_OUTPUT_STATE
1926 IF (lwrtstate3d(ng))
THEN
1930 &
adm(ng)%Rindex, iodesc, &
1931 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
1933 &
grid(ng) % umask_full, &
1935 &
ocean(ng) % ad_u(:,:,:,nout))
1936# ifdef AD_OUTPUT_STATE
1940 &
adm(ng)%Rindex, iodesc, &
1941 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
1943 &
grid(ng) % umask_full, &
1945 &
ocean(ng) % ad_u_sol(:,:,:))
1948 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1956# ifdef WEAK_CONSTRAINT
1961# ifdef ADJUST_BOUNDARY
1974 &
adm(ng)%pioFile, &
1977 &
adm(ng)%Rindex, iodesc, &
1978 & lbij, ubij, 1,
n(ng),
nbrec(ng), scale, &
1979 &
boundary(ng) % ad_u_obc(lbij:,:,:,:, &
1981 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1996 IF (
adm(ng)%pioVar(
idvvel)%dkind.eq.pio_double)
THEN
2003# ifdef WEAK_CONSTRAINT
2007 &
adm(ng)%Rindex, iodesc, &
2008 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
2010 &
grid(ng) % vmask_full, &
2012 &
ocean(ng) % f_vG(:,:,:,kfout))
2013 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2023# ifdef AD_OUTPUT_STATE
2024 IF (lwrtstate3d(ng))
THEN
2028 &
adm(ng)%Rindex, iodesc, &
2029 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
2031 &
grid(ng) % vmask_full, &
2033 &
ocean(ng) % ad_v(:,:,:,nout))
2034# ifdef AD_OUTPUT_STATE
2038 &
adm(ng)%Rindex, iodesc, &
2039 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
2041 &
grid(ng) % vmask_full, &
2043 &
ocean(ng) % ad_v_sol(:,:,:))
2046 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2054# ifdef WEAK_CONSTRAINT
2059# ifdef ADJUST_BOUNDARY
2072 &
adm(ng)%pioFile, &
2075 &
adm(ng)%Rindex, iodesc, &
2076 & lbij, ubij, 1,
n(ng),
nbrec(ng), scale, &
2077 &
boundary(ng) % ad_v_obc(lbij:,:,:,:, &
2079 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2090# ifdef UV_DESTAGGERED
2096 IF (
adm(ng)%pioVar(
idu3de)%dkind.eq.pio_double)
THEN
2105 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
2107 &
grid(ng) % rmask_full, &
2109 &
ocean(ng) % ad_ua)
2110 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2123 IF (
adm(ng)%pioVar(
idv3dn)%dkind.eq.pio_double)
THEN
2132 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
2134 &
grid(ng) % rmask_full, &
2136 &
ocean(ng) % ad_va)
2137 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2151 IF (.not.
allocated(wr3d))
THEN
2152 allocate (wr3d(lbi:ubi,lbj:ubj,0:
n(ng)))
2153 wr3d(lbi:ubi,lbj:ubj,0:
n(ng))=0.0_r8
2156 CALL scale_omega (ng, tile, lbi, ubi, lbj, ubj, 0,
n(ng), &
2159 &
ocean(ng) % ad_W_sol, &
2162 IF (
adm(ng)%pioVar(
idovel)%dkind.eq.pio_double)
THEN
2169 &
adm(ng)%Rindex, iodesc, &
2170 & lbi, ubi, lbj, ubj, 0,
n(ng), scale, &
2172 &
grid(ng) % rmask, &
2175 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
2190 IF (
adm(ng)%pioTrc(itrc)%dkind.eq.pio_double)
THEN
2198# ifdef WEAK_CONSTRAINT
2201 &
adm(ng)%pioTrc(itrc), &
2202 &
adm(ng)%Rindex, iodesc, &
2203 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
2205 &
grid(ng) % rmask, &
2207 &
ocean(ng) % f_tG(:,:,:,kfout,itrc))
2208 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2219# ifdef AD_OUTPUT_STATE
2220 IF (lwrtstate3d(ng))
THEN
2224 &
adm(ng)%Rindex, iodesc, &
2225 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
2227 &
grid(ng) % rmask, &
2229 &
ocean(ng) % ad_t(:,:,:,nout,itrc))
2230# ifdef AD_OUTPUT_STATE
2234 &
adm(ng)%Rindex, iodesc, &
2235 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
2237 &
grid(ng) % rmask, &
2239 &
ocean(ng) % ad_t_sol(:,:,:,itrc))
2242 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2251# ifdef WEAK_CONSTRAINT
2257# ifdef ADJUST_BOUNDARY
2265 IF (
adm(ng)%pioVar(ifield)%dkind.eq.pio_double)
THEN
2272 &
adm(ng)%pioFile, &
2273 &
vname(1,ifield), &
2274 &
adm(ng)%pioVar(ifield), &
2275 &
adm(ng)%Rindex, iodesc, &
2276 & lbij, ubij, 1,
n(ng),
nbrec(ng), &
2278 &
boundary(ng) % ad_t_obc(lbij:,:,:,:, &
2280 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2296 IF (
adm(ng)%pioVar(
iddano)%dkind.eq.pio_double)
THEN
2304 &
adm(ng)%Rindex, iodesc, &
2305 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
2307 &
grid(ng) % rmask, &
2309 &
ocean(ng) % ad_rho)
2310 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2324 IF (
adm(ng)%pioVar(
idvvis)%dkind.eq.pio_double)
THEN
2332 &
adm(ng)%Rindex, iodesc, &
2333 & lbi, ubi, lbj, ubj, 0,
n(ng), scale, &
2335 &
grid(ng) % rmask, &
2338 & setfillval = .false.)
2339 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2353 IF (
adm(ng)%pioVar(
idtdif)%dkind.eq.pio_double)
THEN
2361 &
adm(ng)%Rindex, iodesc, &
2362 & lbi, ubi, lbj, ubj, 0,
n(ng), scale, &
2364 &
grid(ng) % rmask, &
2367 & setfillval = .false.)
2368 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2384 IF (
adm(ng)%pioVar(
idsdif)%dkind.eq.pio_double)
THEN
2392 &
adm(ng)%Rindex, iodesc, &
2393 & lbi, ubi, lbj, ubj, 0,
n(ng), scale, &
2395 &
grid(ng) % rmask, &
2398 & setfillval = .false.)
2399 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2409# ifndef ADJUST_STFLUX
2415# if defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
2416 defined opt_observations
2417 IF (itrc.eq.
itemp)
THEN
2426 IF (
adm(ng)%pioVar(
idtsur(itrc))%dkind.eq.pio_double)
THEN
2434 &
adm(ng)%Rindex, iodesc, &
2435 & lbi, ubi, lbj, ubj, scale, &
2437 &
grid(ng) % rmask, &
2439 &
forces(ng) % ad_stflx(:,:,itrc))
2440 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2453# ifndef ADJUST_WSTRESS
2458# if defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
2459 defined opt_observations
2465 IF (
adm(ng)%pioVar(
idusms)%dkind.eq.pio_double)
THEN
2473 &
adm(ng)%Rindex, iodesc, &
2474 & lbi, ubi, lbj, ubj, scale, &
2476 &
grid(ng) % umask, &
2479 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2493# if defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
2494 defined opt_observations
2499 IF (
adm(ng)%pioVar(
idvsms)%dkind.eq.pio_double)
THEN
2507 &
adm(ng)%Rindex, iodesc, &
2508 & lbi, ubi, lbj, ubj, scale, &
2510 &
grid(ng) % vmask, &
2513 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2529 IF (
adm(ng)%pioVar(
idubms)%dkind.eq.pio_double)
THEN
2537 &
adm(ng)%Rindex, iodesc, &
2538 & lbi, ubi, lbj, ubj, scale, &
2540 &
grid(ng) % umask, &
2542 &
forces(ng) % ad_bustr_sol)
2543 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2558 IF (
adm(ng)%pioVar(
idvbms)%dkind.eq.pio_double)
THEN
2566 &
adm(ng)%Rindex, iodesc, &
2567 & lbi, ubi, lbj, ubj, scale, &
2569 &
grid(ng) % vmask, &
2571 &
forces(ng) % ad_bvstr_sol)
2572 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2590 10
FORMAT (2x,
'AD_WRT_HIS_PIO - writing adjoint', t42, &
2593 &
'fields (Index=',i1,
',',i1,
') in record = ',i0,t92,i2.2)
2595 &
'fields (Index=',i1,
',',i1,
') in record = ',i0)
2599 &
'fields (Index=',i1,
') in record = ',i0,t92,i2.2)
2601 &
'fields (Index=',i1,
') in record = ',i0)
2604 20
FORMAT (/,
' AD_WRT_HIS_PIO - error while writing variable: ',a, &
2605 & /,18x,
'into adjoint NetCDF file for time record: ',i0)