128 & LBi, UBi, LBj, UBj, &
129 & ifield, Mobs, NobsSTR, NobsEND, &
130 & Xmin, Xmax, Ymin, Ymax, &
132 & ObsType, ObsVetting, &
133 & Tobs, Xobs, Yobs, &
146 integer,
intent(in) :: ng, imin, imax, jmin, jmax
147 integer,
intent(in) :: lbi, ubi, lbj, ubj
148 integer,
intent(in) :: ifield,
mobs, nobsstr, nobsend
150 real(
r8),
intent(in) :: xmin, xmax, ymin, ymax
151 real(
dp),
intent(in) :: time, dt
154 integer,
intent(in) ::
obstype(:)
156 real(
dp),
intent(in) ::
tobs(:)
157 real(
r8),
intent(in) ::
xobs(:)
158 real(
r8),
intent(in) ::
yobs(:)
160 real(
r8),
intent(in) :: amask(lbi:,lbj:)
163 real(
r8),
intent(inout) :: ad_aobs(:)
164 real(
r8),
intent(inout) :: ad_a(lbi:,lbj:)
173 real(
r8),
intent(in) :: amask(lbi:ubi,lbj:ubj)
176 real(
r8),
intent(inout) :: ad_aobs(
mobs)
177 real(
r8),
intent(inout) :: ad_a(lbi:ubi,lbj:ubj)
182 integer :: ic, iobs, i1, i2, j1, j2
184 real(
dp) :: timelb, timeub
186 real(
r8) :: p1, p2, q1, q2, wsum
188 real(
r8),
dimension(8) :: hmat
194 timelb=(time-0.5_dp*dt)/86400.0_dp
195 timeub=(time+0.5_dp*dt)/86400.0_dp
197 DO iobs=nobsstr,nobsend
198 IF ((
obstype(iobs).eq.ifield).and. &
199 & ((timelb.le.
tobs(iobs)).and.(
tobs(iobs).lt.timeub)).and. &
200 & ((xmin.le.
xobs(iobs)).and.(
xobs(iobs).lt.xmax)).and. &
201 & ((ymin.le.
yobs(iobs)).and.(
yobs(iobs).lt.ymax)))
THEN
203 i1=int(
xobs(iobs)+0.5_r8)
207 j1=int(
yobs(iobs)+0.5_r8)
220 p2=real(i2-i1,
r8)*(
xobs(iobs)-real(i1,
r8))
221 q2=real(j2-j1,
r8)*(
yobs(iobs)-real(j1,
r8))
229 hmat(1)=hmat(1)*amask(i1,j1)
230 hmat(2)=hmat(2)*amask(i2,j1)
231 hmat(3)=hmat(3)*amask(i2,j2)
232 hmat(4)=hmat(4)*amask(i1,j2)
237 IF (wsum.gt.0.0_r8)
THEN
240 hmat(ic)=hmat(ic)*wsum
249 ad_a(i1,j1)=ad_a(i1,j1)+hmat(1)*ad_aobs(iobs)
250 ad_a(i2,j1)=ad_a(i2,j1)+hmat(2)*ad_aobs(iobs)
251 ad_a(i2,j2)=ad_a(i2,j2)+hmat(3)*ad_aobs(iobs)
252 ad_a(i1,j2)=ad_a(i1,j2)+hmat(4)*ad_aobs(iobs)
269 & LBi, UBi, LBj, UBj, LBk, UBk, &
270 & ifield, Mobs, NobsSTR, NobsEND, &
271 & Xmin, Xmax, Ymin, Ymax, &
273 & ObsType, ObsVetting, &
274 & Tobs, Xobs, Yobs, Zobs, &
289 integer,
intent(in) :: ng, imin, imax, jmin, jmax
290 integer,
intent(in) :: lbi, ubi, lbj, ubj, lbk, ubk
291 integer,
intent(in) :: ifield,
mobs, nobsstr, nobsend
293 real(
r8),
intent(in) :: xmin, xmax, ymin, ymax
294 real(
dp),
intent(in) :: time, dt
297 integer,
intent(in) ::
obstype(:)
299 real(
dp),
intent(in) ::
tobs(:)
300 real(
r8),
intent(in) ::
xobs(:)
301 real(
r8),
intent(in) ::
yobs(:)
302 real(
r8),
intent(in) :: adepth(lbi:,lbj:,lbk:)
304 real(
r8),
intent(in) :: amask(lbi:,lbj:)
307 real(
r8),
intent(inout) :: ad_aobs(:)
308 real(
r8),
intent(inout) ::
zobs(:)
309 real(
r8),
intent(inout) :: ad_a(lbi:,lbj:,lbk:)
316 real(
r8),
intent(in) :: adepth(lbi:ubi,lbj:ubj,lbk:ubk)
318 real(
r8),
intent(in) :: amask(lbi:ubi,lbj:ubj)
321 real(
r8),
intent(inout) :: ad_aobs(
mobs)
323 real(
r8),
intent(inout) :: ad_a(lbi:ubi,lbj:ubj,lbk:ubk)
328 integer :: i, ic, iobs, i1, i2, j1, j2, k, k1, k2
330 real(
dp) :: timelb, timeub
332 real(
r8) :: zbot, ztop, dz, p1, p2, q1, q2, r1, r2
333 real(
r8) :: w11, w12, w21, w22, wsum
335 real(
r8),
dimension(8) :: hmat
341 timelb=(time-0.5_dp*dt)/86400.0_dp
342 timeub=(time+0.5_dp*dt)/86400.0_dp
344 DO iobs=nobsstr,nobsend
345 IF ((
obstype(iobs).eq.ifield).and. &
346 & ((timelb.le.
tobs(iobs)).and.(
tobs(iobs).lt.timeub)).and. &
347 & ((xmin.le.
xobs(iobs)).and.(
xobs(iobs).lt.xmax)).and. &
348 & ((ymin.le.
yobs(iobs)).and.(
yobs(iobs).lt.ymax)))
THEN
350 i1=int(
xobs(iobs)+0.5_r8)
354 j1=int(
yobs(iobs)+0.5_r8)
367 p2=real(i2-i1,
r8)*(
xobs(iobs)-real(i1,
r8))
368 q2=real(j2-j1,
r8)*(
yobs(iobs)-real(j1,
r8))
375 IF (
zobs(iobs).gt.0.0_r8)
THEN
376 k1=max(1,int(
zobs(iobs)))
378 r2=real(k2-k1,
r8)*(
zobs(iobs)-real(k1,
r8))
381 ztop=adepth(i1,j1,
n(ng))
382 zbot=adepth(i1,j1,1 )
383 IF (
zobs(iobs).ge.ztop)
THEN
389 ELSE IF (zbot.ge.
zobs(iobs))
THEN
395 ztop=adepth(i1,j1,k )
396 zbot=adepth(i1,j1,k-1)
397 IF ((ztop.gt.
zobs(iobs)).and.(
zobs(iobs).ge.zbot))
THEN
402 dz=adepth(i1,j1,k2)-adepth(i1,j1,k1)
403 r2=(
zobs(iobs)-adepth(i1,j1,k1))/dz
408 IF ((r1+r2).gt.0.0_r8)
THEN
418 hmat(1)=hmat(1)*amask(i1,j1)
419 hmat(2)=hmat(2)*amask(i2,j1)
420 hmat(3)=hmat(3)*amask(i2,j2)
421 hmat(4)=hmat(4)*amask(i1,j2)
422 hmat(5)=hmat(5)*amask(i1,j1)
423 hmat(6)=hmat(6)*amask(i2,j1)
424 hmat(7)=hmat(7)*amask(i2,j2)
425 hmat(8)=hmat(8)*amask(i1,j2)
430 IF (wsum.gt.0.0_r8)
THEN
433 hmat(ic)=hmat(ic)*wsum
446 ad_a(i1,j1,k1)=ad_a(i1,j1,k1)+hmat(1)*ad_aobs(iobs)
447 ad_a(i2,j1,k1)=ad_a(i2,j1,k1)+hmat(2)*ad_aobs(iobs)
448 ad_a(i2,j2,k1)=ad_a(i2,j2,k1)+hmat(3)*ad_aobs(iobs)
449 ad_a(i1,j2,k1)=ad_a(i1,j2,k1)+hmat(4)*ad_aobs(iobs)
450 ad_a(i1,j1,k2)=ad_a(i1,j1,k2)+hmat(5)*ad_aobs(iobs)
451 ad_a(i2,j1,k2)=ad_a(i2,j1,k2)+hmat(6)*ad_aobs(iobs)
452 ad_a(i2,j2,k2)=ad_a(i2,j2,k2)+hmat(7)*ad_aobs(iobs)
453 ad_a(i1,j2,k2)=ad_a(i1,j2,k2)+hmat(8)*ad_aobs(iobs)