97 & LBi, UBi, LBj, UBj, &
98 & IminS, ImaxS, JminS, JmaxS, &
99# if defined SEDIMENT && defined SED_MORPH
104# ifdef OMEGA_IMPLICIT
111# ifdef OMEGA_IMPLICIT
128 integer,
intent(in) :: ng, tile, model
129 integer,
intent(in) :: LBi, UBi, LBj, UBj
130 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
131# if defined SEDIMENT && defined SED_MORPH
132 integer,
intent(in) :: nstp, nnew
136# if defined SEDIMENT && defined SED_MORPH
137 real(r8),
intent(in) :: omn(LBi:,LBj:)
138 real(r8),
intent(in) :: bed_thick(LBi:,LBj:,:)
140 real(r8),
intent(in) :: Huon(LBi:,LBj:,:)
141 real(r8),
intent(in) :: Hvom(LBi:,LBj:,:)
142# ifdef OMEGA_IMPLICIT
143 real(r8),
intent(in) :: pm(LBi:,LBj:)
144 real(r8),
intent(in) :: pn(LBi:,LBj:)
146 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
148 real(r8),
intent(in) :: W_stokes(LBi:,LBj:,0:)
150# ifdef OMEGA_IMPLICIT
151 real(r8),
intent(out) :: Wi(LBi:,LBj:,0:)
153 real(r8),
intent(out) :: W(LBi:,LBj:,0:)
157# if defined SEDIMENT && defined SED_MORPH
158 real(r8),
intent(in) :: omn(LBi:UBi,LBj:UBj)
159 real(r8),
intent(in) :: bed_thick(LBi:UBi,LBj:UBj,3)
161 real(r8),
intent(in) :: Huon(LBi:UBi,LBj:UBj,N(ng))
162 real(r8),
intent(in) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
163# ifdef OMEGA_IMPLICIT
164 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
165 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
167 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
169 real(r8),
intent(in) :: W_stokes(LBi:UBi,LBj:UBj,0:N(ng))
171# ifdef OMEGA_IMPLICIT
172 real(r8),
intent(out) :: Wi(LBi:UBi,LBj:UBj,0:N(ng))
174 real(r8),
intent(out) :: W(LBi:UBi,LBj:UBj,0:N(ng))
179 integer :: i, ii, is, j, jj, k
180# if defined SEDIMENT && defined SED_MORPH
183 real(r8),
dimension(IminS:ImaxS) :: wrk
184# ifdef OMEGA_IMPLICIT
185 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: Cu_adv
187 real(r8) :: cw, c2d, dh, cw_max, cw_max2, cw_min
189 real(r8),
parameter :: amax = 0.75_r8
190 real(r8),
parameter :: amin = 0.60_r8
191 real(r8),
parameter :: cmnx_ratio = amin/amax
192 real(r8),
parameter :: cutoff = 2.0_r8-amin/amax
193 real(r8),
parameter :: r4cmx = 1.0_r8/(4.0_r8-4.0_r8*amin/amax)
196# include "set_bounds.h"
207# if defined SEDIMENT && defined SED_MORPH
212 cff1=1.0_r8/(
dt(ng)*n(ng))
218# if defined SEDIMENT && defined SED_MORPH
219 wrk(i)=cff1*(bed_thick(i,j,nstp)- &
220 & bed_thick(i,j,nnew))*omn(i,j)
225 w(i,j,k)=w(i,j,k-1)- &
226# if defined SEDIMENT && defined SED_MORPH
229 & (huon(i+1,j,k)-huon(i,j,k)+ &
230 & hvom(i,j+1,k)-hvom(i,j,k))
232# ifdef OMEGA_IMPLICIT
236 cu_adv(i,k)=max(huon(i+1,j ,k),0.0_r8)- &
237 & min(huon(i ,j ,k),0.0_r8)+ &
238 & max(hvom(i ,j+1,k),0.0_r8)- &
239 & min(hvom(i ,j ,k),0.0_r8)
255 IF (int(
sources(ng)%Dsrc(is)).eq.2)
THEN
258 IF (((istrr.le.ii).and.(ii.le.iendr)).and. &
259 & ((jstrr.le.jj).and.(jj.le.jendr)).and. &
261# if defined SEDIMENT && defined SED_MORPH
262 wrk(ii)=cff1*(bed_thick(ii,jj,nstp)- &
263 & bed_thick(ii,jj,nnew))*omn(ii,jj)
266 w(ii,jj,k)=w(ii,jj,k-1)- &
267# if defined SEDIMENT && defined SED_MORPH
270 & (huon(ii+1,jj,k)-huon(ii,jj,k)+ &
271 & hvom(ii,jj+1,k)-hvom(ii,jj,k))+ &
280 wrk(i)=w(i,j,n(ng))/(z_w(i,j,n(ng))-z_w(i,j,0))
281# ifdef OMEGA_IMPLICIT
282 cu_adv(i,0)=
dt(ng)*pm(i,j)*pn(i,j)
299 & wrk(i)*(z_w(i,j,k)-z_w(i,j,0))
301# ifdef OMEGA_IMPLICIT
307 IF (wi(i,j,k).ge.0.0_r8)
THEN
309 dh=z_w(i,j,k)-z_w(i,j,k-1)
312 dh=z_w(i,j,k+1)-z_w(i,j,k)
325 cw_max=amax*dh-c2d*cu_adv(i,0)
326 IF (cw_max.ge.0.0_r8)
THEN
327 cw_max2=cw_max*cw_max
328 cw_min=cw_max*cmnx_ratio
329 cw=abs(wi(i,j,k))*cu_adv(i,0)
330 IF (cw.le.cw_min)
THEN
332 ELSE IF (cw.le.cutoff*cw_max)
THEN
333 cff=cw_max2+r4cmx*(cw-cw_min)**2
338 w(i,j,k)=cw_max2*wi(i,j,k)/cff
339 wi(i,j,k)=wi(i,j,k)-w(i,j,k)
354 & lbi, ubi, lbj, ubj, 0, n(ng), &
356# ifdef OMEGA_IMPLICIT
358 & lbi, ubi, lbj, ubj, 0, n(ng), &
363 & lbi, ubi, lbj, ubj, 0, n(ng), &
367# ifdef OMEGA_IMPLICIT
369 & lbi, ubi, lbj, ubj, 0, n(ng), &