1 #ifndef ERF_INPUT_SOUNDING_DATA_H_
2 #define ERF_INPUT_SOUNDING_DATA_H_
7 #include <AMReX_ParmParse.H>
8 #include <AMReX_Print.H>
10 #include <AMReX_Geometry.H>
26 amrex::ParmParse
pp(
"erf");
78 const amrex::Vector<amrex::Real>& zlevels_stag,
79 int itime,
bool is_moist)
82 const int khi = geom.Domain().bigEnd()[AMREX_SPACEDIM-1];
83 const int Nz = geom.Domain().size()[AMREX_SPACEDIM-1];
95 amrex::Print() <<
"input_sounding file location : " <<
input_sounding_file[itime] << std::endl;
97 if(!input_sounding_reader.is_open()) {
98 amrex::Error(
"Error opening the input_sounding file\n");
102 amrex::Print() <<
"Successfully opened the input_sounding file. Now reading... " << std::endl;
107 amrex::Vector<amrex::Real> z_inp_sound_tmp, theta_inp_sound_tmp, qv_inp_sound_tmp,
108 U_inp_sound_tmp, V_inp_sound_tmp;
111 std::getline(input_sounding_reader, line);
112 std::istringstream iss(line);
118 z_inp_sound_tmp.push_back(zbot);
121 U_inp_sound_tmp.push_back(0);
122 V_inp_sound_tmp.push_back(0);
126 while(std::getline(input_sounding_reader, line)) {
127 std::istringstream iss_z(line);
136 U_inp_sound_tmp[0] =
U;
137 V_inp_sound_tmp[0] =
V;
140 z_inp_sound_tmp.push_back(
z);
142 theta_inp_sound_tmp.push_back(
theta);
144 U_inp_sound_tmp.push_back(
U);
145 V_inp_sound_tmp.push_back(
V);
146 if (
z >=
ztop)
break;
152 const int Ninp = z_inp_sound_tmp.size();
158 for (
int k=0; k < Nz; ++k) {
172 amrex::Print() <<
"Successfully read the " << itime <<
"th input_sounding file..." << std::endl;
173 input_sounding_reader.close();
186 const int Ninp =
size(itime);
197 amrex::Print() <<
"ideal sounding init: surface dry air density = "
198 << std::setprecision(15)
209 amrex::Print() <<
"z p_m rho_d theta qv U V" << std::endl;
223 for (
int k=1; k <
size(itime); ++k)
270 const int Ninp =
size(itime);
284 amrex::Print() <<
"isentropic sounding init: surface dry air density = "
285 << std::setprecision(15)
291 amrex::Print() <<
"z p_m rho_d theta qv U V" << std::endl;
304 for (
int k=1; k <
size(itime); ++k)
347 const int Ninp =
size(itime);
354 amrex::Gpu::copy(amrex::Gpu::hostToDevice,
357 amrex::Gpu::copy(amrex::Gpu::hostToDevice,
360 amrex::Gpu::copy(amrex::Gpu::hostToDevice,
363 amrex::Gpu::copy(amrex::Gpu::hostToDevice,
366 amrex::Gpu::copy(amrex::Gpu::hostToDevice,
375 amrex::Gpu::copy(amrex::Gpu::hostToDevice,
378 amrex::Gpu::copy(amrex::Gpu::hostToDevice,
constexpr amrex::Real R_v
Definition: ERF_Constants.H:43
constexpr amrex::Real Cp_d
Definition: ERF_Constants.H:44
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
constexpr amrex::Real p_0
Definition: ERF_Constants.H:50
constexpr amrex::Real CONST_GRAV
Definition: ERF_Constants.H:53
constexpr amrex::Real R_d
Definition: ERF_Constants.H:42
constexpr amrex::Real Gamma
Definition: ERF_Constants.H:51
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getRhogivenThetaPress(const amrex::Real th, const amrex::Real p, const amrex::Real rdOcp, const amrex::Real qv=amrex::Real(0))
Definition: ERF_EOS.H:96
const Real ztop
Definition: ERF_InitCustomPertVels_ParticleTests.H:4
const int khi
Definition: ERF_InitCustomPert_Bubble.H:21
AMREX_ALWAYS_ASSERT(bx.length()[2]==khi+1)
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real interpolate_1d(const amrex::Real *alpha, const amrex::Real *beta, const amrex::Real alpha_interp, const int alpha_size)
Definition: ERF_Interpolation_1D.H:14
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void Newton_Raphson_hse(const Real &m_tol, const Real &RdOCp, const Real &dz, const Real &g, const Real &C, const Real &Th, const Real &qt, const Real &qv, Real &P, Real &rd, Real &F)
Definition: ERF_HSEUtils.H:43
@ theta
Definition: ERF_MM5.H:20
@ qv
Definition: ERF_Kessler.H:29
@ U
Definition: ERF_IndexDefines.H:123
@ V
Definition: ERF_IndexDefines.H:124
@ dz
Definition: ERF_AdvanceWSM6.cpp:104