11#include "scaleFElib.h"
54 integer :: nd_laplacian_num
61 integer :: numdiff_flux_commid
65 integer :: numdiff_tend_commid
68 procedure :: init => atm_dyn_dgm_nonhydro3d_numdiff_init
69 procedure :: final => atm_dyn_dgm_nonhydro3d_numdiff_final
70 procedure :: apply => atm_dyn_dgm_nonhydro3d_numdiff_apply
85 '?.m/s', 3,
'XYZ',
'' ), &
87 '?.m/s', 3,
'XYZ',
'' ), &
89 '?.m/s', 3,
'XYZ',
'' ) /
99 '?/s', 3,
'XYZ',
'' ), &
101 '?/s', 3,
'XYZ',
'' ) /
109 private :: numdiff_tend
110 private :: numdiff_cal_laplacian
111 private :: numdiff_cal_flx
113 private :: cal_del_flux_lap
114 private :: cal_del_flux_lap_with_coef
115 private :: cal_del_graddiffvar
119 subroutine atm_dyn_dgm_nonhydro3d_numdiff_init( this, model_mesh3D, dtsec )
120 use scale_prc,
only: prc_abort
123 class(
modelmesh3d),
intent(inout),
target :: model_mesh3d
124 real(rp),
intent(in) :: dtsec
129 integer :: nd_laplacian_num = 1
130 real(rp) :: nd_coef_h = 0.0_rp
131 real(rp) :: nd_coef_v = 0.0_rp
133 namelist /param_atmos_dyn_numdiff/ &
143 read(io_fid_conf,nml=param_atmos_dyn_numdiff,iostat=ierr)
145 log_info(
"ATMOS_DYN_setup_numdiff",*)
'Not found namelist. Default used.'
146 elseif( ierr > 0 )
then
147 log_error(
"ATMOS_DYN_setup_numdiff",*)
'Not appropriate names in namelist PARAM_ATMOS_DYN_NUMDIFF. Check!'
150 log_nml(param_atmos_dyn_numdiff)
152 this%ND_LAPLACIAN_NUM = nd_laplacian_num
153 this%ND_COEF_H = nd_coef_h
154 this%ND_COEF_v = nd_coef_v
159 mesh3d => model_mesh3d%ptr_mesh
161 call this%NUMDIFF_FLUX_manager%Init()
165 call this%NUMDIFF_FLUX_manager%Regist( &
167 this%NUMDIFF_FLUX_VARS3D(v), &
168 .false., fill_zero=.true. )
171 call model_mesh3d%Create_communicator( &
173 this%NUMDIFF_FLUX_manager, &
174 this%NUMDIFF_FLUX_VARS3D(:), &
175 this%NUMDIFF_FLUX_commid )
178 call this%NUMDIFF_TEND_manager%Init()
182 call this%NUMDIFF_TEND_manager%Regist( &
184 this%NUMDIFF_TEND_VARS3D(v), &
185 .false., fill_zero=.true. )
188 call model_mesh3d%Create_communicator( &
190 this%NUMDIFF_TEND_manager, &
191 this%NUMDIFF_TEND_VARS3D(:), &
192 this%NUMDIFF_TEND_commid )
195 end subroutine atm_dyn_dgm_nonhydro3d_numdiff_init
198 subroutine atm_dyn_dgm_nonhydro3d_numdiff_final( this )
204 call this%NUMDIFF_FLUX_manager%Final()
205 deallocate( this%NUMDIFF_FLUX_VARS3D )
207 call this%NUMDIFF_TEND_manager%Final()
208 deallocate( this%NUMDIFF_TEND_VARS3D )
211 end subroutine atm_dyn_dgm_nonhydro3d_numdiff_final
214 subroutine atm_dyn_dgm_nonhydro3d_numdiff_apply( this, &
215 PROG_VARS, AUX_VARS, boundary_cond, &
216 Dx, Dy, Dz, Lift, mesh )
223 class(
atmdynbnd),
intent(in) :: boundary_cond
224 type(
sparsemat),
intent(in) :: dx, dy, dz, lift
230 call prog_vars%Get3D(dens_vid, ddens)
231 call aux_vars%Get3D(denshyd_vid, dens_hyd)
233 call prog_vars%MeshFieldComm_Exchange()
235 call apply_numfilter( this, therm_vid, prog_vars, boundary_cond, ddens, dens_hyd, dx, dy, dz, lift, mesh )
236 call apply_numfilter( this, momz_vid, prog_vars, boundary_cond, ddens, dens_hyd, dx, dy, dz, lift, mesh )
237 call apply_numfilter( this, momx_vid, prog_vars, boundary_cond, ddens, dens_hyd, dx, dy, dz, lift, mesh )
238 call apply_numfilter( this, momy_vid, prog_vars, boundary_cond, ddens, dens_hyd, dx, dy, dz, lift, mesh )
239 call apply_numfilter( this, dens_vid, prog_vars, boundary_cond, ddens, dens_hyd, dx, dy, dz, lift, mesh )
242 end subroutine atm_dyn_dgm_nonhydro3d_numdiff_apply
247 subroutine apply_numfilter( this, varid, prgvars_list, boundary_cond, DDENS, DENS_hyd, &
248 Dx, Dy, Dz, Lift, mesh )
256 integer,
intent(in) :: varid
258 class(
atmdynbnd),
intent(in) :: boundary_cond
261 type(
sparsemat),
intent(in) :: dx, dy, dz, lift
265 class(
meshfield3d),
pointer :: nd_flx_x, nd_flx_y, nd_flx_z
266 class(
meshfield3d),
pointer :: nd_lapla_h, nd_lapla_v
274 logical :: dens_weight_flag
275 logical,
allocatable :: is_bound(:,:)
277 real(rp),
allocatable :: tmp_tend(:,:)
280 nd_sign = (-1)**(mod(this%ND_LAPLACIAN_NUM+1,2))
283 call prgvars_list%Get3D(varid, var)
291 do n=1, mesh%LOCAL_MESH_NUM
292 lcmesh => mesh%lcmesh_list(n)
294 allocate( is_bound(lcmesh%refElem%NfpTot,lcmesh%Ne) )
295 call boundary_cond%ApplyBC_numdiff_even_lc( var%local(n)%val, is_bound, varid, n, &
296 lcmesh%normal_fn(:,:,1), lcmesh%normal_fn(:,:,2), lcmesh%normal_fn(:,:,3), &
297 lcmesh%vmapM, lcmesh%vmapP, lcmesh%vmapB, lcmesh, lcmesh%refElem3D )
299 call numdiff_cal_flx( &
300 nd_flx_x%local(n)%val, nd_flx_y%local(n)%val, nd_flx_z%local(n)%val, &
301 var%local(n)%val, var%local(n)%val, ddens%local(n)%val, dens_hyd%local(n)%val, &
302 dx, dy, dz, lift, lcmesh, lcmesh%refElem3D, is_bound, dens_weight_flag )
304 deallocate( is_bound )
308 call this%NUMDIFF_FLUX_manager%MeshFieldComm_Exchange()
310 do nd_itr=1, this%ND_LAPLACIAN_NUM-1
311 do n = 1, mesh%LOCAL_MESH_NUM
312 lcmesh => mesh%lcmesh_list(n)
314 allocate( is_bound(lcmesh%refElem%NfpTot,lcmesh%Ne) )
315 call boundary_cond%ApplyBC_numdiff_odd_lc( &
316 nd_flx_x%local(n)%val, nd_flx_y%local(n)%val, nd_flx_z%local(n)%val, is_bound, varid, n, &
317 lcmesh%normal_fn(:,:,1), lcmesh%normal_fn(:,:,2), lcmesh%normal_fn(:,:,3), &
318 lcmesh%vmapM, lcmesh%vmapP, lcmesh%vmapB, lcmesh, lcmesh%refElem3D )
320 call numdiff_cal_laplacian( &
321 nd_lapla_h%local(n)%val, nd_lapla_v%local(n)%val, &
322 nd_flx_x%local(n)%val, nd_flx_y%local(n)%val, nd_flx_z%local(n)%val, &
323 dx, dy, dz, lift, lcmesh, lcmesh%refElem3D, is_bound )
325 deallocate( is_bound )
328 call this%NUMDIFF_TEND_manager%MeshFieldComm_Exchange()
330 do n = 1, mesh%LOCAL_MESH_NUM
331 lcmesh => mesh%lcmesh_list(n)
333 allocate( is_bound(lcmesh%refElem%NfpTot,lcmesh%Ne) )
334 call boundary_cond%ApplyBC_numdiff_even_lc( &
335 nd_lapla_h%local(n)%val, is_bound, varid, n, &
336 lcmesh%normal_fn(:,:,1), lcmesh%normal_fn(:,:,2), lcmesh%normal_fn(:,:,3), &
337 lcmesh%vmapM, lcmesh%vmapP, lcmesh%vmapB, lcmesh, lcmesh%refElem3D )
339 call numdiff_cal_flx( &
340 nd_flx_x%local(n)%val, nd_flx_y%local(n)%val, nd_flx_z%local(n)%val, &
341 nd_lapla_h%local(n)%val, nd_lapla_v%local(n)%val, &
342 ddens%local(n)%val, dens_hyd%local(n)%val, &
343 dx, dy, dz, lift, lcmesh, lcmesh%refElem3D, is_bound, .false. )
345 deallocate( is_bound )
348 call this%NUMDIFF_FLUX_manager%MeshFieldComm_Exchange()
351 do n = 1, mesh%LOCAL_MESH_NUM
353 allocate( is_bound(lcmesh%refElem%NfpTot,lcmesh%Ne), tmp_tend(lcmesh%refElem3D%Np,lcmesh%NeA) )
355 call boundary_cond%ApplyBC_numdiff_odd_lc( &
356 nd_flx_x%local(n)%val, nd_flx_y%local(n)%val, nd_flx_z%local(n)%val, &
357 is_bound, varid, n, &
358 lcmesh%normal_fn(:,:,1), lcmesh%normal_fn(:,:,2), lcmesh%normal_fn(:,:,3), &
359 lcmesh%vmapM, lcmesh%vmapP, lcmesh%vmapB, lcmesh, lcmesh%refElem3D )
361 call numdiff_tend( tmp_tend(:,:), &
362 nd_flx_x%local(n)%val, nd_flx_y%local(n)%val, nd_flx_z%local(n)%val, &
363 ddens%local(n)%val, dens_hyd%local(n)%val, &
364 nd_sign * this%ND_COEF_H, nd_sign * this%ND_COEF_V, &
365 dx, dy, dz, lift, lcmesh, lcmesh%refElem3D, is_bound, dens_weight_flag )
368 do ke=lcmesh%NeS, lcmesh%NeE
369 var%local(n)%val(:,ke) = var%local(n)%val(:,ke) + this%dtsec * tmp_tend(:,ke)
372 deallocate( is_bound, tmp_tend )
376 end subroutine apply_numfilter
379 subroutine numdiff_tend( &
382 ddens_, dens_hyd, diffcoef_h, diffcoef_v, &
383 dx, dy, dz, lift, lmesh, elem, is_bound, mul_dens_flag )
389 type(
sparsemat),
intent(in) :: dx, dy, dz, lift
390 real(rp),
intent(inout) :: tend_(elem%np,lmesh%nea)
391 real(rp),
intent(in) :: gxv_(elem%np,lmesh%nea)
392 real(rp),
intent(in) :: gyv_(elem%np,lmesh%nea)
393 real(rp),
intent(in) :: gzv_(elem%np,lmesh%nea)
394 real(rp),
intent(in) :: ddens_(elem%np,lmesh%nea)
395 real(rp),
intent(in) :: dens_hyd(elem%np,lmesh%nea)
396 real(rp),
intent(in) :: diffcoef_h
397 real(rp),
intent(in) :: diffcoef_v
398 logical,
intent(in) :: is_bound(elem%nfptot,lmesh%ne)
399 logical,
intent(in) :: mul_dens_flag
401 real(rp) :: del_flux(elem%nfptot,lmesh%ne)
402 real(rp) :: coef_h(elem%np), coef_v(elem%np)
403 real(rp) :: fx(elem%np), fy(elem%np), fz(elem%np), liftdelflx(elem%np)
409 call cal_del_flux_lap_with_coef( del_flux, &
411 ddens_, dens_hyd, diffcoef_h, diffcoef_v, &
412 lmesh%normal_fn(:,:,1), lmesh%normal_fn(:,:,2), lmesh%normal_fn(:,:,3), &
413 lmesh%vmapM, lmesh%vmapP, &
414 lmesh, elem, is_bound, mul_dens_flag )
418 do ke = lmesh%NeS, lmesh%NeE
420 if (mul_dens_flag)
then
421 coef_h(:) = diffcoef_h * (dens_hyd(:,ke) + ddens_(:,ke))
422 coef_v(:) = diffcoef_v * (dens_hyd(:,ke) + ddens_(:,ke))
424 coef_h(:) = diffcoef_h
425 coef_v(:) = diffcoef_v
430 call sparsemat_matmul(lift, lmesh%Fscale(:,ke) * del_flux(:,ke), liftdelflx)
433 lmesh%Escale(:,ke,1,1) * fx(:) &
434 + lmesh%Escale(:,ke,2,2) * fy(:) &
435 + lmesh%Escale(:,ke,3,3) * fz(:) &
440 end subroutine numdiff_tend
443 subroutine cal_del_flux_lap_with_coef( del_flux, & ! (out)
445 ddens_, dens_hyd, coef_h, coef_v, &
446 nx, ny, nz, vmapm, vmapp, lmesh, elem, &
447 is_bound, mul_dens_flag )
453 real(rp),
intent(out) :: del_flux(elem%nfptot*lmesh%ne)
454 real(rp),
intent(in) :: gxv_(elem%np*lmesh%nea)
455 real(rp),
intent(in) :: gyv_(elem%np*lmesh%nea)
456 real(rp),
intent(in) :: gzv_(elem%np*lmesh%nea)
457 real(rp),
intent(in) :: ddens_(elem%np*lmesh%nea)
458 real(rp),
intent(in) :: dens_hyd(elem%np*lmesh%nea)
459 real(rp),
intent(in) :: coef_h
460 real(rp),
intent(in) :: coef_v
461 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
462 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
463 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
464 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
465 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
466 logical,
intent(in) :: is_bound(elem%nfptot*lmesh%ne)
467 logical,
intent(in) :: mul_dens_flag
470 real(rp) :: weightp, weightm
475 do i=1, elem%NfpTot*lmesh%Ne
476 im = vmapm(i); ip = vmapp(i)
478 if (mul_dens_flag)
then
479 weightm = 0.5_rp * (dens_hyd(im) + ddens_(im))
480 weightp = 0.5_rp * (dens_hyd(ip) + ddens_(ip))
486 if (is_bound(i))
then
488 coef_h * ( weightp * gxv_(ip) - weightm * gxv_(im) ) * nx(i) &
489 + coef_h * ( weightp * gyv_(ip) - weightm * gyv_(im) ) * ny(i) &
490 + coef_v * ( weightp * gzv_(ip) - weightm * gzv_(im) ) * nz(i)
493 ( 1.0_rp + sign(1.0_rp,nx(i)) ) * coef_h * ( weightp * gxv_(ip) - weightm * gxv_(im) ) * nx(i) &
494 + ( 1.0_rp + sign(1.0_rp,ny(i)) ) * coef_h * ( weightp * gyv_(ip) - weightm * gyv_(im) ) * ny(i) &
495 + ( 1.0_rp + sign(1.0_rp,nz(i)) ) * coef_v * ( weightp * gzv_(ip) - weightm * gzv_(im) ) * nz(i)
500 end subroutine cal_del_flux_lap_with_coef
505 subroutine numdiff_cal_laplacian( &
506 lapla_h, lapla_v, & ! (out)
508 dx, dy, dz, lift, lmesh, elem, is_bound )
514 type(
sparsemat),
intent(in) :: dx, dy, dz, lift
515 real(rp),
intent(out) :: lapla_h(elem%np,lmesh%nea)
516 real(rp),
intent(out) :: lapla_v(elem%np,lmesh%nea)
517 real(rp),
intent(in) :: gxv_(elem%np,lmesh%nea)
518 real(rp),
intent(in) :: gyv_(elem%np,lmesh%nea)
519 real(rp),
intent(in) :: gzv_(elem%np,lmesh%nea)
520 logical,
intent(in) :: is_bound(elem%nfptot,lmesh%ne)
522 real(rp) :: del_flux_h(elem%nfptot,lmesh%ne)
523 real(rp) :: del_flux_v(elem%nfptot,lmesh%ne)
524 real(rp) :: fx(elem%np), fy(elem%np), fz(elem%np), liftdelflx(elem%np)
529 call cal_del_flux_lap( del_flux_h, del_flux_v, &
531 lmesh%normal_fn(:,:,1), lmesh%normal_fn(:,:,2), lmesh%normal_fn(:,:,3), &
532 lmesh%vmapM, lmesh%vmapP, &
533 lmesh, elem, is_bound )
537 do ke = lmesh%NeS, lmesh%NeE
541 call sparsemat_matmul(lift, lmesh%Fscale(:,ke)*del_flux_h(:,ke), liftdelflx)
544 lmesh%Escale(:,ke,1,1) * fx(:) &
545 + lmesh%Escale(:,ke,2,2) * fy(:) &
550 call sparsemat_matmul(lift, lmesh%Fscale(:,ke)*del_flux_v(:,ke), liftdelflx)
552 lmesh%Escale(:,ke,3,3) * fz(:) &
558 end subroutine numdiff_cal_laplacian
561 subroutine cal_del_flux_lap( del_flux_h, del_flux_v, & ! (out)
563 nx, ny, nz, vmapm, vmapp, lmesh, elem, is_bound )
569 real(rp),
intent(out) :: del_flux_h(elem%nfptot*lmesh%ne)
570 real(rp),
intent(out) :: del_flux_v(elem%nfptot*lmesh%ne)
571 real(rp),
intent(in) :: gxv_(elem%np*lmesh%nea)
572 real(rp),
intent(in) :: gyv_(elem%np*lmesh%nea)
573 real(rp),
intent(in) :: gzv_(elem%np*lmesh%nea)
574 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
575 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
576 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
577 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
578 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
579 logical,
intent(in) :: is_bound(elem%nfptot*lmesh%ne)
586 do i=1, elem%NfpTot*lmesh%Ne
587 im = vmapm(i); ip = vmapp(i)
589 if (is_bound(i))
then
590 del_flux_h(i) = 0.5_rp * ( ( gxv_(ip) - gxv_(im) ) * nx(i) &
591 + ( gyv_(ip) - gyv_(im) ) * ny(i) )
592 del_flux_v(i) = 0.5_rp * ( gzv_(ip) - gzv_(im) ) * nz(i)
594 del_flux_h(i) = 0.5_rp * ( ( 1.0_rp + sign(1.0_rp,nx(i)) ) * ( gxv_(ip) - gxv_(im) ) * nx(i) &
595 + ( 1.0_rp + sign(1.0_rp,ny(i)) ) * ( gyv_(ip) - gyv_(im) ) * ny(i) )
596 del_flux_v(i) = 0.5_rp * ( 1.0_rp + sign(1.0_rp,nz(i)) ) * ( gzv_(ip) - gzv_(im) ) * nz(i)
601 end subroutine cal_del_flux_lap
606 subroutine numdiff_cal_flx( &
607 GxV_, GyV_, GzV_, & ! (out)
608 varh_, varv_, ddens_, dens_hyd_, &
609 dx, dy, dz, lift, lmesh, elem, is_bound, divide_dens_flag )
615 type(
sparsemat),
intent(in) :: dx, dy, dz, lift
616 real(rp),
intent(out) :: gxv_(elem%np,lmesh%nea)
617 real(rp),
intent(out) :: gyv_(elem%np,lmesh%nea)
618 real(rp),
intent(out) :: gzv_(elem%np,lmesh%nea)
619 real(rp),
intent(in) :: varh_(elem%np,lmesh%nea)
620 real(rp),
intent(in) :: varv_(elem%np,lmesh%nea)
621 real(rp),
intent(in) :: ddens_(elem%np,lmesh%nea)
622 real(rp),
intent(in) :: dens_hyd_(elem%np,lmesh%nea)
623 logical,
intent(in) :: is_bound(elem%nfptot,lmesh%ne)
624 logical,
intent(in) :: divide_dens_flag
626 real(rp) :: fx(elem%np), fy(elem%np), fz(elem%np), liftdelflx(elem%np)
627 real(rp) :: vh(elem%np), vv(elem%np)
628 real(rp) :: del_flux(elem%nfptot,lmesh%ne,3)
634 call cal_del_graddiffvar( del_flux, &
635 varh_, varv_, ddens_, dens_hyd_, &
636 lmesh%normal_fn(:,:,1), lmesh%normal_fn(:,:,2), lmesh%normal_fn(:,:,3), &
637 lmesh%vmapM, lmesh%vmapP, &
638 lmesh, elem, is_bound, divide_dens_flag )
641 do ke=lmesh%NeS, lmesh%NeE
643 if (divide_dens_flag)
then
644 vh(:) = varh_(:,ke) / (ddens_(:,ke) + dens_hyd_(:,ke))
645 vv(:) = varv_(:,ke) / (ddens_(:,ke) + dens_hyd_(:,ke))
652 call sparsemat_matmul(lift, lmesh%Fscale(:,ke) * del_flux(:,ke,1), liftdelflx)
653 gxv_(:,ke) = lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:)
656 call sparsemat_matmul(lift, lmesh%Fscale(:,ke) * del_flux(:,ke,2), liftdelflx)
657 gyv_(:,ke) = lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:)
660 call sparsemat_matmul(lift, lmesh%Fscale(:,ke) * del_flux(:,ke,3), liftdelflx)
661 gzv_(:,ke) = lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:)
665 end subroutine numdiff_cal_flx
668 subroutine cal_del_graddiffvar( del_flux, & ! (out)
669 varh_, varv_, ddens_, dens_hyd_, &
670 nx, ny, nz, vmapm, vmapp, lmesh, elem, &
671 is_bound, divide_dens_flag )
677 real(rp),
intent(out) :: del_flux(elem%nfptot*lmesh%ne,3)
678 real(rp),
intent(in) :: varh_(elem%np*lmesh%nea)
679 real(rp),
intent(in) :: varv_(elem%np*lmesh%nea)
680 real(rp),
intent(in) :: ddens_(elem%np*lmesh%nea)
681 real(rp),
intent(in) :: dens_hyd_(elem%np*lmesh%nea)
682 real(rp),
intent(in) :: nx(elem%nfptot*lmesh%ne)
683 real(rp),
intent(in) :: ny(elem%nfptot*lmesh%ne)
684 real(rp),
intent(in) :: nz(elem%nfptot*lmesh%ne)
685 integer,
intent(in) :: vmapm(elem%nfptot*lmesh%ne)
686 integer,
intent(in) :: vmapp(elem%nfptot*lmesh%ne)
687 logical,
intent(in) :: is_bound(elem%nfptot*lmesh%ne)
688 logical,
intent(in) :: divide_dens_flag
691 real(rp) :: delvarh, delvarv
692 real(rp) :: weight_p, weight_m
696 do i=1, elem%NfpTot*lmesh%Ne
697 im = vmapm(i); ip = vmapp(i)
699 if (divide_dens_flag)
then
700 weight_p = 1.0_rp / (ddens_(ip) + dens_hyd_(ip))
701 weight_m = 1.0_rp / (ddens_(im) + dens_hyd_(im))
707 delvarh = 0.5_rp * (varh_(ip) * weight_p - varh_(im) * weight_m)
708 delvarv = 0.5_rp * (varv_(ip) * weight_p - varv_(im) * weight_m)
709 if (is_bound(i))
then
710 del_flux(i,1) = delvarh * nx(i)
711 del_flux(i,2) = delvarh * ny(i)
712 del_flux(i,3) = delvarv * nz(i)
714 del_flux(i,1) = ( 1.0_rp - sign(1.0_rp,nx(i)) ) * delvarh * nx(i)
715 del_flux(i,2) = ( 1.0_rp - sign(1.0_rp,ny(i)) ) * delvarh * ny(i)
716 del_flux(i,3) = ( 1.0_rp - sign(1.0_rp,nz(i)) ) * delvarv * nz(i)
721 end subroutine cal_del_graddiffvar
module FElib / Fluid dyn solver / Atmosphere / Boundary
module FElib / Fluid dyn solver / Atmosphere / Nonhydrostatic model / Common
integer, parameter, public prgvar_momy_id
integer, parameter, public prgvar_therm_id
integer, parameter, public prgvar_ddens_id
integer, parameter, public prgvar_momz_id
integer, parameter, public prgvar_momx_id
integer, parameter, public prgvar_num
integer, parameter, public auxvar_denshydro_id
module Atmosphere / Dynamics common
type(variableinfo), dimension(numdiff_tend_num), public atmos_dyn_numdiff_tend_vinfo
integer, parameter, public numdiff_laplah_id
integer, parameter, public numdiff_laplav_id
integer, parameter, public numdiffflx_x_id
integer, parameter, public numdiffflx_y_id
integer, parameter, public numdiff_flux_num
type(variableinfo), dimension(numdiff_flux_num), public atmos_dyn_numdiff_flux_vinfo
integer, parameter, public numdiffflx_z_id
integer, parameter, public numdiff_tend_num
module FElib / Element / Base
module FElib / Element / hexahedron
module FElib / Mesh / Local 2D
module FElib / Mesh / Local 3D
module FElib / Data / base
module FElib / Mesh / Base 3D
module FElib / Mesh / Base
module FElib / Data / base
FElib / model framework / mesh manager.
FElib / model framework / variable manager.
Module common / sparsemat.
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 a hexahedral element.
Derived type representing a local mesh for 2D domain.
Derived type to manage a local 3D computational domain.
Derived type representing a field with 3D local mesh.
Derived type to manage a computational mesh (base type for 3D domain)
Base type to manage a computational mesh.
Derived type representing a field with 3D mesh.
Derived type to manage a sparse matrix.