107 DENS_t, MOMZ_t, RHOT_t, & ! (out)
109 prog_vars, prog_vars0, &
110 ddens00, momx00, momy00, momz00, drhot00, &
111 dens_hyd, pres_hyd, &
112 rtot, cptot_ov_cvtot, &
114 gnnm, g13, g23, gsqrtv, &
124 real(rp),
intent(out) :: dens_t(elem%np,lmesh%nea)
125 real(rp),
intent(out) :: momz_t(elem%np,lmesh%nea)
126 real(rp),
intent(out) :: rhot_t(elem%np,lmesh%nea)
127 real(rp),
intent(in) :: alph(elem%nfptot,lmesh%nez,lmesh%nex*lmesh%ney)
128 real(rp),
intent(in) :: prog_vars (elem%np,lmesh%nez,
prgvar_num,lmesh%nex*lmesh%ney)
129 real(rp),
intent(in) :: prog_vars0 (elem%np,lmesh%nez,
prgvar_num,lmesh%nex*lmesh%ney)
130 real(rp),
intent(in) :: ddens00(elem%np,lmesh%nea)
131 real(rp),
intent(in) :: momx00 (elem%np,lmesh%nea)
132 real(rp),
intent(in) :: momy00 (elem%np,lmesh%nea)
133 real(rp),
intent(in) :: momz00 (elem%np,lmesh%nea)
134 real(rp),
intent(in) :: drhot00(elem%np,lmesh%nea)
135 real(rp),
intent(in) :: dens_hyd(elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
136 real(rp),
intent(in) :: pres_hyd(elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
137 real(rp),
intent(in) :: rtot(elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
138 real(rp),
intent(in) :: cptot_ov_cvtot(elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
141 real(rp),
intent(in) :: gnnm(elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
142 real(rp),
intent(in) :: g13 (elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
143 real(rp),
intent(in) :: g23 (elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
144 real(rp),
intent(in) :: gsqrtv(elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
145 real(rp),
intent(in) :: impl_fac
146 real(rp),
intent(in) :: dt
147 real(rp),
intent(in) :: nz(elem%nfptot,lmesh%nez,lmesh%nex*lmesh%ney)
148 integer,
intent(in) :: vmapm(elem%nfptot,lmesh%nez)
149 integer,
intent(in) :: vmapp(elem%nfptot,lmesh%nez)
150 real(rp),
intent(out),
optional :: b1d_ij(3,elem%nnode_v,lmesh%nez,elem%nnode_h1d**2,lmesh%nex*lmesh%ney)
152 real(rp) :: rgsqrtv(elem%np)
153 real(rp) :: fscale(elem%nfptot), escale33(elem%np)
154 real(rp) :: fz(elem%np), liftdelflx(elem%np)
155 real(rp) :: del_flux(elem%nfptot,lmesh%nez,lmesh%nex*lmesh%ney,
prgvar_num)
156 real(rp) :: momz(elem%np), ddens(elem%np), dpres(elem%np), rhot(elem%np)
157 real(rp) :: momw(elem%np)
158 integer :: ke_xy, ke_z
162 integer :: colmask(elem%nnode_v)
164 real(rp) :: drho(elem%np)
166 integer :: kk, kkk, p, pp
169 real(rp) :: gamm, rgamm, rp0
175 rp0 = 1.0_rp / pres00
177 call vi_cal_del_flux_dyn( del_flux, &
179 prog_vars, prog_vars0, &
180 dens_hyd, pres_hyd, &
181 rtot, cptot_ov_cvtot, &
182 gnnm, g13, g23, gsqrtv, nz, vmapm, vmapp, &
191 do ke_xy=1, lmesh%NeX*lmesh%NeY
193 ke = ke_xy + (ke_z-1)*lmesh%NeX*lmesh%NeY
194 ke2d = lmesh%EMap3Dto2D(ke)
196 ddens(:) = prog_vars(:,ke_z,dens_vid,ke_xy)
199 momz(:) = prog_vars(:,ke_z,momz_vid,ke_xy)
201 rhot(:) = pres00/rdry * (pres_hyd(:,ke_z,ke_xy)/pres00)**rgamm &
202 + prog_vars(:,ke_z,rhot_vid,ke_xy)
203 dpres(:) = pres00 * ( rtot(:,ke_z,ke_xy) * rp0 * rhot(:) )**cptot_ov_cvtot(:,ke_z,ke_xy) &
204 - pres_hyd(:,ke_z,ke_xy)
206 rgsqrtv(:) = 1.0_rp / gsqrtv(:,ke_z,ke_xy)
207 fscale(:) = lmesh%Fscale(:,ke)
208 escale33(:) = lmesh%Escale(:,ke,3,3)
211 + gsqrtv(:,ke_z,ke_xy) * g13(:,ke_z,ke_xy) * prog_vars(:,ke_z,momx_vid,ke_xy) &
212 + gsqrtv(:,ke_z,ke_xy) * g23(:,ke_z,ke_xy) * prog_vars(:,ke_z,momy_vid,ke_xy)
216 call sparsemat_matmul(lift, fscale(:) * del_flux(:,ke_z,ke_xy,dens_vid), liftdelflx)
217 dens_t(:,ke) = - ( escale33(:) * fz(:) + liftdelflx(:) ) * rgsqrtv(:)
222 call sparsemat_matmul(lift, fscale(:) * del_flux(:,ke_z,ke_xy,momz_vid), liftdelflx)
223 momz_t(:,ke) = - ( escale33(:) * fz(:) + liftdelflx(:) ) * rgsqrtv(:) &
227 call sparsemat_matmul(dz, rhot(:) * momw(:) / ( dens_hyd(:,ke_z,ke_xy) + ddens(:) ), fz)
228 call sparsemat_matmul(lift, fscale(:) * del_flux(:,ke_z,ke_xy,rhot_vid), liftdelflx)
229 rhot_t(:,ke) = - ( escale33(:) * fz(:) + liftdelflx(:) ) * rgsqrtv(:)
235 if (
present( b1d_ij ) )
then
237 do ke_xy=1, lmesh%NeX*lmesh%NeY
239 ke = ke_xy + (ke_z-1)*lmesh%NeX*lmesh%NeY
241 do ij=1, elem%Nnode_h1D**2
242 colmask(:) = elem%Colmask(:,ij)
243 b1d_ij(1,:,ke_z,ij,ke_xy) = impl_fac * dens_t(colmask(:),ke) &
244 - prog_vars(colmask(:),ke_z,dens_vid,ke_xy) &
245 + ddens00(colmask(:),ke)
246 b1d_ij(2,:,ke_z,ij,ke_xy) = impl_fac * momz_t(colmask(:),ke) &
247 - prog_vars(colmask(:),ke_z,momz_vid,ke_xy) &
248 + momz00(colmask(:),ke)
249 b1d_ij(3,:,ke_z,ij,ke_xy) = impl_fac * rhot_t(colmask(:),ke) &
250 - prog_vars(colmask(:),ke_z,rhot_vid,ke_xy) &
251 + drhot00(colmask(:),ke)
264 MOMX_t, MOMY_t, & ! (out)
266 prog_vars, prog_vars0, &
267 ddens00, momx00, momy00, momz00, drhot00, &
268 dens_hyd, pres_hyd, &
269 rtot, cptot_ov_cvtot, &
271 gnnm, g13, g23, gsqrtv, &
281 real(rp),
intent(out) :: momx_t(elem%np,lmesh%nea)
282 real(rp),
intent(out) :: momy_t(elem%np,lmesh%nea)
283 real(rp),
intent(out) :: alph(elem%nfptot,lmesh%nez,lmesh%nex*lmesh%ney)
284 real(rp),
intent(in) :: prog_vars (elem%np,lmesh%nez,
prgvar_num,lmesh%nex*lmesh%ney)
285 real(rp),
intent(in) :: prog_vars0 (elem%np,lmesh%nez,
prgvar_num,lmesh%nex*lmesh%ney)
286 real(rp),
intent(in) :: ddens00(elem%np,lmesh%nea)
287 real(rp),
intent(in) :: momx00 (elem%np,lmesh%nea)
288 real(rp),
intent(in) :: momy00 (elem%np,lmesh%nea)
289 real(rp),
intent(in) :: momz00 (elem%np,lmesh%nea)
290 real(rp),
intent(in) :: drhot00(elem%np,lmesh%nea)
291 real(rp),
intent(in) :: dens_hyd(elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
292 real(rp),
intent(in) :: pres_hyd(elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
293 real(rp),
intent(in) :: rtot(elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
294 real(rp),
intent(in) :: cptot_ov_cvtot(elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
297 real(rp),
intent(in) :: gnnm(elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
298 real(rp),
intent(in) :: g13 (elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
299 real(rp),
intent(in) :: g23 (elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
300 real(rp),
intent(in) :: gsqrtv(elem%np,lmesh%nez,lmesh%nex*lmesh%ney)
301 real(rp),
intent(in) :: impl_fac
302 real(rp),
intent(in) :: dt
303 real(rp),
intent(in) :: nz(elem%nfptot,lmesh%nez,lmesh%nex*lmesh%ney)
304 integer,
intent(in) :: vmapm(elem%nfptot,lmesh%nez)
305 integer,
intent(in) :: vmapp(elem%nfptot,lmesh%nez)
306 real(rp),
intent(out),
optional :: b1d_ij_uv(elem%nnode_v,lmesh%nez,2,elem%nnode_h1d**2,lmesh%nex*lmesh%ney)
308 real(rp) :: rgsqrtv(elem%np)
309 real(rp) :: fscale(elem%nfptot), escale33(elem%np)
310 real(rp) :: fz(elem%np), liftdelflx(elem%np)
311 real(rp) :: del_flux(elem%nfptot,lmesh%nez,lmesh%nex*lmesh%ney,
prgvar_num)
312 integer :: ke_xy, ke_z
316 integer :: colmask(elem%nnode_v)
318 integer :: kk, kkk, p, pp
321 call vi_cal_del_flux_dyn_uv( del_flux, alph, &
322 prog_vars, prog_vars0, &
323 dens_hyd, pres_hyd, &
324 rtot, cptot_ov_cvtot, &
325 gnnm, g13, g23, gsqrtv, nz, vmapm, vmapp, &
333 do ke_xy=1, lmesh%NeX*lmesh%NeY
335 ke = ke_xy + (ke_z-1)*lmesh%NeX*lmesh%NeY
337 rgsqrtv(:) = 1.0_rp / gsqrtv(:,ke_z,ke_xy)
338 fscale(:) = lmesh%Fscale(:,ke)
341 call sparsemat_matmul(lift, fscale(:) * del_flux(:,ke_z,ke_xy,momx_vid), liftdelflx)
342 momx_t(:,ke) = - liftdelflx(:) * rgsqrtv(:)
345 call sparsemat_matmul(lift, fscale(:) * del_flux(:,ke_z,ke_xy,momy_vid), liftdelflx)
346 momy_t(:,ke) = - liftdelflx(:) * rgsqrtv(:)
351 if (
present( b1d_ij_uv ) )
then
353 do ke_xy=1, lmesh%NeX*lmesh%NeY
355 ke = ke_xy + (ke_z-1)*lmesh%NeX*lmesh%NeY
357 do ij=1, elem%Nnode_h1D**2
358 colmask(:) = elem%Colmask(:,ij)
359 b1d_ij_uv(:,ke_z,1,ij,ke_xy) = impl_fac * momx_t(colmask(:),ke) &
360 - prog_vars(colmask(:),ke_z,momx_vid,ke_xy) &
361 + momx00(colmask(:),ke)
362 b1d_ij_uv(:,ke_z,2,ij,ke_xy) = impl_fac * momy_t(colmask(:),ke) &
363 - prog_vars(colmask(:),ke_z,momy_vid,ke_xy) &
364 + momy00(colmask(:),ke)
379 prog_vars0, dens_hyd, pres_hyd, &
380 g13, g23, gsqrtv, alph, &
381 rtot, cptot_ov_cvtot, &
385 nz, vmapm, vmapp, ke_x, ke_y )
391 integer,
intent(in) :: kl, ku, nz_1d
392 real(rp),
intent(out) :: pmatbnd(2*kl+ku+1,3,elem%nnode_v,lmesh%nez,elem%nnode_h1d**2)
393 real(rp),
intent(in) :: prog_vars0(elem%np,lmesh%nez,
prgvar_num)
394 real(rp),
intent(in) :: dens_hyd(elem%np,lmesh%nez)
395 real(rp),
intent(in) :: pres_hyd(elem%np,lmesh%nez)
396 real(rp),
intent(in) :: g13(elem%np,lmesh%nez)
397 real(rp),
intent(in) :: g23(elem%np,lmesh%nez)
398 real(rp),
intent(in) :: gsqrtv(elem%np,lmesh%nez)
399 real(rp),
intent(in) :: alph(elem%nfptot,lmesh%nez)
400 real(rp),
intent(in) :: rtot(elem%np,lmesh%nez)
401 real(rp),
intent(in) :: cptot_ov_cvtot(elem%np,lmesh%nez)
404 real(rp),
intent(in) :: impl_fac
405 real(rp),
intent(in) :: dt
406 real(rp),
intent(in) :: nz(elem%nfptot,lmesh%nez)
407 integer,
intent(in) :: vmapm(elem%nfptot,lmesh%nez)
408 integer,
intent(in) :: vmapp(elem%nfptot,lmesh%nez)
409 integer,
intent(in) :: ke_x, ke_y
411 real(rp) :: rhot_hyd(elem%nnode_v)
412 real(rp) :: pot0(elem%nnode_v,lmesh%nez,elem%nnode_h1d**2)
413 real(rp) :: w0(elem%nnode_v,lmesh%nez,elem%nnode_h1d**2)
414 real(rp) :: wt0(elem%nnode_v,lmesh%nez,elem%nnode_h1d**2)
415 real(rp) :: dens0(elem%nnode_v,lmesh%nez,elem%nnode_h1d**2)
416 real(rp) :: dpdrhot0(elem%nnode_v,lmesh%nez,elem%nnode_h1d**2)
417 integer :: ke_z, ke_z2
418 integer :: v, ke, p, f1, f2, fp, fp2, fmv
419 real(rp) :: gamm, rgamm
420 real(rp) :: fac_dz_p(elem%nnode_v)
421 real(rp) :: pmatd(elem%nnode_v,elem%nnode_v,3,3)
422 real(rp) :: pmatl(elem%nnode_v,elem%nnode_v,3,3)
423 real(rp) :: pmatu(elem%nnode_v,elem%nnode_v,3,3)
425 integer :: colmask(elem%nnode_v)
426 real(rp) :: id(elem%nnode_v,elem%nnode_v)
427 real(rp) :: dd(elem%nnode_v)
428 real(rp) :: tmp1(elem%nnode_v)
430 integer :: ij, v1, v2, pv1, pv2, g_kj, g_kjp1, g_kjm1, pb1
432 logical :: eval_flag(3,3)
434 integer,
parameter :: dens_vid_lc = 1
435 integer,
parameter :: momz_vid_lc = 2
436 integer,
parameter :: rhot_vid_lc = 3
443 eval_flag(:,:) = .false.
445 eval_flag(v,v) = .true.
447 eval_flag(dens_vid_lc,momz_vid_lc) = .true.
448 eval_flag(momz_vid_lc,dens_vid_lc) = .true.
449 eval_flag(momz_vid_lc,rhot_vid_lc) = .true.
450 eval_flag(rhot_vid_lc,momz_vid_lc) = .true.
451 eval_flag(rhot_vid_lc,dens_vid_lc) = .true.
460 pmatd(:,:,:,:) = 0.0_rp
461 pmatl(:,:,:,:) = 0.0_rp
462 pmatu(:,:,:,:) = 0.0_rp
465 do ij=1, elem%Nnode_h1D**2
466 pmatbnd(:,:,:,:,ij) = 0.0_rp
469 do ij=1, elem%Nnode_h1D**2
471 colmask(:) = elem%Colmask(:,ij)
473 rhot_hyd(:) = pres00/rdry * (pres_hyd(colmask(:),ke_z)/pres00)**rgamm
474 dens0(:,ke_z,ij) = dens_hyd(colmask(:),ke_z) + prog_vars0(colmask(:),ke_z,dens_vid)
475 pot0(:,ke_z,ij) = ( rhot_hyd(:) + prog_vars0(colmask(:),ke_z,rhot_vid) ) / dens0(:,ke_z,ij)
476 w0(:,ke_z,ij) = prog_vars0(colmask(:),ke_z,momz_vid) / dens0(:,ke_z,ij)
478 wt0(:,ke_z,ij) = w0(:,ke_z,ij) + gsqrtv(colmask(:),ke_z) * ( &
479 g13(colmask(:),ke_z) * prog_vars0(colmask(:),ke_z,momx_vid) &
480 + g23(colmask(:),ke_z) * prog_vars0(colmask(:),ke_z,momy_vid) ) / dens0(:,ke_z,ij)
484 dpdrhot0(:,ke_z,ij) = cptot_ov_cvtot(colmask(:),ke_z) &
485 * pres00 * ( rtot(colmask(:),ke_z) / pres00 * ( dens0(:,ke_z,ij) * pot0(:,ke_z,ij) ) )**cptot_ov_cvtot(colmask(:),ke_z) &
486 / ( dens0(:,ke_z,ij) * pot0(:,ke_z,ij) )
498 do ij=1, elem%Nnode_h1D**2
500 ke = ke_x + (ke_y-1)*lmesh%NeX + (ke_z-1)*lmesh%NeX*lmesh%NeY
501 colmask(:) = elem%Colmask(:,ij)
505 fac_dz_p(:) = impl_fac * lmesh%Escale(colmask(:),ke,3,3) / gsqrtv(colmask(:),ke_z) &
506 * elem%Dx3(colmask(:),colmask(p))
511 pmatd(:,p,dens_vid_lc,dens_vid_lc) = dd(:)
512 pmatd(:,p,dens_vid_lc,momz_vid_lc) = fac_dz_p(:)
515 pmatd(:,p,momz_vid_lc,momz_vid_lc) = dd(:)
517 pmatd(:,p,momz_vid_lc,dens_vid_lc) = impl_fac * grav *
intrpmat_vpordm1(colmask(:),colmask(p))
519 pmatd(:,p,momz_vid_lc,rhot_vid_lc) = fac_dz_p(:) * dpdrhot0(p,ke_z,ij)
522 pmatd(:,p,rhot_vid_lc,dens_vid_lc) = - fac_dz_p(:) * pot0(p,ke_z,ij) * wt0(p,ke_z,ij)
523 pmatd(:,p,rhot_vid_lc,momz_vid_lc) = fac_dz_p(:) * pot0(p,ke_z,ij)
524 pmatd(:,p,rhot_vid_lc,rhot_vid_lc) = dd(:) + fac_dz_p(:) * wt0(p,ke_z,ij)
529 ke_z2 = max(ke_z-1,1)
530 pv1 = 1; pv2 = elem%Nnode_v
533 ke_z2 = min(ke_z+1,lmesh%NeZ)
534 pv1 = elem%Nnode_v; pv2 = 1
537 fac = 0.5_rp * impl_fac / gsqrtv(colmask(pv1),ke_z)
538 if ( (ke_z == 1 .and. f1==1) .or. (ke_z == lmesh%NeZ .and. f1==elem%Nfaces_v) )
then
545 fmv = elem%Fmask_v(ij,f1)
546 fp = elem%Nfp_h * elem%Nfaces_h + (f1-1)*elem%Nfp_v + ij
547 fp2 = elem%Nfp_h * elem%Nfaces_h + (f2-1)*elem%Nfp_v + ij
550 tmp1(:) = fac * elem%Lift(colmask(:),fp) * lmesh%Fscale(fp,ke) &
551 * max( alph(fp,ke_z), alph(fp2,ke_z2) )
553 pmatd(:,pv1,momz_vid_lc,momz_vid_lc) = pmatd(:,pv1,momz_vid_lc,momz_vid_lc) + 2.0_rp * tmp1(:)
556 pmatd(:,pv1,v,v) = pmatd(:,pv1,v,v) + tmp1(:)
558 pmatl(:,pv2,v,v) = - tmp1(:)
560 pmatu(:,pv2,v,v) = - tmp1(:)
566 tmp1(:) = fac * elem%Lift(colmask(:),fp) * lmesh%Fscale(fp,ke) * nz(fp,ke_z)
569 pmatd(:,pv1,dens_vid_lc,momz_vid_lc) = pmatd(:,pv1,dens_vid_lc,momz_vid_lc) - 2.0_rp * tmp1(:)
570 pmatd(:,pv1,rhot_vid_lc,momz_vid_lc) = pmatd(:,pv1,rhot_vid_lc,momz_vid_lc) - 2.0_rp * tmp1(:) * pot0(pv1,ke_z,ij)
571 pmatd(:,pv1,rhot_vid_lc,dens_vid_lc) = pmatd(:,pv1,rhot_vid_lc,dens_vid_lc) + 2.0_rp * tmp1(:) * pot0(pv1,ke_z,ij) * wt0(pv1,ke_z,ij)
572 pmatd(:,pv1,rhot_vid_lc,rhot_vid_lc) = pmatd(:,pv1,rhot_vid_lc,rhot_vid_lc) - 2.0_rp * tmp1(:) * wt0(pv1,ke_z,ij)
574 pmatd(:,pv1,dens_vid_lc,momz_vid_lc) = pmatd(:,pv1,dens_vid_lc,momz_vid_lc) - tmp1(:)
578 pmatd(:,pv1,momz_vid_lc,rhot_vid_lc) = pmatd(:,pv1,momz_vid_lc,rhot_vid_lc) - tmp1(:) * dpdrhot0(pv1,ke_z,ij)
580 pmatd(:,pv1,rhot_vid_lc,momz_vid_lc) = pmatd(:,pv1,rhot_vid_lc,momz_vid_lc) - tmp1(:) * pot0(pv1,ke_z,ij)
581 pmatd(:,pv1,rhot_vid_lc,dens_vid_lc) = pmatd(:,pv1,rhot_vid_lc,dens_vid_lc) + tmp1(:) * pot0(pv1,ke_z,ij) * wt0(pv1,ke_z,ij)
582 pmatd(:,pv1,rhot_vid_lc,rhot_vid_lc) = pmatd(:,pv1,rhot_vid_lc,rhot_vid_lc) - tmp1(:) * wt0(pv1,ke_z,ij)
586 pmatl(:,pv2,dens_vid_lc,momz_vid_lc) = + tmp1(:)
591 pmatl(:,pv2,momz_vid_lc,rhot_vid_lc) = + tmp1(:) * dpdrhot0(pv2,ke_z2,ij)
593 pmatl(:,pv2,rhot_vid_lc,momz_vid_lc) = + tmp1(:) * pot0(pv2,ke_z2,ij)
594 pmatl(:,pv2,rhot_vid_lc,dens_vid_lc) = - tmp1(:) * pot0(pv2,ke_z2,ij) * wt0(pv2,ke_z2,ij)
595 pmatl(:,pv2,rhot_vid_lc,rhot_vid_lc) = pmatl(:,pv2,rhot_vid_lc,rhot_vid_lc) &
596 + tmp1(:) * wt0(pv2,ke_z2,ij)
598 pmatu(:,pv2,dens_vid_lc,momz_vid_lc) = + tmp1(:)
603 pmatu(:,pv2,momz_vid_lc,rhot_vid_lc) = + tmp1(:) * dpdrhot0(pv2,ke_z2,ij)
605 pmatu(:,pv2,rhot_vid_lc,momz_vid_lc) = + tmp1(:) * pot0(pv2,ke_z2,ij)
606 pmatu(:,pv2,rhot_vid_lc,dens_vid_lc) = - tmp1(:) * pot0(pv2,ke_z2,ij) * wt0(pv2,ke_z2,ij)
607 pmatu(:,pv2,rhot_vid_lc,rhot_vid_lc) = pmatu(:,pv2,rhot_vid_lc,rhot_vid_lc) &
608 + tmp1(:) * wt0(pv2,ke_z2,ij)
615 if ( eval_flag(v1,v2) )
then
616 do pv2=1, elem%Nnode_v
617 g_kj = v2 + (pv2-1)*3 + (ke_z-1)*elem%Nnode_v*3
618 g_kjm1 = v2 + (pv2-1)*3 + (ke_z-2)*elem%Nnode_v*3
619 g_kjp1 = v2 + (pv2-1)*3 + (ke_z )*elem%Nnode_v*3
621 do pv1=1, elem%Nnode_v
622 pb1 = v1 + (pv1-1)*3 + (ke_z-1)*elem%Nnode_v*3
624 if (ke_z > 1 .and. pv2 == elem%Nnode_v )
then
625 pmatbnd(kl+ku+1+pb1-g_kjm1, v2,pv2,ke_z-1, ij) = pmatl(pv1,pv2,v1,v2)
627 pmatbnd(kl+ku+1+pb1-g_kj, v2,pv2,ke_z, ij) = pmatd(pv1,pv2,v1,v2)
628 if (ke_z < lmesh%NeZ .and. pv2 == 1 )
then
629 pmatbnd(kl+ku+1+pb1-g_kjp1, v2,pv2,ke_z+1, ij) = pmatu(pv1,pv2,v1,v2)
647 PmatBnd_uv, & ! (out)
648 kl_uv, ku_uv, nz_1d_uv, &
649 prog_vars0, dens_hyd, pres_hyd, &
650 g13, g23, gsqrtv, alph, &
651 rtot, cptot_ov_cvtot, &
655 nz, vmapm, vmapp, ke_x, ke_y )
661 integer,
intent(in) :: kl_uv, ku_uv, nz_1d_uv
662 real(rp),
intent(out) :: pmatbnd_uv(2*kl_uv+ku_uv+1,elem%nnode_v,1,lmesh%nez,elem%nnode_h1d**2)
663 real(rp),
intent(in) :: prog_vars0(elem%np,lmesh%nez,
prgvar_num)
664 real(rp),
intent(in) :: dens_hyd(elem%np,lmesh%nez)
665 real(rp),
intent(in) :: pres_hyd(elem%np,lmesh%nez)
666 real(rp),
intent(in) :: g13(elem%np,lmesh%nez)
667 real(rp),
intent(in) :: g23(elem%np,lmesh%nez)
668 real(rp),
intent(in) :: gsqrtv(elem%np,lmesh%nez)
669 real(rp),
intent(in) :: alph(elem%nfptot,lmesh%nez)
670 real(rp),
intent(in) :: rtot(elem%np,lmesh%nez)
671 real(rp),
intent(in) :: cptot_ov_cvtot(elem%np,lmesh%nez)
674 real(rp),
intent(in) :: impl_fac
675 real(rp),
intent(in) :: dt
676 real(rp),
intent(in) :: nz(elem%nfptot,lmesh%nez)
677 integer,
intent(in) :: vmapm(elem%nfptot,lmesh%nez)
678 integer,
intent(in) :: vmapp(elem%nfptot,lmesh%nez)
679 integer,
intent(in) :: ke_x, ke_y
681 real(rp) :: rhot_hyd(elem%nnode_v)
682 real(rp) :: pot0(elem%nnode_v,lmesh%nez,elem%nnode_h1d**2)
683 real(rp) :: w0(elem%nnode_v,lmesh%nez,elem%nnode_h1d**2)
684 real(rp) :: wt0(elem%nnode_v,lmesh%nez,elem%nnode_h1d**2)
685 real(rp) :: dens0(elem%nnode_v,lmesh%nez,elem%nnode_h1d**2)
686 real(rp) :: dpdrhot0(elem%nnode_v,lmesh%nez,elem%nnode_h1d**2)
687 integer :: ke_z, ke_z2
688 integer :: v, ke, p, f1, f2, fp, fp2, fmv
690 real(rp) :: pmatd_uv(elem%nnode_v,elem%nnode_v)
691 real(rp) :: pmatl_uv(elem%nnode_v,elem%nnode_v)
692 real(rp) :: pmatu_uv(elem%nnode_v,elem%nnode_v)
694 integer :: colmask(elem%nnode_v)
695 real(rp) :: id(elem%nnode_v,elem%nnode_v)
696 real(rp) :: dd(elem%nnode_v)
697 real(rp) :: tmp1(elem%nnode_v)
699 integer :: ij, v1, v2, pv1, pv2, g_kj, g_kjp1, g_kjm1, pb1
710 pmatd_uv(:,:) = 0.0_rp
711 pmatl_uv(:,:) = 0.0_rp
712 pmatu_uv(:,:) = 0.0_rp
715 do ij=1, elem%Nnode_h1D**2
716 pmatbnd_uv(:,:,:,:,ij) = 0.0_rp
727 do ij=1, elem%Nnode_h1D**2
729 ke = ke_x + (ke_y-1)*lmesh%NeX + (ke_z-1)*lmesh%NeX*lmesh%NeY
730 colmask(:) = elem%Colmask(:,ij)
736 pmatd_uv(:,p) = dd(:)
741 ke_z2 = max(ke_z-1,1)
742 pv1 = 1; pv2 = elem%Nnode_v
745 ke_z2 = min(ke_z+1,lmesh%NeZ)
746 pv1 = elem%Nnode_v; pv2 = 1
749 fac = 0.5_rp * impl_fac / gsqrtv(colmask(pv1),ke_z)
750 if ( (ke_z == 1 .and. f1==1) .or. (ke_z == lmesh%NeZ .and. f1==elem%Nfaces_v) )
then
757 fmv = elem%Fmask_v(ij,f1)
758 fp = elem%Nfp_h * elem%Nfaces_h + (f1-1)*elem%Nfp_v + ij
759 fp2 = elem%Nfp_h * elem%Nfaces_h + (f2-1)*elem%Nfp_v + ij
762 tmp1(:) = fac * elem%Lift(colmask(:),fp) * lmesh%Fscale(fp,ke) &
763 * max( alph(fp,ke_z), alph(fp2,ke_z2) )
766 pmatd_uv(:,pv1) = pmatd_uv(:,pv1) + tmp1(:)
768 pmatl_uv(:,pv2) = - tmp1(:)
770 pmatu_uv(:,pv2) = - tmp1(:)
776 do pv2=1, elem%Nnode_v
777 g_kj = pv2 + (ke_z-1)*elem%Nnode_v
778 g_kjm1 = pv2 + (ke_z-2)*elem%Nnode_v
779 g_kjp1 = pv2 + (ke_z )*elem%Nnode_v
781 do pv1=1, elem%Nnode_v
782 pb1 = pv1 + (ke_z-1)*elem%Nnode_v
783 if (ke_z > 1 .and. pv2 == elem%Nnode_v )
then
784 pmatbnd_uv(kl_uv+ku_uv+1+pb1-g_kjm1, pv2,1,ke_z-1, ij) = pmatl_uv(pv1,pv2)
786 pmatbnd_uv(kl_uv+ku_uv+1+pb1-g_kj, pv2,1,ke_z, ij) = pmatd_uv(pv1,pv2)
787 if (ke_z < lmesh%NeZ .and. pv2 == 1)
then
788 pmatbnd_uv(kl_uv+ku_uv+1+pb1-g_kjp1, pv2,1,ke_z+1, ij) = pmatu_uv(pv1,pv2)