1 #ifndef ERF_SPECTRAL_GRID_H_
2 #define ERF_SPECTRAL_GRID_H_
4 #include <AMReX_REAL.H>
5 #include <AMReX_GpuQualifiers.H>
6 #include <AMReX_Math.H>
47 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
52 if (!amrex::Math::isfinite(C) || !amrex::Math::isfinite(M) || !amrex::Math::isfinite(lower) ||
53 !amrex::Math::isfinite(upper) || lower <
amrex::Real(0.0) ||
57 const amrex::Real scale = std::abs(M) + std::abs(lower * C) + std::abs(upper * C);
60 const amrex::Real low_numerator = std::fma(upper, C, -M);
61 const amrex::Real high_numerator = std::fma(-lower, C, M);
62 if (!amrex::Math::isfinite(scale) || !amrex::Math::isfinite(moment_tolerance) ||
63 !amrex::Math::isfinite(low_numerator) || !amrex::Math::isfinite(high_numerator) ||
64 low_numerator < -moment_tolerance || high_numerator < -moment_tolerance) {
68 if (std::abs(M) > moment_tolerance)
return false;
70 moment_tolerance / (upper - lower), M !=
amrex::Real(0.0)};
71 return amrex::Math::isfinite(result.endpoint_tolerance);
76 const amrex::Real endpoint_tolerance = moment_tolerance / denominator;
77 if (!amrex::Math::isfinite(L) || !amrex::Math::isfinite(
H) || !amrex::Math::isfinite(endpoint_tolerance)) {
83 result = {L,
H, moment_tolerance, endpoint_tolerance, normalized};
88 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
93 if (!amrex::Math::isfinite(L) || !amrex::Math::isfinite(
H) || !amrex::Math::isfinite(lower) ||
100 if (!amrex::Math::isfinite(count) || !amrex::Math::isfinite(mass) ||
118 [[nodiscard]]
const std::vector<amrex::Real>&
edges () const noexcept {
return m_spec.
edges; }
120 [[nodiscard]]
int nbins () const noexcept {
return static_cast<int>(
m_spec.
edges.size()) - 1; }
123 [[nodiscard]] std::string
identity ()
const;
132 [[nodiscard]]
static std::pair<amrex::Real, amrex::Real>
Real H
Definition: ERF_InitCustomPert_MovingTerrain.H:7
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_SpectralGrid.H:110
std::string identity() const
Definition: ERF_SpectralGrid.cpp:48
int nbins() const noexcept
Definition: ERF_SpectralGrid.H:120
const std::vector< amrex::Real > & pivots() const noexcept
Definition: ERF_SpectralGrid.H:119
amrex::Real pivot(const int bin) const
Definition: ERF_SpectralGrid.H:122
static bool two_moment_realizable(amrex::Real C, amrex::Real M, amrex::Real lower, amrex::Real upper) noexcept
Definition: ERF_SpectralGrid.cpp:59
SpectralGrid(SpectralGridSpec spec)
Definition: ERF_SpectralGrid.cpp:42
static std::pair< amrex::Real, amrex::Real > endpoints_to_two_moment(amrex::Real L, amrex::Real H, amrex::Real lower, amrex::Real upper)
Definition: ERF_SpectralGrid.cpp:78
CoordinateKind coordinate_kind() const noexcept
Definition: ERF_SpectralGrid.H:116
SpectralGridSpec m_spec
Definition: ERF_SpectralGrid.H:137
static EndpointTransform two_moment_to_endpoints(amrex::Real C, amrex::Real M, amrex::Real lower, amrex::Real upper)
Definition: ERF_SpectralGrid.cpp:67
static GridValidation validate(const SpectralGridSpec &spec)
Definition: ERF_SpectralGrid.cpp:13
const std::string & coordinate_units() const noexcept
Definition: ERF_SpectralGrid.H:117
const std::vector< amrex::Real > & edges() const noexcept
Definition: ERF_SpectralGrid.H:118
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool try_endpoints_to_two_moment(const amrex::Real L, const amrex::Real H, const amrex::Real lower, const amrex::Real upper, amrex::Real &C, amrex::Real &M) noexcept
Definition: ERF_SpectralGrid.H:89
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool try_two_moment_to_endpoints(const amrex::Real C, const amrex::Real M, const amrex::Real lower, const amrex::Real upper, EndpointTransform &result) noexcept
Definition: ERF_SpectralGrid.H:48
MomentMode
Definition: ERF_SpectralGrid.H:19
CoordinateKind
Definition: ERF_SpectralGrid.H:18
real(c_double), parameter epsilon
Definition: ERF_module_model_constants.F90:12
Definition: ERF_SpectralGrid.H:28
bool valid
Definition: ERF_SpectralGrid.H:29
std::string message
Definition: ERF_SpectralGrid.H:30
Definition: ERF_SpectralGrid.H:21
std::string coordinate_units
Definition: ERF_SpectralGrid.H:23
std::vector< amrex::Real > pivots
Definition: ERF_SpectralGrid.H:25
std::vector< amrex::Real > edges
Definition: ERF_SpectralGrid.H:24
CoordinateKind coordinate_kind
Definition: ERF_SpectralGrid.H:22