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)
168 allocate( this%velBC_ids(dom_bnd_num) )
176 allocate( this%thermalBC_ids(dom_bnd_num) )
184 allocate( this%thermal_fixval(dom_bnd_num) )
185 this%thermal_fixval(dombnd_btm_id) = btm_thermal_fixval
186 this%thermal_fixval(dombnd_top_id) = top_thermal_fixval
187 this%thermal_fixval(dombnd_north_id) = north_thermal_fixval
189 this%thermal_fixval(dombnd_east_id) = east_thermal_fixval
190 this%thermal_fixval(dombnd_west_id) = west_thermal_fixval
195 end subroutine atmos_dyn_bnd_setup
199 subroutine atmos_dyn_bnd_finalize( this )
206 if (
allocated(this%VelBC_list) )
then
207 do n=1,
size(this%VelBC_list)
208 call this%VelBC_list(n)%Final()
209 call this%ThermalBC_list(n)%Final()
211 deallocate( this%VelBC_list, this%ThermalBC_list )
213 deallocate( this%velBC_ids, this%thermalBC_ids )
217 end subroutine atmos_dyn_bnd_finalize
220 subroutine atmos_dyn_bnd_setbcinfo( this, mesh )
225 class(
meshbase),
target,
intent(in) :: mesh
234 allocate( this%VelBC_list(mesh%LOCAL_MESH_NUM) )
235 allocate( this%ThermalBC_list(mesh%LOCAL_MESH_NUM) )
239 do n=1, mesh%LOCAL_MESH_NUM
240 call mesh%GetLocalMesh( n, ptr_lcmesh )
241 select type (ptr_lcmesh)
243 lcmesh3d => ptr_lcmesh
247 this%VelBC_list(n), this%ThermalBC_list(n), &
248 this%velBC_ids(:), this%thermalBC_ids(:), &
249 this%thermal_fixval(:), &
250 lcmesh3d%VMapB, mesh, lcmesh3d, lcmesh3d%refElem3D )
254 end subroutine atmos_dyn_bnd_setbcinfo
259 subroutine atmos_dyn_bnd_applybc_prgvars_lc( this, &
261 ddens, momx, momy, momz, therm, &
262 dens_hyd, pres_hyd, &
263 gsqrt, gsqrth, g11, g12, g22, g13, g23, nx, ny, nz, &
264 vmapm, vmapp, vmapb, lmesh, elem, lmesh2d, elem2d )
273 integer,
intent(in) :: domid
278 real(rp),
intent(inout) :: ddens(elem%np*lmesh%nea)
279 real(rp),
intent(inout) :: momx(elem%np*lmesh%nea)
280 real(rp),
intent(inout) :: momy(elem%np*lmesh%nea)
281 real(rp),
intent(inout) :: momz(elem%np*lmesh%nea)
282 real(rp),
intent(inout) :: therm(elem%np*lmesh%nea)
283 real(rp),
intent(in) :: dens_hyd(elem%np*lmesh%nea)
284 real(rp),
intent(in) :: pres_hyd(elem%np*lmesh%nea)
285 real(rp),
intent(in) :: gsqrt(elem%np*lmesh%nea)
286 real(rp),
intent(in) :: gsqrth(elem2d%np,lmesh2d%ne)
287 real(rp),
intent(in) :: g11(elem2d%np,lmesh2d%ne)
288 real(rp),
intent(in) :: g12(elem2d%np,lmesh2d%ne)
289 real(rp),
intent(in) :: g22(elem2d%np,lmesh2d%ne)
290 real(rp),
intent(in) :: g13(elem%np*lmesh%nea)
291 real(rp),
intent(in) :: g23(elem%np*lmesh%nea)
292 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
293 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
294 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
295 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
296 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
297 integer,
intent(in) :: vmapb(:)
299 integer :: p, ke, ke2d
300 integer :: i, i_, im, ip
301 real(rp) :: mom_normal
304 real(rp) :: gsqrtv, g11_, g12_, g22_
311 do ke=lmesh%NeS, lmesh%NeE
313 i = p + (ke-1)*elem%NfpTot
315 i_ = ip - elem%Np*lmesh%NeE
320 select case( this%VelBC_list(domid)%list(i_) )
322 ke2d = lmesh%EMap3Dto2D(ke)
324 gsqrtv = gsqrt(im) / gsqrth(elem%IndexH2Dto3D_bnd(p),ke2d)
325 g11_ = g11(elem%IndexH2Dto3D_bnd(p),ke2d)
326 g12_ = g12(elem%IndexH2Dto3D_bnd(p),ke2d)
327 g22_ = g22(elem%IndexH2Dto3D_bnd(p),ke2d)
329 momw = momz(im) / gsqrtv &
330 + g13(im) * momx(im) + g23(im) * momy(im)
331 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 )
333 mom_normal = momx(im) * nx(i) + momy(im) * ny(i) + momw * nz(i)
334 momx(ip) = momx(im) - 2.0_rp * mom_normal * ( nx(i) + fac * ( g11_ * g13(im) + g12_ * g23(im) ) )
335 momy(ip) = momy(im) - 2.0_rp * mom_normal * ( ny(i) + fac * ( g12_ * g13(im) + g22_ * g23(im) ) )
336 momz(ip) = momz(im) - 2.0_rp * mom_normal * fac / gsqrtv
339 momx(ip) = - momx(im)
340 momy(ip) = - momy(im)
341 momz(ip) = - momz(im)
349 end subroutine atmos_dyn_bnd_applybc_prgvars_lc
352 subroutine atmos_dyn_bnd_applybc_numdiff_odd_lc( this, & ! (in)
353 gxvar, gyvar, gzvar, &
356 nx, ny, nz, vmapm, vmapp, vmapb, lmesh, elem )
367 real(rp),
intent(inout) :: gxvar(elem%np*lmesh%nea)
368 real(rp),
intent(inout) :: gyvar(elem%np*lmesh%nea)
369 real(rp),
intent(inout) :: gzvar(elem%np*lmesh%nea)
370 logical,
intent(out) :: is_bound(elem%nfptot*lmesh%ne)
371 integer,
intent(in) :: varid
372 integer,
intent(in) :: domid
373 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
374 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
375 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
376 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
377 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
378 integer,
intent(in) :: vmapb(:)
380 integer :: i, i_, im, ip
381 real(rp) :: grad_normal
384 do i=1, elem%NfpTot*lmesh%Ne
386 i_ = ip - elem%Np*lmesh%NeE
387 is_bound(i) = .false.
391 grad_normal = gxvar(im) * nx(i) + gyvar(im) * ny(i) + gzvar(im) * nz(i)
396 gyvar(ip) = gyvar(im) - 2.0_rp * grad_normal * ny(i)
397 gzvar(ip) = gzvar(im) - 2.0_rp * grad_normal * nz(i)
399 gxvar(ip) = gxvar(im) - 2.0_rp * grad_normal * nx(i)
400 gzvar(ip) = gzvar(im) - 2.0_rp * grad_normal * nz(i)
402 gxvar(ip) = gxvar(im) - 2.0_rp * grad_normal * nx(i)
403 gyvar(ip) = gyvar(im) - 2.0_rp * grad_normal * ny(i)
410 case(dens_vid, rhot_vid)
411 gxvar(ip) = gxvar(im) - 2.0_rp * grad_normal * nx(i)
412 gyvar(ip) = gyvar(im) - 2.0_rp * grad_normal * ny(i)
413 gzvar(ip) = gzvar(im) - 2.0_rp * grad_normal * nz(i)
424 end subroutine atmos_dyn_bnd_applybc_numdiff_odd_lc
427 subroutine atmos_dyn_bnd_applybc_numdiff_even_lc( this, & ! (in)
431 nx, ny, nz, vmapm, vmapp, vmapb, lmesh, elem )
441 real(rp),
intent(inout) :: var(elem%np*lmesh%nea)
442 logical,
intent(out) :: is_bound(elem%nfptot*lmesh%ne)
443 integer,
intent(in) :: varid
444 integer,
intent(in) :: domid
445 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
446 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
447 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
448 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
449 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
450 integer,
intent(in) :: vmapb(:)
452 integer :: i, i_, im, ip
453 real(rp) :: grad_normal
456 do i=1, elem%NfpTot*lmesh%Ne
458 i_ = ip - elem%Np*lmesh%NeE
459 is_bound(i) = .false.
467 grad_normal = var(im) * nx(i)
468 var(ip) = var(im) - 2.0_rp * grad_normal * nx(i)
470 grad_normal = var(im) * ny(i)
471 var(ip) = var(im) - 2.0_rp * grad_normal * ny(i)
473 grad_normal = var(im) * nz(i)
474 var(ip) = var(im) - 2.0_rp * grad_normal * nz(i)
480 case( momx_vid, momy_vid, momz_vid )
490 end subroutine atmos_dyn_bnd_applybc_numdiff_even_lc
496 subroutine atmos_dyn_bnd_applybc_tbvars_lc( this, &
498 ddens, momx, momy, momz, pt, pres, &
499 dens_hyd, pres_hyd, rtot, cptot, &
500 gsqrt, gsqrth, g11, g12, g22, g13, g23, nx, ny, nz, &
501 vmapm, vmapp, vmapb, lmesh, elem, lmesh2d, elem2d )
503 use scale_const,
only: &
504 pres00 => const_pre00
512 integer,
intent(in) :: domid
517 real(rp),
intent(inout) :: ddens(elem%np*lmesh%nea)
518 real(rp),
intent(inout) :: momx(elem%np*lmesh%nea)
519 real(rp),
intent(inout) :: momy(elem%np*lmesh%nea)
520 real(rp),
intent(inout) :: momz(elem%np*lmesh%nea)
521 real(rp),
intent(inout) :: pt(elem%np*lmesh%nea)
522 real(rp),
intent(inout) :: pres(elem%np*lmesh%nea)
523 real(rp),
intent(in) :: dens_hyd(elem%np*lmesh%nea)
524 real(rp),
intent(in) :: pres_hyd(elem%np*lmesh%nea)
525 real(rp),
intent(in) :: rtot(elem%np*lmesh%nea)
526 real(rp),
intent(in) :: cptot(elem%np*lmesh%nea)
527 real(rp),
intent(in) :: gsqrt(elem%np*lmesh%nea)
528 real(rp),
intent(in) :: gsqrth(elem2d%np,lmesh2d%ne)
529 real(rp),
intent(in) :: g11(elem2d%np,lmesh2d%ne)
530 real(rp),
intent(in) :: g12(elem2d%np,lmesh2d%ne)
531 real(rp),
intent(in) :: g22(elem2d%np,lmesh2d%ne)
532 real(rp),
intent(in) :: g13(elem%np*lmesh%nea)
533 real(rp),
intent(in) :: g23(elem%np*lmesh%nea)
534 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
535 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
536 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
537 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
538 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
539 integer,
intent(in) :: vmapb(:)
541 integer :: p, ke, ke2d
542 integer :: i, i_, im, ip
543 real(rp) :: mom_normal
546 real(rp) :: temp_p, temp_b
547 real(rp) :: gsqrtv, g11_, g12_, g22_
555 do ke=lmesh%NeS, lmesh%NeE
557 i = p + (ke-1)*elem%NfpTot
559 i_ = ip - elem%Np*lmesh%NeE
564 select case( this%VelBC_list(domid)%list(i_) )
566 ke2d = lmesh%EMap3Dto2D(ke)
568 gsqrtv = gsqrt(im) / gsqrth(elem%IndexH2Dto3D_bnd(p),ke2d)
569 g11_ = g11(elem%IndexH2Dto3D_bnd(p),ke2d)
570 g12_ = g12(elem%IndexH2Dto3D_bnd(p),ke2d)
571 g22_ = g22(elem%IndexH2Dto3D_bnd(p),ke2d)
573 momw = momz(im) / gsqrtv &
574 + g13(im) * momx(im) + g23(im) * momy(im)
575 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 )
577 mom_normal = momx(im) * nx(i) + momy(im) * ny(i) + momw * nz(i)
578 momx(ip) = momx(im) - 2.0_rp * mom_normal * ( nx(i) + fac * ( g11_ * g13(im) + g12_ * g23(im) ) )
579 momy(ip) = momy(im) - 2.0_rp * mom_normal * ( ny(i) + fac * ( g12_ * g13(im) + g22_ * g23(im) ) )
580 momz(ip) = momz(im) - 2.0_rp * mom_normal * fac / gsqrtv
583 momx(ip) = - momx(im)
584 momy(ip) = - momy(im)
585 momz(ip) = - momz(im)
588 select case( this%ThermalBC_list(domid)%list(i_) )
590 temp_b = this%ThermalBC_list(domid)%val(i_)
591 temp_p = 2.0_rp * temp_b - pres(im) / ( ( dens_hyd(im) + ddens(im) ) * rtot(im) )
592 pt(ip) = temp_p * ( pres00 / pres(im) )**(rtot(im)/cptot(im))
593 ddens(ip) = pres(im) / ( rtot(im) * temp_p ) - dens_hyd(im)
601 end subroutine atmos_dyn_bnd_applybc_tbvars_lc
608 subroutine atmos_dyn_bnd_applybc_tbstress_lc( this, &
610 t11, t12, t13, t21, t22, t23, t31, t32, t33, &
612 gsqrt, gsqrth, g11, g12, g22, g13, g23, nx, ny, nz, &
613 vmapm, vmapp, vmapb, lmesh, elem, lmesh2d, elem2d )
622 integer,
intent(in) :: domid
627 real(rp),
intent(inout) :: t11(elem%np*lmesh%nea), t12(elem%np*lmesh%nea), t13(elem%np*lmesh%nea)
628 real(rp),
intent(inout) :: t21(elem%np*lmesh%nea), t22(elem%np*lmesh%nea), t23(elem%np*lmesh%nea)
629 real(rp),
intent(inout) :: t31(elem%np*lmesh%nea), t32(elem%np*lmesh%nea), t33(elem%np*lmesh%nea)
630 real(rp),
intent(inout) :: df1(elem%np*lmesh%nea), df2(elem%np*lmesh%nea), df3(elem%np*lmesh%nea)
631 real(rp),
intent(in) :: gsqrt(elem%np*lmesh%nea)
632 real(rp),
intent(in) :: gsqrth(elem2d%np,lmesh2d%ne)
633 real(rp),
intent(in) :: g11(elem2d%np,lmesh2d%ne)
634 real(rp),
intent(in) :: g12(elem2d%np,lmesh2d%ne)
635 real(rp),
intent(in) :: g22(elem2d%np,lmesh2d%ne)
636 real(rp),
intent(in) :: g13(elem%np*lmesh%nea)
637 real(rp),
intent(in) :: g23(elem%np*lmesh%nea)
638 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
639 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
640 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
641 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
642 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
643 integer,
intent(in) :: vmapb(:)
645 integer :: p, ke, ke2d
646 integer :: i, i_, im, ip
648 real(rp) :: gsqrtv, g11_, g12_, g22_
649 real(rp) :: fac, normal_vec(3)
651 real(rp) :: stress_t_tmp, stress_t_tmpvec(3)
653 real(rp) :: normal_flux
660 do ke=lmesh%NeS, lmesh%NeE
662 i = p + (ke-1)*elem%NfpTot
664 i_ = ip - elem%Np*lmesh%NeE
667 ke2d = lmesh%EMap3Dto2D(ke)
670 gsqrtv = gsqrt(im) / gsqrth(elem%IndexH2Dto3D_bnd(p),ke2d)
671 g11_ = g11(elem%IndexH2Dto3D_bnd(p),ke2d)
672 g12_ = g12(elem%IndexH2Dto3D_bnd(p),ke2d)
673 g22_ = g22(elem%IndexH2Dto3D_bnd(p),ke2d)
674 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 )
675 normal_vec(1) = nx(i) + fac * ( g11_ * g13(im) + g12_ * g23(im) )
676 normal_vec(2) = ny(i) + fac * ( g12_ * g13(im) + g22_ * g23(im) )
677 normal_vec(3) = fac / gsqrtv
679 select case( this%VelBC_list(domid)%list(i_) )
681 vecw = t13(im) / gsqrtv + g13(im) * t11(im) + g23(im) * t12(im)
682 stress_t_tmpvec(1) = t11(im) * nx(i) + t12(im) * ny(i) + vecw * nz(i)
684 vecw = t23(im) / gsqrtv + g13(im) * t21(im) + g23(im) * t22(im)
685 stress_t_tmpvec(2) = t21(im) * nx(i) + t22(im) * ny(i) + vecw * nz(i)
687 vecw = t33(im) / gsqrtv
688 stress_t_tmpvec(3) = t31(im) * nx(i) + t32(im) * ny(i) + vecw * nz(i)
690 stress_t_tmp = sum( stress_t_tmpvec(:) * normal_vec(:) )
691 stress_t_tmpvec(:) = stress_t_tmpvec(:) - stress_t_tmp * normal_vec(:)
694 t11(ip) = t11(im) - 2.0_rp * stress_t_tmpvec(1) * normal_vec(1)
695 t12(ip) = t12(im) - 2.0_rp * stress_t_tmpvec(1) * normal_vec(2)
696 t13(ip) = t13(im) - 2.0_rp * stress_t_tmpvec(1) * normal_vec(3)
699 t21(ip) = t21(im) - 2.0_rp * stress_t_tmpvec(2) * normal_vec(1)
700 t22(ip) = t22(im) - 2.0_rp * stress_t_tmpvec(2) * normal_vec(2)
701 t23(ip) = t23(im) - 2.0_rp * stress_t_tmpvec(2) * normal_vec(3)
704 t31(ip) = t31(im) - 2.0_rp * stress_t_tmpvec(3) * normal_vec(1)
705 t32(ip) = t32(im) - 2.0_rp * stress_t_tmpvec(3) * normal_vec(2)
706 t33(ip) = t33(im) - 2.0_rp * stress_t_tmpvec(3) * normal_vec(3)
711 select case( this%ThermalBC_list(domid)%list(i_) )
713 normal_flux = df1(im) * nx(i) + df2(im) * ny(i) &
714 + ( df3(im) / gsqrtv + g13(im) * df1(im) + g23(im) * df2(im) ) * nz(i)
715 df1(ip) = df1(im) - 2.0_rp * normal_flux * normal_vec(1)
716 df2(ip) = df2(im) - 2.0_rp * normal_flux * normal_vec(2)
717 df3(ip) = df3(im) - 2.0_rp * normal_flux * normal_vec(3)
724 end subroutine atmos_dyn_bnd_applybc_tbstress_lc
727 subroutine atmos_dyn_bnd_inquire_bound_flag( this, & ! (in)
729 domid, vmapm, vmapp, vmapb, lmesh, elem )
739 logical,
intent(out) :: is_bound(elem%nfptot*lmesh%ne)
740 integer,
intent(in) :: domid
741 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
742 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
743 integer,
intent(in) :: vmapb(:)
745 integer :: i, i_, im, ip
748 do i=1, elem%NfpTot*lmesh%Ne
750 i_ = ip - elem%Np*lmesh%NeE
751 is_bound(i) = .false.
765 end subroutine atmos_dyn_bnd_inquire_bound_flag
770 subroutine bnd_init_lc( &
771 velBCInfo, thermalBCInfo, & ! (inout)
772 velbc_ids, thermalbc_ids, &
774 vmapb, mesh, lmesh, elem )
781 integer,
intent(in) :: velbc_ids(dom_bnd_num)
782 integer,
intent(in) :: thermalbc_ids(dom_bnd_num)
783 real(rp),
intent(in) :: thermal_fixval(dom_bnd_num)
787 integer,
intent(in) :: vmapb(:)
790 integer :: dom_bnd_sizes(dom_bnd_num)
791 integer :: bnd_buf_size
792 integer :: b, is_, ie_
797 elem%Nfp_h*lmesh%NeZ*(/ lmesh%NeX, lmesh%NeY, lmesh%NeX, lmesh%NeY, 0, 0 /) &
798 + elem%Nfp_v*lmesh%NeX*lmesh%NeY*(/ 0, 0, 0, 0, 1, 1 /)
799 bnd_buf_size = sum(dom_bnd_sizes)
801 call velbcinfo%Init( bnd_buf_size )
804 call thermalbcinfo%Init( bnd_buf_size )
807 tileid = lmesh%tileID
810 ie_ = is_ + dom_bnd_sizes(b) - 1
811 if ( mesh%tileID_globalMap(b,tileid) == tileid &
812 .and. mesh%tileFaceID_globalMap(b,tileid) == b )
then
813 call velbcinfo%Set( is_, ie_, velbc_ids(b) )
814 call thermalbcinfo%Set( is_, ie_, thermalbc_ids(b), thermal_fixval(b) )
820 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 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 representing a field with 3D mesh.