72 real(sp),
intent(in ),
dimension(0:mt,kb) :: f
74 real(sp),
intent(in ),
dimension(0:mt,kb) :: f0,f2
76 real(sp),
intent(out),
dimension(0:mt,kb) :: fn
77 integer ,
intent(in ) :: d_fdis
78 real(sp),
intent(in ),
dimension(d_fdis) :: fdis
79 integer ,
intent(in ) :: d_fflux
80 real(sp),
intent(out),
dimension(d_fflux,kbm1) :: fflux_obc
81 real(sp),
intent(in ) :: deltat
82 logical ,
intent(in ) :: source
85 real(sp),
dimension(0:mt,kb) :: xflux,xflux_adv
86 real(sp),
dimension(m) :: pupx,pupy,pvpx,pvpy
87 real(sp),
dimension(m) :: pfpx,pfpy,pfpxd,pfpyd,viscoff
88 real(sp),
dimension(3*nt,kb) :: dtij
89 real(sp),
dimension(3*nt,kbm1) :: uvn
90 real(sp),
dimension(kb) :: vflux
91 real(sp) :: utmp,vtmp,sitai,ffd,ff1,x11,y11,x22,y22,x33,y33
92 real(sp) :: tmp1,tmp2,xi,yi
93 real(sp) :: dxa,dya,dxb,dyb,fij1,fij2,un
94 real(sp) :: txx,tyy,fxx,fyy,viscof,exflux,temp,fpoint
95 real(sp) :: fact,fm1,fmean
96 integer :: i,i1,i2,ia,ib,j,j1,j2,k,jtmp,jj
98 real(sp),
dimension(kb) :: ftmp
138 dtij(i,k)=
dt1(i1)*
dz1(i1,k)
185 ffd=0.5_sp*(f(i,k)+f(i2,k))
186 ff1=0.5_sp*(f(i,k)+f(i2,k))
188 ffd=0.5_sp*(f(i1,k)+f(i,k))
189 ff1=0.5_sp*(f(i1,k)+f(i,k))
191 ffd=0.5_sp*(f(i,k)+f(i,k))
192 ff1=0.5_sp*(f(i,k)+f(i,k))
194 ffd=0.5_sp*(f(i1,k)+f(i2,k))
195 ff1=0.5_sp*(f(i1,k)+f(i2,k))
200 ffd=0.5_sp*((f0(i,k)+f(i,k))*0.5+(f0(i2,k)+f(i2,k))*0.5)
201 ff1=0.5_sp*((f0(i,k)+f(i,k))*0.5+(f0(i2,k)+f(i2,k))*0.5)
203 ffd=0.5_sp*((f0(i1,k)+f(i1,k))*0.5+(f0(i,k)+f(i,k))*0.5)
204 ff1=0.5_sp*((f0(i1,k)+f(i1,k))*0.5+(f0(i,k)+f(i,k))*0.5)
206 ffd=0.5_sp*((f0(i,k)+f(i,k))*0.5+(f0(i,k)+f(i,k))*0.5)
207 ff1=0.5_sp*((f0(i,k)+f(i,k))*0.5+(f0(i,k)+f(i,k))*0.5)
209 ffd=0.5_sp*((f0(i1,k)+f(i1,k))*0.5+(f0(i2,k)+f(i2,k))*0.5)
210 ff1=0.5_sp*((f0(i1,k)+f(i1,k))*0.5+(f0(i2,k)+f(i2,k))*0.5)
214 ffd=0.5_sp*((f2(i,k)+f0(i,k)+f(i,k))/3.0_sp+(f2(i2,k)+f0(i2,k)+f(i2,k))/3.0_sp)
215 ff1=0.5_sp*((f2(i,k)+f0(i,k)+f(i,k))/3.0_sp+(f2(i2,k)+f0(i2,k)+f(i2,k))/3.0_sp)
217 ffd=0.5_sp*((f2(i1,k)+f0(i1,k)+f(i1,k))/3.0_sp+(f2(i,k)+f0(i,k)+f(i,k))/3.0_sp)
218 ff1=0.5_sp*((f2(i1,k)+f0(i1,k)+f(i1,k))/3.0_sp+(f2(i,k)+f0(i,k)+f(i,k))/3.0_sp)
220 ffd=0.5_sp*((f2(i,k)+f0(i,k)+f(i,k))/3.0_sp+(f2(i,k)+f0(i,k)+f(i,k))/3.0_sp)
221 ff1=0.5_sp*((f2(i,k)+f0(i,k)+f(i,k))/3.0_sp+(f2(i,k)+f0(i,k)+f(i,k))/3.0_sp)
223 ffd=0.5_sp*((f2(i1,k)+f0(i1,k)+f(i1,k))/3.0_sp+(f2(i2,k)+f0(i2,k)+f(i2,k))/3.0_sp)
224 ff1=0.5_sp*((f2(i1,k)+f0(i1,k)+f(i1,k))/3.0_sp+(f2(i2,k)+f0(i2,k)+f(i2,k))/3.0_sp)
231 pfpx(i) = pfpx(i) +ff1*(
vy(i1)-
vy(i2))
232 pfpy(i) = pfpy(i) +ff1*(
vx(i2)-
vx(i1))
233 pfpxd(i)= pfpxd(i)+ffd*(
vy(i1)-
vy(i2))
234 pfpyd(i)= pfpyd(i)+ffd*(
vx(i2)-
vx(i1))
239 pfpx(i) =pfpx(i )/
art2(i)
240 pfpy(i) =pfpy(i )/
art2(i)
241 pfpxd(i) =pfpxd(i)/
art2(i)
242 pfpyd(i) =pfpyd(i)/
art2(i)
261 j1=jtmp+1-(jtmp+1)/4*3
262 j2=jtmp+2-(jtmp+2)/4*3
263 x11=0.5_sp*(
vx(i)+
vx(
nv(i1,j1)))
264 y11=0.5_sp*(
vy(i)+
vy(
nv(i1,j1)))
267 x33=0.5_sp*(
vx(i)+
vx(
nv(i1,j2)))
268 y33=0.5_sp*(
vy(i)+
vy(
nv(i1,j2)))
270 pupx(i)=pupx(i)+
u(i1,k)*(y11-y33)
271 pupy(i)=pupy(i)+
u(i1,k)*(x33-x11)
272 pvpx(i)=pvpx(i)+
v(i1,k)*(y11-y33)
273 pvpy(i)=pvpy(i)+
v(i1,k)*(x33-x11)
275 if(
isonb(i) /= 0)
then 276 pupx(i)=pupx(i)+
u(i1,k)*(
vy(i)-y11)
277 pupy(i)=pupy(i)+
u(i1,k)*(x11-
vx(i))
278 pvpx(i)=pvpx(i)+
v(i1,k)*(
vy(i)-y11)
279 pvpy(i)=pvpy(i)+
v(i1,k)*(x11-
vx(i))
285 j1=jtmp+1-(jtmp+1)/4*3
286 j2=jtmp+2-(jtmp+2)/4*3
287 x11=0.5_sp*(
vx(i)+
vx(
nv(i1,j1)))
288 y11=0.5_sp*(
vy(i)+
vy(
nv(i1,j1)))
291 x33=0.5_sp*(
vx(i)+
vx(
nv(i1,j2)))
292 y33=0.5_sp*(
vy(i)+
vy(
nv(i1,j2)))
294 pupx(i)=pupx(i)+
u(i1,k)*(y11-y33)
295 pupy(i)=pupy(i)+
u(i1,k)*(x33-x11)
296 pvpx(i)=pvpx(i)+
v(i1,k)*(y11-y33)
297 pvpy(i)=pvpy(i)+
v(i1,k)*(x33-x11)
302 j1=jtmp+1-(jtmp+1)/4*3
303 j2=jtmp+2-(jtmp+2)/4*3
304 x11=0.5_sp*(
vx(i)+
vx(
nv(i1,j1)))
305 y11=0.5_sp*(
vy(i)+
vy(
nv(i1,j1)))
308 x33=0.5_sp*(
vx(i)+
vx(
nv(i1,j2)))
309 y33=0.5_sp*(
vy(i)+
vy(
nv(i1,j2)))
311 pupx(i)=pupx(i)+
u(i1,k)*(y11-y33)
312 pupy(i)=pupy(i)+
u(i1,k)*(x33-x11)
313 pvpx(i)=pvpx(i)+
v(i1,k)*(y11-y33)
314 pvpy(i)=pvpy(i)+
v(i1,k)*(x33-x11)
316 if(
isonb(i) /= 0)
then 317 pupx(i)=pupx(i)+
u(i1,k)*(y11-
vy(i))
318 pupy(i)=pupy(i)+
u(i1,k)*(
vx(i)-x11)
319 pvpx(i)=pvpx(i)+
v(i1,k)*(y11-
vy(i))
320 pvpy(i)=pvpy(i)+
v(i1,k)*(
vx(i)-x11)
322 pupx(i)=pupx(i)/
art1(i)
323 pupy(i)=pupy(i)/
art1(i)
324 pvpx(i)=pvpx(i)/
art1(i)
325 pvpy(i)=pvpy(i)/
art1(i)
326 tmp1=pupx(i)**2+pvpy(i)**2
327 tmp2=0.5_sp*(pupy(i)+pvpx(i))**2
328 viscoff(i)=sqrt(tmp1+tmp2)*
art1(i)
349 fij1=f(ia,k)+dxa*pfpx(ia)+dya*pfpy(ia)
350 fij2=f(ib,k)+dxb*pfpx(ib)+dyb*pfpy(ib)
353 fij1=(f0(ia,k)+f(ia,k))*0.5+dxa*pfpx(ia)+dya*pfpy(ia)
354 fij2=(f0(ib,k)+f(ib,k))*0.5+dxb*pfpx(ib)+dyb*pfpy(ib)
356 fij1=(f2(ia,k)+f0(ia,k)+f(ia,k))/3.0_sp+dxa*pfpx(ia)+dya*pfpy(ia)
357 fij2=(f2(ib,k)+f0(ib,k)+f(ib,k))/3.0_sp+dxb*pfpx(ib)+dyb*pfpy(ib)
366 txx=0.5_sp*(pfpxd(ia)+pfpxd(ib))*viscof
367 tyy=0.5_sp*(pfpyd(ia)+pfpyd(ib))*viscof
369 fxx=-dtij(i,k)*txx*
dltye(i)
370 fyy= dtij(i,k)*tyy*
dltxe(i)
373 exflux=-
un*dtij(i,k)* &
374 ((1.0_sp+sign(1.0_sp,
un))*fij2+(1.0_sp-sign(1.0_sp,
un))*fij1)*0.5_sp+fxx+fyy
383 ds = 0.5_sp*(
dz(ia,k) +
dz(ib,k) )
386 call limit_hor_flux_scal(f(ia,k),f(ib,k),ia,ib,da,db,
ntrg(i),deltat,exflux)
391 xflux(ia,k)=xflux(ia,k)+exflux
392 xflux(ib,k)=xflux(ib,k)-exflux
394 xflux_adv(ia,k)=xflux_adv(ia,k)+(exflux-fxx-fyy)
395 xflux_adv(ib,k)=xflux_adv(ib,k)-(exflux-fxx-fyy)
412 fflux_obc(i,k)=xflux_adv(i1,k)
443 if(
isonb(i) == 2)
then 444 xflux(i,k)= vflux(k)*
art1(i)
448 xflux(i,k)=xflux(i,k)+ vflux(k)*
art1(i)
465 xflux(jj,k)=xflux(jj,k) -
qdis(j)*
vqdist(j,k)*fpoint
469 write(*,*)
'scalar advection not setup for "edge" point source' 487 fpoint = (f0(jj,k)+f(jj,k))*0.5
489 fpoint = (f2(jj,k)+f0(jj,k)+f(jj,k))/3.0_sp
493 xflux(jj,k)=xflux(jj,k) -
qdis(j)*
vqdist(j,k)*fpoint
497 write(*,*)
'scalar advection not setup for "edge" point source' 511 fn(i,k)=(f(i,k)-xflux(i,k)/
art1(i)*(deltat/(
dt(i)*
dz(i,k))))*(
dt(i)/
dtfa(i))
integer, dimension(:), allocatable, target ntsn
real(sp), dimension(:,:), allocatable, target yije
real(sp), dimension(:), allocatable, target dtfa
real(sp), dimension(:,:), allocatable, target v
real(sp), dimension(:,:), allocatable, target vqdist
real(sp), dimension(:), allocatable, target pfpxb
real(sp), dimension(:), allocatable, target art1
real(sp), dimension(:), allocatable, target qdis
real(sp), dimension(:), allocatable, target yc
real(sp), dimension(:,:), allocatable, target xije
real(sp), dimension(:), allocatable, target pfpyb
real(sp), dimension(:,:), allocatable un
real(sp), dimension(:), allocatable, target art2
integer, dimension(:), allocatable, target ntrg
logical backward_advection
real(sp), dimension(:,:), allocatable, target u
integer, dimension(:,:), allocatable, target niec
integer, dimension(:,:), allocatable, target nbvt
real(sp), dimension(:), allocatable, target vx
real(sp), dimension(:), allocatable, target dltye
real(sp), dimension(:), allocatable nn_hvc
real(sp), dimension(:), allocatable, target vy
integer, dimension(:), allocatable, target ntve
integer, dimension(:), allocatable i_obc_n
integer, dimension(:,:), allocatable, target nv
real(sp), dimension(:,:), allocatable, target dz
integer, dimension(:), allocatable iswetnt
integer, dimension(:,:), allocatable, target nbve
real(sp), dimension(:), allocatable, target dt1
real(sp), dimension(:), allocatable, target xc
real(sp), dimension(:,:), allocatable, target dz1
character(len=80) horizontal_mixing_type
integer, dimension(:,:), allocatable, target nbsn
real(sp), dimension(:,:), allocatable, target wts
character(len=80) river_ts_setting
real(sp), dimension(:), allocatable, target dltxe
character(len=80) river_inflow_location
integer, dimension(:), allocatable, target inodeq
integer, dimension(:), allocatable, target isonb
real(sp), dimension(:), allocatable, target dt
integer, dimension(:), allocatable iswetn