107 SUBROUTINE obs_k2z (ng, Imin, Imax, Jmin, Jmax, &
108 & LBi, UBi, LBj, UBj, LBk, UBk, &
109 & Xmin, Xmax, Ymin, Ymax, &
110 & Mobs, Xobs, Yobs, Zobs, obs_scale, &
118 integer,
intent(in) :: ng, Imin, Imax, Jmin, Jmax
119 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
120 integer,
intent(in) :: Mobs
122 real(r8),
intent(in) :: Xmin, Xmax, Ymin, Ymax
125 real(r8),
intent(in) :: obs_scale(:)
126 real(r8),
intent(in) :: Xobs(:)
127 real(r8),
intent(in) :: Yobs(:)
128 real(r8),
intent(in) :: Zobs(:)
129 real(r8),
intent(in) :: z(LBi:,LBj:,LBk:)
131 real(r8),
intent(out) :: obs_depths(:)
133 real(r8),
intent(in) :: obs_scale(Mobs)
134 real(r8),
intent(in) :: Xobs(Mobs)
135 real(r8),
intent(in) :: Yobs(Mobs)
136 real(r8),
intent(in) :: Zobs(Mobs)
137 real(r8),
intent(in) :: z(LBi:UBi,LBj:UBj,LBk:UBk)
139 real(r8),
intent(out) :: obs_depths(Mobs)
144 logical :: Linterpolate
146 integer :: i, ic, iobs, i1, i2, j1, j2, k, k1, k2
148 real(r8) :: Zbot, Ztop, dz, p1, p2, q1, q2, r1, r2
149 real(r8) :: w11, w12, w21, w22
151 real(r8),
dimension(8) :: Hmat
158 IF (((xmin.le.xobs(iobs)).and.(xobs(iobs).lt.xmax)).and. &
159 & ((ymin.le.yobs(iobs)).and.(yobs(iobs).lt.ymax)))
THEN
170 p2=real(i2-i1,r8)*(xobs(iobs)-real(i1,r8))
171 q2=real(j2-j1,r8)*(yobs(iobs)-real(j1,r8))
178 IF (zobs(iobs).gt.0.0_r8)
THEN
179 IF (abs(real(ubk,r8)-zobs(iobs)).lt.1.0e-8_r8)
THEN
181 obs_depths(iobs)=0.0_r8
184 k1=max(lbk,int(zobs(iobs)-0.5_r8))
186 r2=real(k2-k1,r8)*(zobs(iobs)-real(k1,r8))
191 obs_depths(iobs)=zobs(iobs)
193 IF (linterpolate)
THEN
194 IF ((r1+r2).gt.0.0_r8)
THEN
203 obs_depths(iobs)=hmat(1)*z(i1,j1,k1)+ &
204 & hmat(2)*z(i2,j1,k1)+ &
205 & hmat(3)*z(i2,j2,k1)+ &
206 & hmat(4)*z(i1,j2,k1)+ &
207 & hmat(5)*z(i1,j1,k2)+ &
208 & hmat(6)*z(i2,j1,k2)+ &
209 & hmat(7)*z(i2,j2,k2)+ &
210 & hmat(8)*z(i1,j2,k2)
subroutine obs_k2z(ng, imin, imax, jmin, jmax, lbi, ubi, lbj, ubj, lbk, ubk, xmin, xmax, ymin, ymax, mobs, xobs, yobs, zobs, obs_scale, z, obs_depths)