34 ParmParse
pp_sdm(
"super_droplets_moisture");
39 for (
int i = 0; i < num_species; i++) {
49 std::string key_str =
"qv_init_" +
m_species[i];
55 const auto khi = geomdata.Domain().bigEnd()[2];
56 const Real dz = geomdata.CellSize()[2];
61 amrex::Print() <<
"Ignoring T_0 = " <<
T_0
62 <<
", background fields should have been initialized with erf.init_type"
75 Gpu::DeviceVector<Real>
d_r(
khi+2);
76 Gpu::DeviceVector<Real>
d_p(
khi+2);
77 Gpu::DeviceVector<Real>
d_t(
khi+2);
78 Gpu::DeviceVector<Real>
d_q_v(
khi+2);
83 Gpu::copy(Gpu::hostToDevice,
h_r.begin(),
h_r.end(),
d_r.begin());
84 Gpu::copy(Gpu::hostToDevice,
h_p.begin(),
h_p.end(),
d_p.begin());
85 Gpu::copy(Gpu::hostToDevice,
h_t.begin(),
h_t.end(),
d_t.begin());
86 Gpu::copy(Gpu::hostToDevice,
h_q_v.begin(),
h_q_v.end(),
d_q_v.begin());
94 ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k)
97 const auto prob_lo = geomdata.ProbLo();
98 const auto dx = geomdata.CellSize();
100 const auto x =
prob_lo[0] + (i + 0.5) *
dx[0];
101 const auto y =
prob_lo[1] + (j + 0.5) *
dx[1];
102 const auto z =
prob_lo[2] + (k + 0.5) *
dx[2];
120 theta_total = theta_back[k]*(delta_theta/300.0 + 1);
138 ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
141 const auto prob_lo = geomdata.ProbLo();
142 const auto dx = geomdata.CellSize();
166 dT =
T_pert * std::pow(cos(
PI*L/2.0),2);
170 const Real Tbar_hse = p_hse(i,j,k) / (
R_d * r_hse(i,j,k));
173 Real theta_perturbed;
176 theta_perturbed = (Tbar_hse + dT)*std::pow(
p_0/p_hse(i,j,k),
rdOcp);
179 theta_perturbed = Tbar_hse*std::pow(
p_0/p_hse(i,j,k),
rdOcp) + dT;
206 Gpu::copy( Gpu::hostToDevice,
213 AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept
215 const auto prob_lo = geomdata.ProbLo();
216 const auto dx = geomdata.CellSize();
constexpr amrex::Real R_v
Definition: ERF_Constants.H:11
constexpr amrex::Real Cp_d
Definition: ERF_Constants.H:12
constexpr amrex::Real PI
Definition: ERF_Constants.H:6
constexpr amrex::Real p_0
Definition: ERF_Constants.H:18
constexpr amrex::Real R_d
Definition: ERF_Constants.H:10
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getRhoThetagivenP(const amrex::Real p, const amrex::Real qv=0.0)
Definition: ERF_EOS.H:172
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getTgivenPandTh(const amrex::Real P, const amrex::Real th, const amrex::Real rdOcp)
Definition: ERF_EOS.H:32
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define RhoQ3_comp
Definition: ERF_IndexDefines.H:44
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
const Real dx
Definition: ERF_InitCustomPert_ABL.H:23
state_pert(i, j, k, RhoTheta_comp)
Real T_back
Definition: ERF_InitCustomPert_Bubble.H:111
Real rho_back
Definition: ERF_InitCustomPert_Bubble.H:112
Real T
Definition: ERF_InitCustomPert_Bubble.H:105
background fields should have been initialized with erf init_type<< std::endl;} Real qt_init=0.02;pp_prob.query("qt_init", qt_init);Real eq_pot_temp=320.0;pp_prob.query("eq_pot_temp", eq_pot_temp);bool use_empirical=false;pp_prob.query("use_empircal_psat", use_empirical);if(do_moist_bubble) { Vector< Real > h_r(khi+2);Vector< Real > h_p(khi+2);Vector< Real > h_t(khi+2);Vector< Real > h_q_v(khi+2);Gpu::DeviceVector< Real > d_r(khi+2);Gpu::DeviceVector< Real > d_p(khi+2);Gpu::DeviceVector< Real > d_t(khi+2);Gpu::DeviceVector< Real > d_q_v(khi+2);HSEutils::init_isentropic_hse_no_terrain(h_t.data(), h_r.data(), h_p.data(), h_q_v.data(), dz, khi, qt_init, eq_pot_temp, use_empirical, false);Gpu::copyAsync(Gpu::hostToDevice, h_r.begin(), h_r.end(), d_r.begin());Gpu::copyAsync(Gpu::hostToDevice, h_p.begin(), h_p.end(), d_p.begin());Gpu::copyAsync(Gpu::hostToDevice, h_t.begin(), h_t.end(), d_t.begin());Gpu::copyAsync(Gpu::hostToDevice, h_q_v.begin(), h_q_v.end(), d_q_v.begin());Real *theta_back=d_t.data();Real *p_back=d_p.data();Real *q_v_back=d_q_v.data();int moisture_type=1;if(sc.moisture_type==MoistureType::SAM) { moisture_type=1;} else if(sc.moisture_type==MoistureType::SAM_NoIce||sc.moisture_type==MoistureType::SAM_NoPrecip_NoIce) { moisture_type=2;} ParallelFor(bx,[=] AMREX_GPU_DEVICE(int i, int j, int k) { const auto prob_lo=geomdata.ProbLo();const auto dx=geomdata.CellSize();const Real x=prob_lo[0]+(i+0.5) *dx[0];const Real y=prob_lo[1]+(j+0.5) *dx[1];const Real z=prob_lo[2]+(k+0.5) *dx[2];Real rad, delta_theta, theta_total, rho, RH;rad=0.0;if(x_r > rad
Definition: ERF_InitCustomPert_Bubble.H:93
Real q_v_hot
Definition: ERF_InitCustomPert_Bubble.H:108
theta_total
Definition: ERF_InitCustomPert_Bubble.H:104
RH
Definition: ERF_InitCustomPert_Bubble.H:107
rho
Definition: ERF_InitCustomPert_Bubble.H:106
const amrex::Real * prob_lo
Definition: ERF_InitCustomPert_IsentropicVortex.H:16
Real theta_pert
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:22
int m_num_species
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:28
std::string species_input
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:35
Real z_c
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:8
bool T_pert_is_airtemp
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:17
Real x_r
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:11
bool do_moist_bubble
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:21
const int m_nstart_sp
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:30
int ncomp_species
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:203
const Real rdOcp
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:67
Real x_c
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:6
ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { const auto prob_lo=geomdata.ProbLo();const auto dx=geomdata.CellSize();const Real x=prob_lo[0]+(i+0.5) *dx[0];const Real y=prob_lo[1]+(j+0.5) *dx[1];const Real z=prob_lo[2]+(k+0.5) *dx[2];amrex::Real L=0.0;if(x_r > 0) L+=std::pow((x - x_c)/x_r, 2);if(y_r > 0) L+=std::pow((y - y_c)/y_r, 2);if(z_r > 0) L+=std::pow((z - z_c)/z_r, 2);L=std::sqrt(L);if(L< 1.0) { auto rho=state(i, j, k, Rho_comp)+state_pert(i, j, k, Rho_comp);for(int ns=0;ns< n_sp;ns++) { state_pert(i, j, k, nstart+2 *ns)=rho *qv_arr[ns];state_pert(i, j, k, nstart+2 *ns+1)=0.0;} } })
ParmParse pp_prob("prob")
Gpu::DeviceVector< Real > qv_init_d(n_sp)
auto qv_arr
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:210
Real T_0
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:3
auto n_sp
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:201
std::vector< amrex::Real > m_qv_init_species
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:47
Real z_r
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:13
ParmParse pp_sdm("super_droplets_moisture")
Real y_c
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:7
auto nstart
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:202
Real eq_pot_temp
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:23
bool perturb_rho
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:18
bool use_empirical
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:25
Real T_pert
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:16
const int m_ncomp_per_species
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:29
const Real dz
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:56
AMREX_ALWAYS_ASSERT(sc.moisture_type==MoistureType::SuperDroplets)
const auto khi
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:55
Real qt_init
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:24
Real y_r
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:12
std::vector< std::string > m_species
Definition: ERF_InitCustomPert_MultiSpeciesBubble.H:27
Vector< Real > h_t(khi+2)
Gpu::DeviceVector< Real > d_t(khi+2)
Vector< Real > h_q_v(khi+2)
Gpu::DeviceVector< Real > d_p(khi+2)
Gpu::DeviceVector< Real > d_q_v(khi+2)
Vector< Real > h_r(khi+2)
Vector< Real > h_p(khi+2)
Gpu::DeviceVector< Real > d_r(khi+2)
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Real vapor_mixing_ratio(const Real p_b, const Real T_b, const Real RH, const bool use_empirical, int which_zone)
Definition: ERF_HSEUtils.H:337
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void init_isentropic_hse_no_terrain(Real *theta, Real *r, Real *p, Real *q_v, const Real &dz, const int &khi, const Real q_t, const Real eq_pot_temp, const bool use_empirical, const bool T_from_theta=false, const Real z_tr_1=-1., const Real z_tr_2=-1., const Real theta_0=0., const Real theta_tr=0., const Real T_tr=0.)
Definition: ERF_HSEUtils.H:504
@ ns
Definition: ERF_Morrison.H:47