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

Go to the source code of this file.

Functions

ParmParse pp_for_pert_vels ("prob")
 
pp_for_pert_vels query ("rho_0", rho_0)
 
pp_for_pert_vels query ("T_0", T_0)
 
pp_for_pert_vels query ("A_0", A_0)
 
pp_for_pert_vels query ("KE_0", KE_0)
 
pp_for_pert_vels query ("KE_decay_height", KE_decay_height)
 
pp_for_pert_vels query ("KE_decay_order", KE_decay_order)
 
pp_for_pert_vels query ("U_0", U_0)
 
pp_for_pert_vels query ("V_0", V_0)
 
pp_for_pert_vels query ("W_0", W_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 ("T_0_Pert_Mag", T_0_Pert_Mag)
 
pp_for_pert_vels query ("pert_rhotheta", pert_rhotheta)
 
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 y=prob_lo[1]+(j+0.5) *dx[1];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)=U_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;} if(pert_deltaU !=0.0) { const Real yl=y - prob_lo[1];const Real zl=z/pert_ref_height;const Real damp=std::exp(-0.5 *zl *zl);x_vel_pert(i, j, k)+=ufac *damp *z *std::cos(aval *yl);} })
 
 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)=V_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)=W_0+z_vel_prime;} })
 

Variables

Real rho_0 = 1.0
 
Real T_0 = 300.0
 
Real A_0 = 1.0
 
Real KE_0 = 0.1
 
Real KE_decay_height = -1
 
Real KE_decay_order = 1
 
Real U_0 = 0.0
 
Real V_0 = 0.0
 
Real W_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 T_0_Pert_Mag = 0.0
 
bool pert_rhotheta = true
 
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 = 100.0
 
const Realprob_lo = geomdata.ProbLo()
 
const Realprob_hi = geomdata.ProbHi()
 
Real aval = pert_periods_U * 2.0 * PI / (prob_hi[1] - prob_lo[1])
 
Real bval = pert_periods_V * 2.0 * PI / (prob_hi[0] - prob_lo[0])
 
Real ufac = pert_deltaU * std::exp(0.5) / pert_ref_height
 
Real vfac = pert_deltaV * std::exp(0.5) / pert_ref_height
 
const bool use_terrain = (SolverChoice::terrain_type != TerrainType::None)
 

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 y=prob_lo[1]+(j+0.5) *dx[1];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)=U_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;} if(pert_deltaU !=0.0) { const Real yl=y - prob_lo[1];const Real zl=z/pert_ref_height;const Real damp=std::exp(-0.5 *zl *zl);x_vel_pert(i, j, k)+=ufac *damp *z *std::cos(aval *yl);} }   
)

◆ 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)=V_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)=W_0+z_vel_prime;} }   
)

◆ pp_for_pert_vels()

ParmParse pp_for_pert_vels ( "prob"  )

◆ query() [1/19]

pp_for_pert_vels query ( "A_0"  ,
A_0   
)

◆ query() [2/19]

pp_for_pert_vels query ( "KE_0"  ,
KE_0   
)

◆ query() [3/19]

pp_for_pert_vels query ( "KE_decay_height"  ,
KE_decay_height   
)

◆ query() [4/19]

pp_for_pert_vels query ( "KE_decay_order"  ,
KE_decay_order   
)

◆ query() [5/19]

pp_for_pert_vels query ( "pert_deltaU"  ,
pert_deltaU   
)

◆ query() [6/19]

pp_for_pert_vels query ( "pert_deltaV"  ,
pert_deltaV   
)

◆ query() [7/19]

pp_for_pert_vels query ( "pert_periods_U"  ,
pert_periods_U   
)

◆ query() [8/19]

pp_for_pert_vels query ( "pert_periods_V"  ,
pert_periods_V   
)

◆ query() [9/19]

pp_for_pert_vels query ( "pert_ref_height"  ,
pert_ref_height   
)

◆ query() [10/19]

pp_for_pert_vels query ( "pert_rhotheta"  ,
pert_rhotheta   
)

◆ query() [11/19]

pp_for_pert_vels query ( "rho_0"  ,
rho_0   
)

◆ query() [12/19]

pp_for_pert_vels query ( "T_0"  ,
T_0   
)

◆ query() [13/19]

pp_for_pert_vels query ( "T_0_Pert_Mag"  ,
T_0_Pert_Mag   
)

◆ query() [14/19]

pp_for_pert_vels query ( "U_0"  ,
U_0   
)

◆ query() [15/19]

pp_for_pert_vels query ( "U_0_Pert_Mag"  ,
U_0_Pert_Mag   
)

◆ query() [16/19]

pp_for_pert_vels query ( "V_0"  ,
V_0   
)

◆ query() [17/19]

pp_for_pert_vels query ( "V_0_Pert_Mag"  ,
V_0_Pert_Mag   
)

◆ query() [18/19]

pp_for_pert_vels query ( "W_0"  ,
W_0   
)

◆ query() [19/19]

pp_for_pert_vels query ( "W_0_Pert_Mag"  ,
W_0_Pert_Mag   
)

Variable Documentation

◆ A_0

Real A_0 = 1.0

◆ aval

Real aval = pert_periods_U * 2.0 * PI / (prob_hi[1] - prob_lo[1])

Referenced by ParallelForRNG().

◆ bval

Real bval = pert_periods_V * 2.0 * PI / (prob_hi[0] - prob_lo[0])

Referenced by ParallelForRNG().

◆ KE_0

Real KE_0 = 0.1

◆ KE_decay_height

Real KE_decay_height = -1

◆ KE_decay_order

Real KE_decay_order = 1

◆ pert_deltaU

Real pert_deltaU = 0.0

Referenced by ParallelForRNG().

◆ 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 = 100.0

Referenced by ParallelForRNG().

◆ pert_rhotheta

bool pert_rhotheta = true

◆ prob_hi

const Real* prob_hi = geomdata.ProbHi()

◆ prob_lo

const Real* prob_lo = geomdata.ProbLo()

Referenced by ParallelForRNG().

◆ rho_0

Real rho_0 = 1.0

◆ T_0

Real T_0 = 300.0

◆ T_0_Pert_Mag

Real T_0_Pert_Mag = 0.0

◆ U_0

Real U_0 = 0.0

Referenced by ParallelForRNG().

◆ U_0_Pert_Mag

Real U_0_Pert_Mag = 0.0

Referenced by ParallelForRNG().

◆ ufac

Real ufac = pert_deltaU * std::exp(0.5) / pert_ref_height

Referenced by ParallelForRNG().

◆ use_terrain

const bool use_terrain = (SolverChoice::terrain_type != TerrainType::None)

Referenced by ParallelForRNG().

◆ V_0

Real V_0 = 0.0

Referenced by ParallelForRNG().

◆ V_0_Pert_Mag

Real V_0_Pert_Mag = 0.0

Referenced by ParallelForRNG().

◆ vfac

Real vfac = pert_deltaV * std::exp(0.5) / pert_ref_height

Referenced by ParallelForRNG().

◆ W_0

Real W_0 = 0.0

Referenced by ParallelForRNG().

◆ W_0_Pert_Mag

Real W_0_Pert_Mag = 0.0

Referenced by ParallelForRNG().