1 #ifndef ERF_TERRAIN_FILE_CHECKS_H_
2 #define ERF_TERRAIN_FILE_CHECKS_H_
19 #include <AMReX_Array.H>
20 #include <AMReX_Array4.H>
21 #include <AMReX_Geometry.H>
22 #include <AMReX_MultiFab.H>
23 #include <AMReX_GpuQualifiers.H>
24 #include <AMReX_Extension.H>
25 #include <AMReX_Math.H>
26 #include <AMReX_REAL.H>
27 #include <AMReX_Vector.H>
34 #include <AMReX_Print.H>
37 #include <type_traits>
49 if (std::getline(is, line)) {
50 std::stringstream ss(line);
53 amrex::Abort(
"Terrain file " + fname +
": line " + std::to_string(n)
54 +
" is not a number: '" + line +
"'");
58 if (std::is_integral_v<T> && (extra[0] ==
'.' || extra[0] ==
'e' || extra[0] ==
'E')) {
59 amrex::Abort(
"Terrain file " + fname +
": line " + std::to_string(n) +
" must be a whole"
60 +
" number (nx or ny): '" + line +
"'");
62 amrex::Abort(
"Terrain file " + fname +
": line " + std::to_string(n) +
" has text after"
63 +
" the value: '" + line +
"'; the file has one value per line, with no"
67 amrex::Abort(
"Terrain file " + fname +
": the file ends at line " + std::to_string(n-1)
68 +
"; lines 1 and 2 must give nx and ny");
70 amrex::Abort(
"Terrain file " + fname +
": the file ends at line " + std::to_string(n-1)
71 +
", but nx and ny ask for nx + ny + nx*ny values after them");
83 amrex::Vector<amrex::Real>
x,
y,
z;
99 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>&
prob_lo,
100 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>&
prob_hi,
101 bool require_domain_coverage =
true);
126 const amrex::Vector<amrex::Real>& x,
127 const amrex::Vector<amrex::Real>& y,
128 const amrex::Vector<amrex::Real>& z,
129 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>&
prob_lo,
130 const amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>&
prob_hi,
131 bool require_domain_coverage =
true);
146 const amrex::Vector<amrex::Real>& x,
147 const amrex::Vector<amrex::Real>& y,
148 const amrex::Vector<amrex::Real>& z);
163 AMREX_GPU_HOST_DEVICE
172 return std::sqrt(hx*hx + hy*hy);
186 amrex::Array<amrex::Real,4>
188 const amrex::MultiFab& mf_my,
const amrex::Geometry& geom,
int band);
203 const amrex::Array<amrex::Real,4>& slopes,
204 const amrex::Array<bool,4>& open,
205 const amrex::Array<std::string,4>& bc_names);
const int nx
Definition: ERF_InitCustomPertVels_CloudChamber.H:14
const int ny
Definition: ERF_InitCustomPertVels_CloudChamber.H:15
const GpuArray< Real, AMREX_SPACEDIM > prob_lo
Definition: ERF_InitCustomPert_CloudChamber.H:33
const amrex::Real * prob_hi
Definition: ERF_InitCustomPert_DataAssimilation_ISV.H:17
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE TerrainCellDrops ComputeTerrainCellDrops(int i, int j, int k, const amrex::Array4< const amrex::Real > &z_nd) noexcept
Definition: ERF_TerrainDiffusionLimits.H:44
T erf_get_single_value(std::istream &is, int n, const std::string &fname)
Definition: ERF_TerrainFileChecks.H:45
@ T
Definition: ERF_IndexDefines.H:168
Definition: ERF_TerrainFileChecks.cpp:18
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real CellTerrainSlope(int i, int j, int k, const amrex::Array4< const amrex::Real > &z_nd, amrex::Real mfx, amrex::Real mfy, amrex::Real dxinv, amrex::Real dyinv) noexcept
Definition: ERF_TerrainFileChecks.H:166
std::string TableSummary(const std::string &fname, bool is_usgs, int nx, int ny, const Vector< Real > &x, const Vector< Real > &y, const Vector< Real > &z)
Definition: ERF_TerrainFileChecks.cpp:131
std::string TableProblem(bool is_usgs, int nx, int ny, const Vector< Real > &x, const Vector< Real > &y, const Vector< Real > &z, const GpuArray< Real, AMREX_SPACEDIM > &prob_lo, const GpuArray< Real, AMREX_SPACEDIM > &prob_hi, bool require_domain_coverage)
Definition: ERF_TerrainFileChecks.cpp:75
Array< Real, 4 > FaceBandSlopes(const MultiFab &z_phys_nd, const MultiFab &mf_mx, const MultiFab &mf_my, const Geometry &geom, int band)
Definition: ERF_TerrainFileChecks.cpp:350
const HeightTable & ReadHeightTable(const std::string &fname, bool is_usgs, const GpuArray< Real, AMREX_SPACEDIM > &prob_lo, const GpuArray< Real, AMREX_SPACEDIM > &prob_hi, bool require_domain_coverage)
Definition: ERF_TerrainFileChecks.cpp:331
constexpr amrex::Real open_face_slope_warn
Definition: ERF_TerrainFileChecks.H:151
std::string OpenFaceSlopeWarning(int lev, int band, const Array< Real, 4 > &slopes, const Array< bool, 4 > &open, const Array< std::string, 4 > &bc_names)
Definition: ERF_TerrainFileChecks.cpp:400
Definition: ERF_TerrainDiffusionLimits.H:29
amrex::Real dy_drop
Definition: ERF_TerrainDiffusionLimits.H:31
amrex::Real dx_drop
Definition: ERF_TerrainDiffusionLimits.H:30
Definition: ERF_TerrainFileChecks.H:80
int nx
Definition: ERF_TerrainFileChecks.H:81
amrex::Vector< amrex::Real > z
Definition: ERF_TerrainFileChecks.H:83
int ny
Definition: ERF_TerrainFileChecks.H:82
amrex::Vector< amrex::Real > y
Definition: ERF_TerrainFileChecks.H:83
amrex::Vector< amrex::Real > x
Definition: ERF_TerrainFileChecks.H:83