85 & LBi, UBi, LBj, UBj, &
86 & IminS, ImaxS, JminS, JmaxS, &
100 integer,
intent(in) :: ng, tile
101 integer,
intent(in) :: LBi, UBi, LBj, UBj
102 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
103 integer,
intent(in) :: nstp, nnew
106 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
107 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
108 real(r8),
intent(inout) :: settling_flux(LBi:,LBj:,:)
109 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
111 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
112 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
113 real(r8),
intent(inout) :: settling_flux(LBi:UBi,LBj:UBj,NST)
114 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
119 integer :: i, indx, ised, j, k, ks
121 real(r8) :: cff, cu, cffL, cffR, dltL, dltR
123 integer,
dimension(IminS:ImaxS,N(ng)) :: ksource
125 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
127 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv
128 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv2
129 real(r8),
dimension(IminS:ImaxS,N(ng)) :: Hz_inv3
130 real(r8),
dimension(IminS:ImaxS,N(ng)) :: qc
131 real(r8),
dimension(IminS:ImaxS,N(ng)) :: qR
132 real(r8),
dimension(IminS:ImaxS,N(ng)) :: qL
133 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WR
134 real(r8),
dimension(IminS:ImaxS,N(ng)) :: WL
136# include "set_bounds.h"
144 j_loop :
DO j=jstr,jend
147 hz_inv(i,k)=1.0_r8/hz(i,j,k)
152 hz_inv2(i,k)=1.0_r8/(hz(i,j,k)+hz(i,j,k+1))
157 hz_inv3(i,k)=1.0_r8/(hz(i,j,k-1)+hz(i,j,k)+hz(i,j,k+1))
166 sed_loop:
DO ised=1,nst
170 qc(i,k)=t(i,j,k,nnew,indx)*hz_inv(i,k)
184 fc(i,k)=(qc(i,k+1)-qc(i,k))*hz_inv2(i,k)
189 dltr=hz(i,j,k)*fc(i,k)
190 dltl=hz(i,j,k)*fc(i,k-1)
191 cff=hz(i,j,k-1)+2.0_r8*hz(i,j,k)+hz(i,j,k+1)
198 IF ((dltr*dltl).le.0.0_r8)
THEN
201 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
203 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
216 cff=(dltr-dltl)*hz_inv3(i,k)
217 dltr=dltr-cff*hz(i,j,k+1)
218 dltl=dltl+cff*hz(i,j,k-1)
221 wr(i,k)=(2.0_r8*dltr-dltl)**2
222 wl(i,k)=(dltr-2.0_r8*dltl)**2
228 dltl=max(cff,wl(i,k ))
229 dltr=max(cff,wr(i,k+1))
230 qr(i,k)=(dltr*qr(i,k)+dltl*ql(i,k+1))/(dltr+dltl)
236# if defined LINEAR_CONTINUATION
237 ql(i,n(ng))=qr(i,n(ng)-1)
238 qr(i,n(ng))=2.0_r8*qc(i,n(ng))-ql(i,n(ng))
239# elif defined NEUMANN
240 ql(i,n(ng))=qr(i,n(ng)-1)
241 qr(i,n(ng))=1.5_r8*qc(i,n(ng))-0.5_r8*ql(i,n(ng))
243 qr(i,n(ng))=qc(i,n(ng))
244 ql(i,n(ng))=qc(i,n(ng))
245 qr(i,n(ng)-1)=qc(i,n(ng))
247# if defined LINEAR_CONTINUATION
249 ql(i,1)=2.0_r8*qc(i,1)-qr(i,1)
250# elif defined NEUMANN
252 ql(i,1)=1.5_r8*qc(i,1)-0.5_r8*qr(i,1)
270 IF ((dltr*dltl).lt.0.0_r8)
THEN
273 ELSE IF (abs(dltr).gt.abs(cffl))
THEN
275 ELSE IF (abs(dltl).gt.abs(cffr))
THEN
297 cff=
dt(ng)*abs(
wsed(ised,ng))
301 wl(i,k)=z_w(i,j,k-1)+cff
302 wr(i,k)=hz(i,j,k)*qc(i,k)
309 IF (wl(i,k).gt.z_w(i,j,ks))
THEN
311 fc(i,k-1)=fc(i,k-1)+wr(i,ks)
322 cu=min(1.0_r8,(wl(i,k)-z_w(i,j,ks-1))*hz_inv(i,ks))
323 fc(i,k-1)=fc(i,k-1)+ &
326 & cu*(0.5_r8*(qr(i,ks)-ql(i,ks))- &
328 & (qr(i,ks)+ql(i,ks)-2.0_r8*qc(i,ks))))
333 t(i,j,k,nnew,indx)=qc(i,k)*hz(i,j,k)+(fc(i,k)-fc(i,k-1))
335 settling_flux(i,j,ised)=fc(i,0)