10#include "scaleFElib.h"
20 use scale_const,
only: &
23 cpdry => const_cpdry, &
24 cvdry => const_cvdry, &
61 integer,
allocatable:: velbc_ids(:)
62 integer,
allocatable :: thermalbc_ids(:)
63 real(rp),
allocatable :: thermal_fixval(:)
65 procedure :: init => atmos_dyn_bnd_setup
66 procedure :: final => atmos_dyn_bnd_finalize
67 procedure :: setbcinfo => atmos_dyn_bnd_setbcinfo
68 procedure :: applybc_progvars_lc => atmos_dyn_bnd_applybc_prgvars_lc
69 procedure :: applybc_numdiff_odd_lc => atmos_dyn_bnd_applybc_numdiff_odd_lc
70 procedure :: applybc_numdiff_even_lc => atmos_dyn_bnd_applybc_numdiff_even_lc
71 procedure :: applybc_grad_tbvars_lc => atmos_dyn_bnd_applybc_tbvars_lc
72 procedure :: applybc_grad_tbstress_lc => atmos_dyn_bnd_applybc_tbstress_lc
73 procedure :: inquire_bound_flag => atmos_dyn_bnd_inquire_bound_flag
82 private :: bnd_init_lc
85 integer,
parameter :: dombnd_east_id = 2
86 integer,
parameter :: dombnd_north_id = 3
87 integer,
parameter :: dombnd_west_id = 4
88 integer,
parameter :: dombnd_btm_id = 5
89 integer,
parameter :: dombnd_top_id = 6
90 integer,
parameter :: dom_bnd_num = 6
96 subroutine atmos_dyn_bnd_setup( this )
97 use scale_const,
only: &
98 undef8 => const_undef8
107 character(len=H_SHORT) :: btm_vel_bc
108 character(len=H_SHORT) :: top_vel_bc
109 character(len=H_SHORT) :: north_vel_bc
110 character(len=H_SHORT) :: south_vel_bc
111 character(len=H_SHORT) :: east_vel_bc
112 character(len=H_SHORT) :: west_vel_bc
114 character(len=H_SHORT) :: btm_thermal_bc
115 character(len=H_SHORT) :: top_thermal_bc
116 character(len=H_SHORT) :: north_thermal_bc
117 character(len=H_SHORT) :: south_thermal_bc
118 character(len=H_SHORT) :: east_thermal_bc
119 character(len=H_SHORT) :: west_thermal_bc
121 real(rp) :: btm_thermal_fixval
122 real(rp) :: top_thermal_fixval
123 real(rp) :: north_thermal_fixval
124 real(rp) :: south_thermal_fixval
125 real(rp) :: east_thermal_fixval
126 real(rp) :: west_thermal_fixval
128 namelist /param_atmos_dyn_bnd/ &
129 btm_vel_bc, top_vel_bc, north_vel_bc, south_vel_bc, east_vel_bc, west_vel_bc, &
130 btm_thermal_bc, top_thermal_bc, north_thermal_bc, south_thermal_bc, east_thermal_bc, west_thermal_bc, &
131 btm_thermal_fixval, top_thermal_fixval, north_thermal_fixval, south_thermal_fixval, east_thermal_fixval, west_thermal_fixval
150 btm_thermal_fixval = undef8
151 top_thermal_fixval = undef8
152 north_thermal_fixval = undef8
153 south_thermal_fixval = undef8
154 east_thermal_fixval = undef8
155 west_thermal_fixval = undef8
158 read(io_fid_conf,nml=param_atmos_dyn_bnd,iostat=ierr)
160 log_info(
"ATMOS_dyn_bnd_setup",*)
'Not found namelist. Default used.'
161 elseif( ierr > 0 )
then
162 log_error(
"ATMOS_dyn_bnd_setup",*)
'Not appropriate names in namelist PARAM_ATMOS_DYN_BND. Check!'
165 log_nml(param_atmos_dyn_bnd)
170 allocate( this%velBC_ids(dom_bnd_num) )
181 allocate( this%thermalBC_ids(dom_bnd_num) )
190 allocate( this%thermal_fixval(dom_bnd_num) )
191 this%thermal_fixval(dombnd_btm_id) = btm_thermal_fixval
192 this%thermal_fixval(dombnd_top_id) = top_thermal_fixval
193 this%thermal_fixval(dombnd_north_id) = north_thermal_fixval
195 this%thermal_fixval(dombnd_east_id) = east_thermal_fixval
196 this%thermal_fixval(dombnd_west_id) = west_thermal_fixval
202 end subroutine atmos_dyn_bnd_setup
206 subroutine atmos_dyn_bnd_finalize( this )
213 if (
allocated(this%VelBC_list) )
then
214 do n=1,
size(this%VelBC_list)
215 call this%VelBC_list(n)%Final()
216 call this%ThermalBC_list(n)%Final()
218 deallocate( this%VelBC_list, this%ThermalBC_list )
221 deallocate( this%velBC_ids, this%thermalBC_ids )
226 end subroutine atmos_dyn_bnd_finalize
229 subroutine atmos_dyn_bnd_setbcinfo( this, mesh )
234 class(
meshbase),
target,
intent(in) :: mesh
243 allocate( this%VelBC_list(mesh%LOCAL_MESH_NUM) )
244 allocate( this%ThermalBC_list(mesh%LOCAL_MESH_NUM) )
249 do n=1, mesh%LOCAL_MESH_NUM
250 call mesh%GetLocalMesh( n, ptr_lcmesh )
251 select type (ptr_lcmesh)
253 lcmesh3d => ptr_lcmesh
257 this%VelBC_list(n), this%ThermalBC_list(n), &
258 this%velBC_ids(:), this%thermalBC_ids(:), &
259 this%thermal_fixval(:), &
260 lcmesh3d%VMapB, mesh, lcmesh3d, lcmesh3d%refElem3D )
265 end subroutine atmos_dyn_bnd_setbcinfo
270 subroutine atmos_dyn_bnd_applybc_prgvars_lc( this, &
272 ddens, momx, momy, momz, therm, &
273 dens_hyd, pres_hyd, &
274 gsqrt, gsqrth, g11, g12, g22, g13, g23, nx, ny, nz, &
275 vmapm, vmapp, vmapb, lmesh, elem, lmesh2d, elem2d )
284 integer,
intent(in) :: domid
289 real(rp),
intent(inout) :: ddens(elem%np*lmesh%nea)
290 real(rp),
intent(inout) :: momx(elem%np*lmesh%nea)
291 real(rp),
intent(inout) :: momy(elem%np*lmesh%nea)
292 real(rp),
intent(inout) :: momz(elem%np*lmesh%nea)
293 real(rp),
intent(inout) :: therm(elem%np*lmesh%nea)
294 real(rp),
intent(in) :: dens_hyd(elem%np*lmesh%nea)
295 real(rp),
intent(in) :: pres_hyd(elem%np*lmesh%nea)
296 real(rp),
intent(in) :: gsqrt(elem%np*lmesh%nea)
297 real(rp),
intent(in) :: gsqrth(elem2d%np,lmesh2d%ne)
298 real(rp),
intent(in) :: g11(elem2d%np,lmesh2d%ne)
299 real(rp),
intent(in) :: g12(elem2d%np,lmesh2d%ne)
300 real(rp),
intent(in) :: g22(elem2d%np,lmesh2d%ne)
301 real(rp),
intent(in) :: g13(elem%np*lmesh%nea)
302 real(rp),
intent(in) :: g23(elem%np*lmesh%nea)
303 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
304 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
305 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
306 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
307 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
308 integer,
intent(in) :: vmapb(:)
310 integer :: p, ke, ke2d
311 integer :: i, i_, im, ip
312 real(rp) :: mom_normal
315 real(rp) :: gsqrtv, g11_, g12_, g22_
318 integer :: indexh2dto3d_bnd(elem%nfptot)
321 indexh2dto3d_bnd(:) = elem%IndexH2Dto3D_bnd(:)
329 do ke=lmesh%NeS, lmesh%NeE
332 i = p + (ke-1)*elem%NfpTot
334 i_ = ip - elem%Np*lmesh%NeE
339 select case( this%VelBC_list(domid)%list(i_) )
341 ke2d = lmesh%EMap3Dto2D(ke)
343 gsqrtv = gsqrt(im) / gsqrth(indexh2dto3d_bnd(p),ke2d)
344 g11_ = g11(indexh2dto3d_bnd(p),ke2d)
345 g12_ = g12(indexh2dto3d_bnd(p),ke2d)
346 g22_ = g22(indexh2dto3d_bnd(p),ke2d)
348 momw = momz(im) / gsqrtv &
349 + g13(im) * momx(im) + g23(im) * momy(im)
350 fac = nz(i) * gsqrtv**2 / ( 1.0_rp + g11_ * ( gsqrtv * g13(im) )**2 + 2.0_rp * g12_ * ( gsqrtv**2 * g13(im) * g23(im) ) + g22_ * ( gsqrtv * g23(im) )**2 )
352 mom_normal = momx(im) * nx(i) + momy(im) * ny(i) + momw * nz(i)
353 momx(ip) = momx(im) - 2.0_rp * mom_normal * ( nx(i) + fac * ( g11_ * g13(im) + g12_ * g23(im) ) )
354 momy(ip) = momy(im) - 2.0_rp * mom_normal * ( ny(i) + fac * ( g12_ * g13(im) + g22_ * g23(im) ) )
355 momz(ip) = momz(im) - 2.0_rp * mom_normal * fac / gsqrtv
357 momx(ip) = - momx(im)
358 momy(ip) = - momy(im)
359 momz(ip) = - momz(im)
367 end subroutine atmos_dyn_bnd_applybc_prgvars_lc
370 subroutine atmos_dyn_bnd_applybc_numdiff_odd_lc( this, & ! (in)
371 gxvar, gyvar, gzvar, &
374 nx, ny, nz, vmapm, vmapp, vmapb, lmesh, elem )
385 real(rp),
intent(inout) :: gxvar(elem%np*lmesh%nea)
386 real(rp),
intent(inout) :: gyvar(elem%np*lmesh%nea)
387 real(rp),
intent(inout) :: gzvar(elem%np*lmesh%nea)
388 logical,
intent(out) :: is_bound(elem%nfptot*lmesh%ne)
389 integer,
intent(in) :: varid
390 integer,
intent(in) :: domid
391 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
392 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
393 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
394 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
395 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
396 integer,
intent(in) :: vmapb(:)
398 integer :: i, i_, im, ip
399 real(rp) :: grad_normal
402 do i=1, elem%NfpTot*lmesh%Ne
404 i_ = ip - elem%Np*lmesh%NeE
405 is_bound(i) = .false.
409 grad_normal = gxvar(im) * nx(i) + gyvar(im) * ny(i) + gzvar(im) * nz(i)
414 gyvar(ip) = gyvar(im) - 2.0_rp * grad_normal * ny(i)
415 gzvar(ip) = gzvar(im) - 2.0_rp * grad_normal * nz(i)
417 gxvar(ip) = gxvar(im) - 2.0_rp * grad_normal * nx(i)
418 gzvar(ip) = gzvar(im) - 2.0_rp * grad_normal * nz(i)
420 gxvar(ip) = gxvar(im) - 2.0_rp * grad_normal * nx(i)
421 gyvar(ip) = gyvar(im) - 2.0_rp * grad_normal * ny(i)
428 case(dens_vid, rhot_vid)
429 gxvar(ip) = gxvar(im) - 2.0_rp * grad_normal * nx(i)
430 gyvar(ip) = gyvar(im) - 2.0_rp * grad_normal * ny(i)
431 gzvar(ip) = gzvar(im) - 2.0_rp * grad_normal * nz(i)
442 end subroutine atmos_dyn_bnd_applybc_numdiff_odd_lc
445 subroutine atmos_dyn_bnd_applybc_numdiff_even_lc( this, & ! (in)
449 nx, ny, nz, vmapm, vmapp, vmapb, lmesh, elem )
459 real(rp),
intent(inout) :: var(elem%np*lmesh%nea)
460 logical,
intent(out) :: is_bound(elem%nfptot*lmesh%ne)
461 integer,
intent(in) :: varid
462 integer,
intent(in) :: domid
463 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
464 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
465 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
466 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
467 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
468 integer,
intent(in) :: vmapb(:)
470 integer :: i, i_, im, ip
471 real(rp) :: grad_normal
474 do i=1, elem%NfpTot*lmesh%Ne
476 i_ = ip - elem%Np*lmesh%NeE
477 is_bound(i) = .false.
485 grad_normal = var(im) * nx(i)
486 var(ip) = var(im) - 2.0_rp * grad_normal * nx(i)
488 grad_normal = var(im) * ny(i)
489 var(ip) = var(im) - 2.0_rp * grad_normal * ny(i)
491 grad_normal = var(im) * nz(i)
492 var(ip) = var(im) - 2.0_rp * grad_normal * nz(i)
498 case( momx_vid, momy_vid, momz_vid )
508 end subroutine atmos_dyn_bnd_applybc_numdiff_even_lc
514 subroutine atmos_dyn_bnd_applybc_tbvars_lc( this, &
516 ddens, momx, momy, momz, pt, pres, &
517 dens_hyd, pres_hyd, rtot, cptot, &
518 gsqrt, gsqrth, g11, g12, g22, g13, g23, nx, ny, nz, &
519 vmapm, vmapp, vmapb, lmesh, elem, lmesh2d, elem2d )
521 use scale_const,
only: &
522 pres00 => const_pre00
530 integer,
intent(in) :: domid
535 real(rp),
intent(inout) :: ddens(elem%np*lmesh%nea)
536 real(rp),
intent(inout) :: momx(elem%np*lmesh%nea)
537 real(rp),
intent(inout) :: momy(elem%np*lmesh%nea)
538 real(rp),
intent(inout) :: momz(elem%np*lmesh%nea)
539 real(rp),
intent(inout) :: pt(elem%np*lmesh%nea)
540 real(rp),
intent(inout) :: pres(elem%np*lmesh%nea)
541 real(rp),
intent(in) :: dens_hyd(elem%np*lmesh%nea)
542 real(rp),
intent(in) :: pres_hyd(elem%np*lmesh%nea)
543 real(rp),
intent(in) :: rtot(elem%np*lmesh%nea)
544 real(rp),
intent(in) :: cptot(elem%np*lmesh%nea)
545 real(rp),
intent(in) :: gsqrt(elem%np*lmesh%nea)
546 real(rp),
intent(in) :: gsqrth(elem2d%np,lmesh2d%ne)
547 real(rp),
intent(in) :: g11(elem2d%np,lmesh2d%ne)
548 real(rp),
intent(in) :: g12(elem2d%np,lmesh2d%ne)
549 real(rp),
intent(in) :: g22(elem2d%np,lmesh2d%ne)
550 real(rp),
intent(in) :: g13(elem%np*lmesh%nea)
551 real(rp),
intent(in) :: g23(elem%np*lmesh%nea)
552 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
553 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
554 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
555 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
556 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
557 integer,
intent(in) :: vmapb(:)
559 integer :: p, ke, ke2d
560 integer :: i, i_, im, ip
561 real(rp) :: mom_normal
564 real(rp) :: temp_p, temp_b
565 real(rp) :: gsqrtv, g11_, g12_, g22_
573 do ke=lmesh%NeS, lmesh%NeE
575 i = p + (ke-1)*elem%NfpTot
577 i_ = ip - elem%Np*lmesh%NeE
582 select case( this%VelBC_list(domid)%list(i_) )
584 ke2d = lmesh%EMap3Dto2D(ke)
586 gsqrtv = gsqrt(im) / gsqrth(elem%IndexH2Dto3D_bnd(p),ke2d)
587 g11_ = g11(elem%IndexH2Dto3D_bnd(p),ke2d)
588 g12_ = g12(elem%IndexH2Dto3D_bnd(p),ke2d)
589 g22_ = g22(elem%IndexH2Dto3D_bnd(p),ke2d)
591 momw = momz(im) / gsqrtv &
592 + g13(im) * momx(im) + g23(im) * momy(im)
593 fac = nz(i) * gsqrtv**2 / ( 1.0_rp + g11_ * ( gsqrtv * g13(im) )**2 + 2.0_rp * g12_ * ( gsqrtv**2 * g13(im) * g23(im) ) + g22_ * ( gsqrtv * g23(im) )**2 )
595 mom_normal = momx(im) * nx(i) + momy(im) * ny(i) + momw * nz(i)
596 momx(ip) = momx(im) - 2.0_rp * mom_normal * ( nx(i) + fac * ( g11_ * g13(im) + g12_ * g23(im) ) )
597 momy(ip) = momy(im) - 2.0_rp * mom_normal * ( ny(i) + fac * ( g12_ * g13(im) + g22_ * g23(im) ) )
598 momz(ip) = momz(im) - 2.0_rp * mom_normal * fac / gsqrtv
601 momx(ip) = - momx(im)
602 momy(ip) = - momy(im)
603 momz(ip) = - momz(im)
606 select case( this%ThermalBC_list(domid)%list(i_) )
608 temp_b = this%ThermalBC_list(domid)%val(i_)
609 temp_p = 2.0_rp * temp_b - pres(im) / ( ( dens_hyd(im) + ddens(im) ) * rtot(im) )
610 pt(ip) = temp_p * ( pres00 / pres(im) )**(rtot(im)/cptot(im))
611 ddens(ip) = pres(im) / ( rtot(im) * temp_p ) - dens_hyd(im)
619 end subroutine atmos_dyn_bnd_applybc_tbvars_lc
626 subroutine atmos_dyn_bnd_applybc_tbstress_lc( this, &
628 t11, t12, t13, t21, t22, t23, t31, t32, t33, &
630 gsqrt, gsqrth, g11, g12, g22, g13, g23, nx, ny, nz, &
631 vmapm, vmapp, vmapb, lmesh, elem, lmesh2d, elem2d )
640 integer,
intent(in) :: domid
645 real(rp),
intent(inout) :: t11(elem%np*lmesh%nea), t12(elem%np*lmesh%nea), t13(elem%np*lmesh%nea)
646 real(rp),
intent(inout) :: t21(elem%np*lmesh%nea), t22(elem%np*lmesh%nea), t23(elem%np*lmesh%nea)
647 real(rp),
intent(inout) :: t31(elem%np*lmesh%nea), t32(elem%np*lmesh%nea), t33(elem%np*lmesh%nea)
648 real(rp),
intent(inout) :: df1(elem%np*lmesh%nea), df2(elem%np*lmesh%nea), df3(elem%np*lmesh%nea)
649 real(rp),
intent(in) :: gsqrt(elem%np*lmesh%nea)
650 real(rp),
intent(in) :: gsqrth(elem2d%np,lmesh2d%ne)
651 real(rp),
intent(in) :: g11(elem2d%np,lmesh2d%ne)
652 real(rp),
intent(in) :: g12(elem2d%np,lmesh2d%ne)
653 real(rp),
intent(in) :: g22(elem2d%np,lmesh2d%ne)
654 real(rp),
intent(in) :: g13(elem%np*lmesh%nea)
655 real(rp),
intent(in) :: g23(elem%np*lmesh%nea)
656 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
657 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
658 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
659 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
660 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
661 integer,
intent(in) :: vmapb(:)
663 integer :: p, ke, ke2d
664 integer :: i, i_, im, ip
666 real(rp) :: gsqrtv, g11_, g12_, g22_
667 real(rp) :: fac, normal_vec(3)
669 real(rp) :: stress_t_tmp, stress_t_tmpvec(3)
671 real(rp) :: normal_flux
678 do ke=lmesh%NeS, lmesh%NeE
680 i = p + (ke-1)*elem%NfpTot
682 i_ = ip - elem%Np*lmesh%NeE
685 ke2d = lmesh%EMap3Dto2D(ke)
688 gsqrtv = gsqrt(im) / gsqrth(elem%IndexH2Dto3D_bnd(p),ke2d)
689 g11_ = g11(elem%IndexH2Dto3D_bnd(p),ke2d)
690 g12_ = g12(elem%IndexH2Dto3D_bnd(p),ke2d)
691 g22_ = g22(elem%IndexH2Dto3D_bnd(p),ke2d)
692 fac = nz(i) * gsqrtv**2 / ( 1.0_rp + g11_ * ( gsqrtv * g13(im) )**2 + 2.0_rp * g12_ * ( gsqrtv**2 * g13(im) * g23(im) ) + g22_ * ( gsqrtv * g23(im) )**2 )
693 normal_vec(1) = nx(i) + fac * ( g11_ * g13(im) + g12_ * g23(im) )
694 normal_vec(2) = ny(i) + fac * ( g12_ * g13(im) + g22_ * g23(im) )
695 normal_vec(3) = fac / gsqrtv
697 select case( this%VelBC_list(domid)%list(i_) )
699 vecw = t13(im) / gsqrtv + g13(im) * t11(im) + g23(im) * t12(im)
700 stress_t_tmpvec(1) = t11(im) * nx(i) + t12(im) * ny(i) + vecw * nz(i)
702 vecw = t23(im) / gsqrtv + g13(im) * t21(im) + g23(im) * t22(im)
703 stress_t_tmpvec(2) = t21(im) * nx(i) + t22(im) * ny(i) + vecw * nz(i)
705 vecw = t33(im) / gsqrtv
706 stress_t_tmpvec(3) = t31(im) * nx(i) + t32(im) * ny(i) + vecw * nz(i)
708 stress_t_tmp = sum( stress_t_tmpvec(:) * normal_vec(:) )
709 stress_t_tmpvec(:) = stress_t_tmpvec(:) - stress_t_tmp * normal_vec(:)
712 t11(ip) = t11(im) - 2.0_rp * stress_t_tmpvec(1) * normal_vec(1)
713 t12(ip) = t12(im) - 2.0_rp * stress_t_tmpvec(1) * normal_vec(2)
714 t13(ip) = t13(im) - 2.0_rp * stress_t_tmpvec(1) * normal_vec(3)
717 t21(ip) = t21(im) - 2.0_rp * stress_t_tmpvec(2) * normal_vec(1)
718 t22(ip) = t22(im) - 2.0_rp * stress_t_tmpvec(2) * normal_vec(2)
719 t23(ip) = t23(im) - 2.0_rp * stress_t_tmpvec(2) * normal_vec(3)
722 t31(ip) = t31(im) - 2.0_rp * stress_t_tmpvec(3) * normal_vec(1)
723 t32(ip) = t32(im) - 2.0_rp * stress_t_tmpvec(3) * normal_vec(2)
724 t33(ip) = t33(im) - 2.0_rp * stress_t_tmpvec(3) * normal_vec(3)
729 select case( this%ThermalBC_list(domid)%list(i_) )
731 normal_flux = df1(im) * nx(i) + df2(im) * ny(i) &
732 + ( df3(im) / gsqrtv + g13(im) * df1(im) + g23(im) * df2(im) ) * nz(i)
733 df1(ip) = df1(im) - 2.0_rp * normal_flux * normal_vec(1)
734 df2(ip) = df2(im) - 2.0_rp * normal_flux * normal_vec(2)
735 df3(ip) = df3(im) - 2.0_rp * normal_flux * normal_vec(3)
742 end subroutine atmos_dyn_bnd_applybc_tbstress_lc
745 subroutine atmos_dyn_bnd_inquire_bound_flag( this, & ! (in)
747 domid, vmapm, vmapp, vmapb, lmesh, elem )
757 logical,
intent(out) :: is_bound(elem%nfptot*lmesh%ne)
758 integer,
intent(in) :: domid
759 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
760 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
761 integer,
intent(in) :: vmapb(:)
763 integer :: i, i_, im, ip
766 do i=1, elem%NfpTot*lmesh%Ne
768 i_ = ip - elem%Np*lmesh%NeE
769 is_bound(i) = .false.
783 end subroutine atmos_dyn_bnd_inquire_bound_flag
788 subroutine bnd_init_lc( &
789 velBCInfo, thermalBCInfo, & ! (inout)
790 velbc_ids, thermalbc_ids, &
792 vmapb, mesh, lmesh, elem )
799 integer,
intent(in) :: velbc_ids(dom_bnd_num)
800 integer,
intent(in) :: thermalbc_ids(dom_bnd_num)
801 real(rp),
intent(in) :: thermal_fixval(dom_bnd_num)
805 integer,
intent(in) :: vmapb(:)
808 integer :: dom_bnd_sizes(dom_bnd_num)
809 integer :: bnd_buf_size
810 integer :: b, is_, ie_
815 elem%Nfp_h*lmesh%NeZ*(/ lmesh%NeX, lmesh%NeY, lmesh%NeX, lmesh%NeY, 0, 0 /) &
816 + elem%Nfp_v*lmesh%NeX*lmesh%NeY*(/ 0, 0, 0, 0, 1, 1 /)
817 bnd_buf_size = sum(dom_bnd_sizes)
819 call velbcinfo%Init( bnd_buf_size )
822 call thermalbcinfo%Init( bnd_buf_size )
825 tileid = lmesh%tileID
828 ie_ = is_ + dom_bnd_sizes(b) - 1
829 if ( mesh%tileID_globalMap(b,tileid) == tileid &
830 .and. mesh%tileFaceID_globalMap(b,tileid) == b )
then
831 call velbcinfo%Set( is_, ie_, velbc_ids(b) )
832 call thermalbcinfo%Set( is_, ie_, thermalbc_ids(b), thermal_fixval(b) )
838 end subroutine bnd_init_lc
module FElib / Fluid dyn solver / Atmosphere / Boundary
integer, parameter dombnd_south_id
module FElib / Fluid dyn solver / Atmosphere / Nonhydrostatic model / Common
integer, parameter, public prgvar_momy_id
integer, parameter, public prgvar_ddens_id
integer, parameter, public prgvar_momz_id
integer, parameter, public prgvar_momx_id
integer, parameter, public prgvar_drhot_id
integer, parameter, public prgvar_num
module FElib / Element / Base
module FElib / Mesh / Local 2D
module FElib / Mesh / Local 3D
module FElib / Mesh / Local, Base
module FElib / Data / base
module FElib / Mesh / Base 2D
module FElib / Mesh / Base 3D
module FElib / Mesh / Base
module FElib / Mesh / Boundary information
integer, parameter, public bnd_type_slip_id
character(len= *), parameter, public bnd_type_nospec_name
integer, parameter, public bnd_type_fixval_id
integer function, public bndtype_nametoid(bnd_type_name)
integer, parameter, public bnd_type_periodic_id
integer, parameter, public bnd_type_nospec_id
integer, parameter, public bnd_type_adiabat_id
integer, parameter, public bnd_type_noslip_id
module FElib / Data / base
A derived type useful for apply boundary conditions.
Derived type representing a 2D reference element.
Derived type representing a 3D reference element.
Derived type representing an arbitrary finite element.
Derived type representing a local mesh for 2D domain.
Derived type to manage a local 3D computational domain.
Derived type to manage a local computational domain (base type)
Derived type representing a field with 3D local mesh.
Derived type to manage a computational mesh (base type for 2D domain)
Derived type to manage a computational mesh (base type for 3D domain)
Base type to manage a computational mesh.
Derived type to manage boundary information of computational domain.
Derived type representing a field with 3D mesh.