ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_InitCustomPertVels_Terrain3DHemisphere.H File Reference

Go to the source code of this file.

Functions

ParmParse pp_for_pert_vels ("prob")
 
pp_for_pert_vels query ("U_0", U_0)
 
pp_for_pert_vels query ("V_0", V_0)
 
pp_for_pert_vels query ("U_0_Pert_Mag", U_0_Pert_Mag)
 
pp_for_pert_vels query ("V_0_Pert_Mag", V_0_Pert_Mag)
 
pp_for_pert_vels query ("W_0_Pert_Mag", W_0_Pert_Mag)
 
pp_for_pert_vels query ("pert_deltaU", pert_deltaU)
 
pp_for_pert_vels query ("pert_deltaV", pert_deltaV)
 
pp_for_pert_vels query ("pert_periods_U", pert_periods_U)
 
pp_for_pert_vels query ("pert_periods_V", pert_periods_V)
 
pp_for_pert_vels query ("pert_ref_height", pert_ref_height)
 
 ParallelForRNG (xbx, [=] AMREX_GPU_DEVICE(int i, int j, int k, const amrex::RandomEngine &engine) noexcept { const Real *prob_lo=geomdata.ProbLo();const Real *dx=geomdata.CellSize();const Real z=use_terrain ? 0.25 *(z_nd(i, j, k)+z_nd(i, j, k+1)+z_nd(i, j+1, k)+z_nd(i, j+1, k+1)) :prob_lo[2]+(k+0.5) *dx[2];x_vel_pert(i, j, k)=0.0;if((z<=pert_ref_height) &&(U_0_Pert_Mag !=0.0)) { Real rand_double=amrex::Random(engine);Real x_vel_prime=(rand_double *2.0 - 1.0) *U_0_Pert_Mag;x_vel_pert(i, j, k)+=x_vel_prime;} })
 
 ParallelForRNG (ybx, [=] AMREX_GPU_DEVICE(int i, int j, int k, const amrex::RandomEngine &engine) noexcept { const Real *prob_lo=geomdata.ProbLo();const Real *dx=geomdata.CellSize();const Real x=prob_lo[0]+(i+0.5) *dx[0];const Real z=use_terrain ? 0.25 *(z_nd(i, j, k)+z_nd(i, j, k+1)+z_nd(i+1, j, k)+z_nd(i+1, j, k+1)) :prob_lo[2]+(k+0.5) *dx[2];y_vel_pert(i, j, k)=0.0;if((z<=pert_ref_height) &&(V_0_Pert_Mag !=0.0)) { Real rand_double=amrex::Random(engine);Real y_vel_prime=(rand_double *2.0 - 1.0) *V_0_Pert_Mag;y_vel_pert(i, j, k)+=y_vel_prime;} if(pert_deltaV !=0.0) { const Real xl=x - prob_lo[0];const Real zl=z/pert_ref_height;const Real damp=std::exp(-0.5 *zl *zl);y_vel_pert(i, j, k)+=vfac *damp *z *std::cos(bval *xl);} })
 
 ParallelForRNG (zbx, [=] AMREX_GPU_DEVICE(int i, int j, int k, const amrex::RandomEngine &engine) noexcept { const int dom_lo_z=geomdata.Domain().smallEnd()[2];const int dom_hi_z=geomdata.Domain().bigEnd()[2];if(k==dom_lo_z||k==dom_hi_z+1) { z_vel_pert(i, j, k)=0.0;} else if(W_0_Pert_Mag !=0.0) { Real rand_double=amrex::Random(engine);Real z_vel_prime=(rand_double *2.0 - 1.0) *W_0_Pert_Mag;z_vel_pert(i, j, k)=z_vel_prime;} })
 

Variables

Real U_0 = 0.0
 
Real V_0 = 0.0
 
Real U_0_Pert_Mag = 0.0
 
Real V_0_Pert_Mag = 0.0
 
Real W_0_Pert_Mag = 0.0
 
Real pert_deltaU = 0.0
 
Real pert_deltaV = 0.0
 
Real pert_periods_U = 5.0
 
Real pert_periods_V = 5.0
 
Real pert_ref_height = 1.0
 
const Realproblo = geomdata.ProbLo()
 
const Realprobhi = geomdata.ProbHi()
 
Real bval = pert_periods_V * 2.0 * PI / (probhi[0] - problo[0])
 
Real vfac = pert_deltaV * std::exp(0.5) / pert_ref_height
 
const bool use_terrain = (SolverChoice::terrain_type != TerrainType::None)
 
const auto dx = geomdata.CellSize()
 
amrex::GpuArray< Real, AMREX_SPACEDIM > dxInv = 1. / dx[0]
 

Function Documentation

◆ ParallelForRNG() [1/3]

ParallelForRNG ( xbx  ,
[=] AMREX_GPU_DEVICE(int i, int j, int k, const amrex::RandomEngine &engine) noexcept { const Real *prob_lo=geomdata.ProbLo();const Real *dx=geomdata.CellSize();const Real z=use_terrain ? 0.25 *(z_nd(i, j, k)+z_nd(i, j, k+1)+z_nd(i, j+1, k)+z_nd(i, j+1, k+1)) :prob_lo[2]+(k+0.5) *dx[2];x_vel_pert(i, j, k)=0.0;if((z<=pert_ref_height) &&(U_0_Pert_Mag !=0.0)) { Real rand_double=amrex::Random(engine);Real x_vel_prime=(rand_double *2.0 - 1.0) *U_0_Pert_Mag;x_vel_pert(i, j, k)+=x_vel_prime;} }   
)

◆ ParallelForRNG() [2/3]

ParallelForRNG ( ybx  ,
[=] AMREX_GPU_DEVICE(int i, int j, int k, const amrex::RandomEngine &engine) noexcept { const Real *prob_lo=geomdata.ProbLo();const Real *dx=geomdata.CellSize();const Real x=prob_lo[0]+(i+0.5) *dx[0];const Real z=use_terrain ? 0.25 *(z_nd(i, j, k)+z_nd(i, j, k+1)+z_nd(i+1, j, k)+z_nd(i+1, j, k+1)) :prob_lo[2]+(k+0.5) *dx[2];y_vel_pert(i, j, k)=0.0;if((z<=pert_ref_height) &&(V_0_Pert_Mag !=0.0)) { Real rand_double=amrex::Random(engine);Real y_vel_prime=(rand_double *2.0 - 1.0) *V_0_Pert_Mag;y_vel_pert(i, j, k)+=y_vel_prime;} if(pert_deltaV !=0.0) { const Real xl=x - prob_lo[0];const Real zl=z/pert_ref_height;const Real damp=std::exp(-0.5 *zl *zl);y_vel_pert(i, j, k)+=vfac *damp *z *std::cos(bval *xl);} }   
)

◆ ParallelForRNG() [3/3]

ParallelForRNG ( zbx  ,
[=] AMREX_GPU_DEVICE(int i, int j, int k, const amrex::RandomEngine &engine) noexcept { const int dom_lo_z=geomdata.Domain().smallEnd()[2];const int dom_hi_z=geomdata.Domain().bigEnd()[2];if(k==dom_lo_z||k==dom_hi_z+1) { z_vel_pert(i, j, k)=0.0;} else if(W_0_Pert_Mag !=0.0) { Real rand_double=amrex::Random(engine);Real z_vel_prime=(rand_double *2.0 - 1.0) *W_0_Pert_Mag;z_vel_pert(i, j, k)=z_vel_prime;} }   
)

◆ pp_for_pert_vels()

ParmParse pp_for_pert_vels ( "prob"  )

◆ query() [1/10]

pp_for_pert_vels query ( "pert_deltaU"  ,
pert_deltaU   
)

◆ query() [2/10]

pp_for_pert_vels query ( "pert_deltaV"  ,
pert_deltaV   
)

◆ query() [3/10]

pp_for_pert_vels query ( "pert_periods_U"  ,
pert_periods_U   
)

◆ query() [4/10]

pp_for_pert_vels query ( "pert_periods_V"  ,
pert_periods_V   
)

◆ query() [5/10]

pp_for_pert_vels query ( "pert_ref_height"  ,
pert_ref_height   
)

◆ query() [6/10]

pp_for_pert_vels query ( "U_0"  ,
U_0   
)

◆ query() [7/10]

pp_for_pert_vels query ( "U_0_Pert_Mag"  ,
U_0_Pert_Mag   
)

◆ query() [8/10]

pp_for_pert_vels query ( "V_0"  ,
V_0   
)

◆ query() [9/10]

pp_for_pert_vels query ( "V_0_Pert_Mag"  ,
V_0_Pert_Mag   
)

◆ query() [10/10]

pp_for_pert_vels query ( "W_0_Pert_Mag"  ,
W_0_Pert_Mag   
)

Variable Documentation

◆ bval

Real bval = pert_periods_V * 2.0 * PI / (probhi[0] - problo[0])

Referenced by ParallelForRNG().

◆ dx

const auto dx = geomdata.CellSize()

Referenced by ParallelForRNG().

◆ dxInv

dxInv[2] = 1. / dx[0]

◆ pert_deltaU

Real pert_deltaU = 0.0

◆ pert_deltaV

Real pert_deltaV = 0.0

Referenced by ParallelForRNG().

◆ pert_periods_U

Real pert_periods_U = 5.0

◆ pert_periods_V

Real pert_periods_V = 5.0

◆ pert_ref_height

Real pert_ref_height = 1.0

Referenced by ParallelForRNG().

◆ probhi

const Real* probhi = geomdata.ProbHi()

◆ problo

const Real* problo = geomdata.ProbLo()

◆ U_0

Real U_0 = 0.0

◆ U_0_Pert_Mag

Real U_0_Pert_Mag = 0.0

Referenced by ParallelForRNG().

◆ use_terrain

◆ V_0

Real V_0 = 0.0

◆ V_0_Pert_Mag

Real V_0_Pert_Mag = 0.0

Referenced by ParallelForRNG().

◆ vfac

◆ W_0_Pert_Mag

Real W_0_Pert_Mag = 0.0

Referenced by ParallelForRNG().