137 & LBi, UBi, LBj, UBj, &
138 & IminS, ImaxS, JminS, JmaxS, &
139 & kstp, krhs, knew, &
144 & rmask, umask, vmask, &
147 & rmask_wet, umask_wet, vmask_wet, &
149# ifdef PERFECT_RESTART
153 & rubar, rvbar, rzeta, &
156# if defined SEDIMENT || defined BBL_MODEL
160 & bed, bed_frac, bed_mass, &
170 integer,
intent(in) :: ng, tile, model
171 integer,
intent(in) :: LBi, UBi, LBj, UBj
172 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
173 integer,
intent(in) :: kstp, krhs, knew
175 integer,
intent(in) :: nstp, nnew
180 real(r8),
intent(in) :: rmask(LBi:,LBj:)
181 real(r8),
intent(in) :: umask(LBi:,LBj:)
182 real(r8),
intent(in) :: vmask(LBi:,LBj:)
185 real(r8),
intent(in) :: rmask_wet(LBi:,LBj:)
186 real(r8),
intent(inout) :: umask_wet(LBi:,LBj:)
187 real(r8),
intent(inout) :: vmask_wet(LBi:,LBj:)
190 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
192 real(r8),
intent(in) :: zeta(LBi:,LBj:,:)
194# if defined SEDIMENT || defined BBL_MODEL
195 real(r8),
intent(inout) :: bottom(LBi:,LBj:,:)
198 real(r8),
intent(inout) :: bed(LBi:,LBj:,:,:)
199 real(r8),
intent(inout) :: bed_frac(LBi:,LBj:,:,:)
200 real(r8),
intent(inout) :: bed_mass(LBi:,LBj:,:,:,:)
203# ifdef PERFECT_RESTART
205 real(r8),
intent(inout) :: ru(LBi:,LBj:,0:,:)
206 real(r8),
intent(inout) :: rv(LBi:,LBj:,0:,:)
208 real(r8),
intent(inout) :: rubar(LBi:,LBj:,:)
209 real(r8),
intent(inout) :: rvbar(LBi:,LBj:,:)
210 real(r8),
intent(inout) :: rzeta(LBi:,LBj:,:)
213 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
214 real(r8),
intent(inout) :: u(LBi:,LBj:,:,:)
215 real(r8),
intent(inout) :: v(LBi:,LBj:,:,:)
217 real(r8),
intent(inout) :: ubar(LBi:,LBj:,:)
218 real(r8),
intent(inout) :: vbar(LBi:,LBj:,:)
223 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
224 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
225 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
228 real(r8),
intent(in) :: rmask_wet(LBi:UBi,LBj:UBj)
229 real(r8),
intent(inout) :: umask_wet(LBi:UBi,LBj:UBj)
230 real(r8),
intent(inout) :: vmask_wet(LBi:UBi,LBj:UBj)
233 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
235 real(r8),
intent(in) :: zeta(LBi:UBi,LBj:UBj,:)
237# if defined SEDIMENT || defined BBL_MODEL
238 real(r8),
intent(inout) :: bottom(LBi:UBi,LBj:UBj,MBOTP)
241 real(r8),
intent(inout) :: bed(LBi:UBi,LBj:UBj,Nbed,MBEDP)
242 real(r8),
intent(inout) :: bed_frac(LBi:UBi,LBj:UBj,Nbed,NST)
243 real(r8),
intent(inout) :: bed_mass(LBi:UBi,LBj:UBj,Nbed,2,NST)
246# ifdef PERFECT_RESTART
248 real(r8),
intent(inout) :: ru(LBi:UBi,LBj:UBj,0:N(ng),2)
249 real(r8),
intent(inout) :: rv(LBi:UBi,LBj:UBj,0:N(ng),2)
251 real(r8),
intent(inout) :: rubar(LBi:UBi,LBj:UBj,2)
252 real(r8),
intent(inout) :: rvbar(LBi:UBi,LBj:UBj,2)
253 real(r8),
intent(inout) :: rzeta(LBi:UBi,LBj:UBj,2)
256 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
257 real(r8),
intent(inout) :: u(LBi:UBi,LBj:UBj,N(ng),2)
258 real(r8),
intent(inout) :: v(LBi:UBi,LBj:UBj,N(ng),2)
260 real(r8),
intent(inout) :: ubar(LBi:UBi,LBj:UBj,:)
261 real(r8),
intent(inout) :: vbar(LBi:UBi,LBj:UBj,:)
266 integer :: i, ic, itrc, j, k
267# if defined SEDIMENT || defined BBL_MODEL
271 real(r8) :: cff1, cff2
273 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: CF
274 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: DC
277# include "set_bounds.h"
294 cff1=cff1*umask_wet(i,j)
308 cff2=cff2*vmask_wet(i,j)
319 & lbi, ubi, lbj, ubj, n(ng), &
320 & imins, imaxs, jmins, jmaxs, &
324 & lbi, ubi, lbj, ubj, n(ng), &
325 & imins, imaxs, jmins, jmaxs, &
332 & lbi, ubi, lbj, ubj, 1, n(ng), &
335 & lbi, ubi, lbj, ubj, 1, n(ng), &
342 & lbi, ubi, lbj, ubj, 1, n(ng), &
345 & u(:,:,:,nstp), v(:,:,:,nstp))
367 dc(i,k)=0.5_r8*(hz(i,j,k)+hz(i-1,j,k))
368 dc(i,0)=dc(i,0)+dc(i,k)
369 cf(i,0)=cf(i,0)+dc(i,k)*u(i,j,k,nstp)
379 cff2=cff2*umask_wet(i,j)
391 dc(i,k)=0.5_r8*(hz(i,j,k)+hz(i,j-1,k))
392 dc(i,0)=dc(i,0)+dc(i,k)
393 cf(i,0)=cf(i,0)+dc(i,k)*v(i,j,k,nstp)
403 cff2=cff2*vmask_wet(i,j)
412 IF (.not.(any(
lbc(:,
isubar,ng)%radiation).or. &
417 & lbi, ubi, lbj, ubj, &
418 & imins, imaxs, jmins, jmaxs, &
419 & krhs, kstp, kstp, &
422 & lbi, ubi, lbj, ubj, &
423 & imins, imaxs, jmins, jmaxs, &
424 & krhs, kstp, kstp, &
431 & lbi, ubi, lbj, ubj, &
434 & lbi, ubi, lbj, ubj, &
441 & lbi, ubi, lbj, ubj, &
444 & ubar(:,:,kstp), vbar(:,:,kstp))
462 cff1=cff1*umask_wet(i,j)
474 cff2=cff2*vmask_wet(i,j)
483 IF (.not.(any(
lbc(:,
isubar,ng)%radiation).or. &
488 & lbi, ubi, lbj, ubj, &
489 & imins, imaxs, jmins, jmaxs, &
490 & krhs, kstp, kstp, &
493 & lbi, ubi, lbj, ubj, &
494 & imins, imaxs, jmins, jmaxs, &
495 & krhs, kstp, kstp, &
502 & lbi, ubi, lbj, ubj, &
505 & lbi, ubi, lbj, ubj, &
509 & lbi, ubi, lbj, ubj, &
512 & lbi, ubi, lbj, ubj, &
520 & lbi, ubi, lbj, ubj, &
523 & ubar(:,:,kstp), vbar(:,:,kstp))
526 & lbi, ubi, lbj, ubj, &
529 & ubar(:,:,knew), vbar(:,:,knew))
549 cff1=t(i,j,k,nstp,itrc)
553 t(i,j,k,nstp,itrc)=cff1
561 & lbi, ubi, lbj, ubj, n(ng), nt(ng), &
562 & imins, imaxs, jmins, jmaxs, &
571 & lbi, ubi, lbj, ubj, 1, n(ng), &
572 & t(:,:,:,nstp,itrc))
579 & lbi, ubi, lbj, ubj, 1, n(ng), 1, nt(ng), &
585# if defined BBL_MODEL || defined SEDIMENT
597 cff1=bed_mass(i,j,k,1,ised)
598 bed_mass(i,j,k,2,ised)=cff1
610 & lbi, ubi, lbj, ubj, 1, nbed, &
611 & bed_frac(:,:,:,ised))
613 & lbi, ubi, lbj, ubj, 1, nbed, &
614 & bed_mass(:,:,:,1,ised))
616 & lbi, ubi, lbj, ubj, 1, nbed, &
617 & bed_mass(:,:,:,2,ised))
621 & lbi, ubi, lbj, ubj, 1, nbed, &
626 & lbi, ubi, lbj, ubj, 1, mbotp, &
633 & lbi, ubi, lbj, ubj, 1, nbed, 1, nst, &
638 & lbi, ubi, lbj, ubj, 1, nbed, 1, nst, &
641 & bed_mass(:,:,:,1,:),bed_mass(:,:,:,2,:))
643 & lbi, ubi, lbj, ubj, 1, nbed, 1, mbedp, &
649 & lbi, ubi, lbj, ubj, 1, mbotp, &
657# ifdef PERFECT_RESTART
668 & lbi, ubi, lbj, ubj, &
671 & lbi, ubi, lbj, ubj, &
674 & lbi, ubi, lbj, ubj, &
678 & lbi, ubi, lbj, ubj, 0, n(ng), &
681 & lbi, ubi, lbj, ubj, 0, n(ng), &
689 & lbi, ubi, lbj, ubj, 1, 2, &
692 & rubar, rvbar, rzeta)
695 & lbi, ubi, lbj, ubj, 0, n(ng), 1, 2, &
755 & LBi, UBi, LBj, UBj, &
756 & IminS, ImaxS, JminS, JmaxS, &
757 & kstp, krhs, knew, &
766# if defined SEDIMENT && defined SED_MORPH
767 & bed, bed_thick0, bed_thick, &
775 integer,
intent(in) :: ng, tile, model
776 integer,
intent(in) :: LBi, UBi, LBj, UBj
777 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
778 integer,
intent(in) :: kstp, krhs, knew
782 real(r8),
intent(in) :: rmask(LBi:,LBj:)
785 real(r8),
intent(in) :: h(LBi:,LBj:)
787# if defined SOLVE3D && defined SEDIMENT && defined SED_MORPH
788 real(r8),
intent(in) :: bed(LBi:,LBj:,:,:)
789 real(r8),
intent(inout) :: bed_thick0(LBi:,LBj:)
790 real(r8),
intent(inout) :: bed_thick(LBi:,LBj:,:)
793 real(r8),
intent(inout) :: rmask_wet(LBi:,LBj:)
795 real(r8),
intent(inout) :: zeta(LBi:,LBj:,:)
800 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
803 real(r8),
intent(in) :: h(LBi:UBi,LBj:UBj)
805# if defined SOLVE3D && defined SEDIMENT && defined SED_MORPH
806 real(r8),
intent(in) :: bed(LBi:UBi,LBj:UBj,Nbed,MBEDP)
807 real(r8),
intent(inout) :: bed_thick0(LBi:UBi,LBj:UBj)
808 real(r8),
intent(inout) :: bed_thick(LBi:UBi,LBj:UBj,3)
811 real(r8),
intent(inout) :: rmask_wet(LBi:UBi,LBj:UBj)
813 real(r8),
intent(inout) :: zeta(LBi:UBi,LBj:UBj,:)
818 integer :: Imin, Imax, Jmin, Jmax
819 integer :: i, j, kbed
823# include "set_bounds.h"
830 IF (.not.(any(
lbc(:,
isfsur,ng)%radiation).or. &
831 & any(
lbc(:,
isfsur,ng)%Chapman_explicit).or. &
832 & any(
lbc(:,
isfsur,ng)%Chapman_implicit)))
THEN
850 IF (cff1.le.(
dcrit(ng)-h(i,j)))
THEN
851 cff1=
dcrit(ng)-h(i,j)
863 IF (.not.(any(
lbc(:,
isfsur,ng)%radiation).or. &
864 & any(
lbc(:,
isfsur,ng)%Chapman_explicit).or. &
865 & any(
lbc(:,
isfsur,ng)%Chapman_implicit)))
THEN
867 & lbi, ubi, lbj, ubj, &
868 & imins, imaxs, jmins, jmaxs, &
869 & krhs, kstp, kstp, &
876 & lbi, ubi, lbj, ubj, &
881 & lbi, ubi, lbj, ubj, &
885 & lbi, ubi, lbj, ubj, &
892 & lbi, ubi, lbj, ubj, &
899 & lbi, ubi, lbj, ubj, &
906 & lbi, ubi, lbj, ubj, &
912 & lbi, ubi, lbj, ubj, &
921 & lbi, ubi, lbj, ubj, &
937# if defined SEDIMENT && defined SED_MORPH
945 bed_thick0(i,j)=0.0_r8
947 bed_thick0(i,j)=bed_thick0(i,j)+bed(i,j,kbed,
ithck)
949 bed_thick(i,j,1)=bed_thick0(i,j)
950 bed_thick(i,j,2)=bed_thick0(i,j)
956 & lbi, ubi, lbj, ubj, &
959 & lbi, ubi, lbj, ubj, &
962 & lbi, ubi, lbj, ubj, &
968 & lbi, ubi, lbj, ubj, &
972 & bed_thick(:,:,1), bed_thick(:,:,2))