3#if defined ADJOINT && defined OBSERVATIONS && defined WEAK_CONSTRAINT
38 integer,
intent(in) :: ng, tile, model
45 & lbi, ubi, lbj, ubj, &
46 & imins, imaxs, jmins, jmaxs, &
59 &
ocean(ng) % f_ubar, &
60 &
ocean(ng) % f_vbar, &
67 & LBi, UBi, LBj, UBj, &
68 & IminS, ImaxS, JminS, JmaxS, &
70 & rmask, umask, vmask, &
76 & f_ubar, f_vbar, f_zeta)
100 integer,
intent(in) :: ng, tile, model
101 integer,
intent(in) :: LBi, UBi, LBj, UBj
102 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
106 real(r8),
intent(in) :: rmask(LBi:,LBj:)
107 real(r8),
intent(in) :: umask(LBi:,LBj:)
108 real(r8),
intent(in) :: vmask(LBi:,LBj:)
111 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
112 real(r8),
intent(inout) :: z_v(LBi:,LBj:,:)
113 real(r8),
intent(inout) :: f_u(LBi:,LBj:,:)
114 real(r8),
intent(inout) :: f_v(LBi:,LBj:,:)
115 real(r8),
intent(inout) :: f_t(LBi:,LBj:,:,:)
117 real(r8),
intent(inout) :: f_ubar(LBi:,LBj:)
118 real(r8),
intent(inout) :: f_vbar(LBi:,LBj:)
119 real(r8),
intent(inout) :: f_zeta(LBi:,LBj:)
122 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
123 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
124 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
127 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
128 real(r8),
intent(inout) :: z_v(LBi:UBi,LBj:UBj,N(ng))
129 real(r8),
intent(inout) :: f_u(LBi:UBi,LBj:UBj,N(ng))
130 real(r8),
intent(inout) :: f_v(LBi:UBi,LBj:UBj,N(ng))
131 real(r8),
intent(inout) :: f_t(LBi:UBi,LBj:UBj,N(ng),NT(ng))
133 real(r8),
intent(inout) :: f_ubar(LBi:UBi,LBj:UBj)
134 real(r8),
intent(inout) :: f_vbar(LBi:UBi,LBj:UBj)
135 real(r8),
intent(inout) :: f_zeta(LBi:UBi,LBj:UBj)
140 integer :: Mstr, Mend, ObsSum, ObsVoid
144 integer :: i, ie, iobs, is, j
151 real(r8),
parameter :: IniVal = 0.0_r8
153 real(r8) :: ad_uradial(Mobs), ad_vradial(Mobs)
155# include "set_bounds.h"
197# if defined OBS_SPACE && defined RBL4DVAR_FCT_SENSITIVITY
202 IF (.not.ladjvar(ng))
THEN
238 & lbi, ubi, lbj, ubj, &
240 & mobs, mstr, mend, &
253 & lbi, ubi, lbj, ubj, &
269 & lbi, ubi, lbj, ubj, &
271 & mobs, mstr, mend, &
284 & lbi, ubi, lbj, ubj, &
300 & lbi, ubi, lbj, ubj, &
302 & mobs, mstr, mend, &
315 & lbi, ubi, lbj, ubj, &
337 z_v(i,j,k)=0.5_r8*(z_r(i-1,j,k)+ &
343 & lbi, ubi, lbj, ubj, 1, n(ng), &
345 & mobs, mstr, mend, &
358 & lbi, ubi, lbj, ubj, 1, n(ng), &
378 z_v(i,j,k)=0.5_r8*(z_r(i,j-1,k)+ &
384 & lbi, ubi, lbj, ubj, 1, n(ng), &
386 & mobs, mstr, mend, &
399 & lbi, ubi, lbj, ubj, 1, n(ng), &
409# ifdef RADIAL_ANGLE_CCW_EAST
439 ad_uradial(iobs)=inival
440 ad_vradial(iobs)=inival
444# ifdef RADIAL_ANGLE_CCW_EAST
447 ad_uradial(iobs)=ad_uradial(iobs)+ &
449 ad_vradial(iobs)=ad_vradial(iobs)+ &
452 ad_uradial(iobs)=ad_uradial(iobs)+ &
454 ad_vradial(iobs)=ad_vradial(iobs)+ &
460 ad_uradial(iobs)=ad_uradial(iobs)+ &
462 ad_vradial(iobs)=ad_vradial(iobs)+ &
465 ad_uradial(iobs)=ad_uradial(iobs)+ &
467 ad_vradial(iobs)=ad_vradial(iobs)+ &
477 z_v(i,j,k)=0.5_r8*(z_r(i,j-1,k)+ &
483 & lbi, ubi, lbj, ubj, 1, n(ng), &
485 & mobs, mstr, mend, &
499 z_v(i,j,k)=0.5_r8*(z_r(i-1,j,k)+ &
505 & lbi, ubi, lbj, ubj, 1, n(ng), &
507 & mobs, mstr, mend, &
529 & lbi, ubi, lbj, ubj, 1, n(ng), &
541 f_t(i,j,k,itrc)=0.0_r8
547 & lbi, ubi, lbj, ubj, 1, n(ng), &
549 & mobs, mstr, mend, &
555 & f_t(:,:,:,itrc), z_r, &
562 & lbi, ubi, lbj, ubj, 1, n(ng), &
579 CALL mp_collect (ng, model, ncollect, inival, &
634 IF (
domain(ng)%SouthWest_Test(tile))
THEN
640 IF (
fourdvar(ng)%ObsCount(i).gt.0)
THEN
643 & ie-is+1,
fourdvar(ng)%ObsReject(i)
645 obssum=obssum+
fourdvar(ng)%ObsCount(i)
646 obsvoid=obsvoid+
fourdvar(ng)%ObsReject(i)
649 WRITE (
stdout,20) obssum, obsvoid, &
654 10
FORMAT (10x,a,t25,4(1x,i10))
655 20
FORMAT (/,10x,
'Total',t47,2(1x,i10), &
656 & /,10x,
'Obs Tally',t47,2(1x,i10),/)
657 30
FORMAT (3x,
' AD_HTOBS - Computed adjoint observations ', &
658 &
'forcing,',t68,a,/,19x,
'(Observation ', &
659 &
'records = ',i7.7,
' - ',i7.7,
', iic = ',i7.7,
')')
subroutine ad_htobs(ng, tile, model)
subroutine ad_htobs_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, rmask, umask, vmask, z_r, z_v, f_u, f_v, f_t, f_ubar, f_vbar, f_zeta)
type(t_fourdvar), dimension(:), allocatable fourdvar
real(r8), dimension(:), allocatable obsvetting
integer, dimension(:), allocatable nobsvar
real(r8), dimension(:), allocatable obsval
real(r8), dimension(:), allocatable obsangler
real(r8), dimension(:), allocatable obsscale
real(r8), dimension(:), allocatable obsmeta
integer, dimension(:), allocatable obstype
real(r8), dimension(:), allocatable admodval
real(r8), dimension(:), allocatable zobs
logical, dimension(:), allocatable lobspace
real(dp), dimension(:), allocatable tobs
real(r8), dimension(:), allocatable xobs
integer, dimension(:), allocatable obsstate2type
real(r8), dimension(:), allocatable yobs
character(len=40), dimension(:), allocatable obsname
integer, dimension(:), allocatable nstrobs
logical, dimension(:), allocatable processobs
integer, dimension(:), allocatable nendobs
type(t_grid), dimension(:), allocatable grid
real(r8), dimension(:), allocatable rymin
real(r8), dimension(:), allocatable vymin
real(r8), dimension(:), allocatable rymax
real(r8), dimension(:), allocatable uymin
real(r8), dimension(:), allocatable vymax
real(r8), dimension(:), allocatable uxmin
real(r8), dimension(:), allocatable uxmax
real(r8), dimension(:), allocatable rxmax
integer, dimension(:), allocatable istvar
real(r8), dimension(:), allocatable uymax
real(r8), dimension(:), allocatable vxmin
real(r8), dimension(:), allocatable vxmax
real(r8), dimension(:), allocatable rxmin
type(t_ocean), dimension(:), allocatable ocean
type(t_domain), dimension(:), allocatable domain
integer, dimension(:), allocatable lm
integer, dimension(:), allocatable mm
integer, dimension(:), allocatable iic
real(dp), dimension(:), allocatable dt
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
character(len=22), dimension(:), allocatable time_code
real(dp), dimension(:), allocatable time
subroutine ad_mp_exchange3d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, nghost, ew_periodic, ns_periodic, ad_a, ad_b, ad_c, ad_d)
subroutine ad_mp_exchange2d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, nghost, ew_periodic, ns_periodic, ad_a, ad_b, ad_c, ad_d)