Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
### Changed (changing behavior/API/variables/...)

### Infrastructure (changes irrelevant to downstream codes)
- [[PR634]](https://github.com/lanl/singularity-eos/pull/634) Disable device lambda when on host execution space
- [[PR633]](https://github.com/lanl/singularity-eos/pull/633) Make robust::sgn handle unsigned properly
- [[PR629]](https://github.com/lanl/singularity-eos/pull/629) Use macros and eos_base and eos_variant to reduce boiler plate
- [[PR626]](https://github.com/lanl/singularity-eos/pull/626) Fix C++20 warnings related to lambdas
Expand Down
4 changes: 2 additions & 2 deletions python/module.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ using singularity::variadic_utils::np;

// Helper function to convert lambda numpy array to double* buffer
// With std::optional we would add support for a default value of lambda=None
template<typename T, PORTABLE_FUNCTION Real(T::*Func)(const Real, const Real, Real*&&) const>
template<typename T, Real(T::*Func)(const Real, const Real, Real*&&) const>
Real two_params(const T& self, const Real a, const Real b, py::array_t<Real> lambda) {
return (self.*Func)(a, b, lambda.mutable_data());
}

template<typename T, PORTABLE_FUNCTION Real(T::*Func)(const Real, const Real, Real*&&) const>
template<typename T, Real(T::*Func)(const Real, const Real, Real*&&) const>
Real two_params_no_lambda(const T& self, const Real a, const Real b) {
return (self.*Func)(a, b, np<Real>());
}
Expand Down
44 changes: 31 additions & 13 deletions singularity-eos/eos/eos_base.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,10 +176,15 @@ char *StrCat(char *destination, const char *source) {
static auto const name = SG_MEMBER_FUNC_NAME(); \
static auto const cname = name.c_str(); \
const CRTP &copy = *(static_cast<CRTP const *>(this)); \
portableFor( \
cname, s, 0, num, PORTABLE_LAMBDA(const int i) { \
OUT[i] = copy.NAME(IN1[i], IN2[i], lambdas[i]); \
}); \
if constexpr (std::is_same_v<Space, PortsOfCall::Exec::Host>) { \
portableFor(cname, s, 0, num, \
[=](const int i) { OUT[i] = copy.NAME(IN1[i], IN2[i], lambdas[i]); }); \
} else { \
portableFor( \
cname, s, 0, num, PORTABLE_LAMBDA(const int i) { \
OUT[i] = copy.NAME(IN1[i], IN2[i], lambdas[i]); \
}); \
} \
} \
template <typename Space, typename RealIndexer, typename ConstRealIndexer, \
typename LambdaIndexer, \
Expand Down Expand Up @@ -435,10 +440,16 @@ class EosBase {
static auto const name = SG_MEMBER_FUNC_NAME();
static auto const cname = name.c_str();
const CRTP &copy = *(static_cast<CRTP const *>(this));
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) {
sies[i] = copy.MinInternalEnergyFromDensity(rhos[i], lambdas[i]);
});
if constexpr (std::is_same_v<Space, PortsOfCall::Exec::Host>) {
portableFor(cname, s, 0, num, [=](const int i) {
sies[i] = copy.MinInternalEnergyFromDensity(rhos[i], lambdas[i]);
});
} else {
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) {
sies[i] = copy.MinInternalEnergyFromDensity(rhos[i], lambdas[i]);
});
}
}
template <
typename Space, typename RealIndexer, typename ConstRealIndexer,
Expand Down Expand Up @@ -510,11 +521,18 @@ class EosBase {
static auto const name = SG_MEMBER_FUNC_NAME();
static auto const cname = name.c_str();
const CRTP &copy = *(static_cast<CRTP const *>(this));
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) {
copy.FillEos(rhos[i], temps[i], energies[i], presses[i], cvs[i], bmods[i],
output, lambdas[i]);
});
if constexpr (std::is_same_v<Space, PortsOfCall::Exec::Host>) {
portableFor(cname, s, 0, num, [=](const int i) {
copy.FillEos(rhos[i], temps[i], energies[i], presses[i], cvs[i], bmods[i], output,
lambdas[i]);
});
} else {
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) {
copy.FillEos(rhos[i], temps[i], energies[i], presses[i], cvs[i], bmods[i],
output, lambdas[i]);
});
}
}
template <typename RealIndexer, typename LambdaIndexer,
typename EnableIfIndexed =
Expand Down
80 changes: 56 additions & 24 deletions singularity-eos/eos/modifiers/ramps_eos.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -311,11 +311,18 @@ class BilinearRampEOS : public EosBase<BilinearRampEOS<T>> {
typeid(BilinearRampEOS<T>).name(), __func__);
static auto const cname = name.c_str();
auto const copy = *this;
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) {
const Real p_ramp = copy.get_ramp_pressure(rhos[i]);
pressures[i] = std::max(pressures[i], p_ramp);
});
if constexpr (std::is_same_v<Space, PortsOfCall::Exec::Host>) {
portableFor(cname, s, 0, num, [=](const int i) {
const Real p_ramp = copy.get_ramp_pressure(rhos[i]);
pressures[i] = std::max(pressures[i], p_ramp);
});
} else {
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) {
const Real p_ramp = copy.get_ramp_pressure(rhos[i]);
pressures[i] = std::max(pressures[i], p_ramp);
});
}
}

template <
Expand All @@ -331,11 +338,18 @@ class BilinearRampEOS : public EosBase<BilinearRampEOS<T>> {
typeid(BilinearRampEOS<T>).name(), __func__);
static auto const cname = name.c_str();
auto const copy = *this;
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) {
const Real p_ramp = copy.get_ramp_pressure(rhos[i]);
pressures[i] = std::max(pressures[i], p_ramp);
});
if constexpr (std::is_same_v<Space, PortsOfCall::Exec::Host>) {
portableFor(cname, s, 0, num, [=](const int i) {
const Real p_ramp = copy.get_ramp_pressure(rhos[i]);
pressures[i] = std::max(pressures[i], p_ramp);
});
} else {
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) {
const Real p_ramp = copy.get_ramp_pressure(rhos[i]);
pressures[i] = std::max(pressures[i], p_ramp);
});
}
}

template <
Expand Down Expand Up @@ -393,13 +407,22 @@ class BilinearRampEOS : public EosBase<BilinearRampEOS<T>> {
typeid(BilinearRampEOS<T>).name(), __func__);
static auto const cname = name.c_str();
auto const copy = *this;
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) {
const Real p_ramp = copy.get_ramp_pressure(rhos[i]);
if (pressures[i] < p_ramp) {
bmods[i] = rhos[i] * copy.get_ramp_dpdrho(rhos[i]);
}
});
if constexpr (std::is_same_v<Space, PortsOfCall::Exec::Host>) {
portableFor(cname, s, 0, num, [=](const int i) {
const Real p_ramp = copy.get_ramp_pressure(rhos[i]);
if (pressures[i] < p_ramp) {
bmods[i] = rhos[i] * copy.get_ramp_dpdrho(rhos[i]);
}
});
} else {
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) {
const Real p_ramp = copy.get_ramp_pressure(rhos[i]);
if (pressures[i] < p_ramp) {
bmods[i] = rhos[i] * copy.get_ramp_dpdrho(rhos[i]);
}
});
}
}

template <
Expand All @@ -419,13 +442,22 @@ class BilinearRampEOS : public EosBase<BilinearRampEOS<T>> {
typeid(BilinearRampEOS<T>).name(), __func__);
static auto const cname = name.c_str();
auto const copy = *this;
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) {
const Real p_ramp = copy.get_ramp_pressure(rhos[i]);
if (pressures[i] < p_ramp) {
bmods[i] = rhos[i] * copy.get_ramp_dpdrho(rhos[i]);
}
});
if constexpr (std::is_same_v<Space, PortsOfCall::Exec::Host>) {
portableFor(cname, s, 0, num, [=](const int i) {
const Real p_ramp = copy.get_ramp_pressure(rhos[i]);
if (pressures[i] < p_ramp) {
bmods[i] = rhos[i] * copy.get_ramp_dpdrho(rhos[i]);
}
});
} else {
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) {
const Real p_ramp = copy.get_ramp_pressure(rhos[i]);
if (pressures[i] < p_ramp) {
bmods[i] = rhos[i] * copy.get_ramp_dpdrho(rhos[i]);
}
});
}
}

template <
Expand Down
19 changes: 14 additions & 5 deletions singularity-eos/eos/modifiers/shifted_eos.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -175,9 +175,14 @@ class ShiftedEOS : public EosBase<ShiftedEOS<T>> {
singularity::mfuncname::member_func_name(typeid(ShiftedEOS<T>).name(), __func__);
static auto const cname = name.c_str();
const auto shift_val = shift_;
portableFor(
cname, s, 0, num,
PORTABLE_LAMBDA(const int i) { shifted[i] = sies[i] - shift_val; });
if constexpr (std::is_same_v<Space, PortsOfCall::Exec::Host>) {
portableFor(cname, s, 0, num,
[=](const int i) { shifted[i] = sies[i] - shift_val; });
} else {
portableFor(
cname, s, 0, num,
PORTABLE_LAMBDA(const int i) { shifted[i] = sies[i] - shift_val; });
}
}

template <typename Space, typename EnableIfSpace =
Expand All @@ -187,8 +192,12 @@ class ShiftedEOS : public EosBase<ShiftedEOS<T>> {
singularity::mfuncname::member_func_name(typeid(ShiftedEOS<T>).name(), __func__);
static auto const cname = name.c_str();
const auto shift_val = shift_;
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) { sies[i] += shift_val; });
if constexpr (std::is_same_v<Space, PortsOfCall::Exec::Host>) {
portableFor(cname, s, 0, num, [=](const int i) { sies[i] += shift_val; });
} else {
portableFor(
cname, s, 0, num, PORTABLE_LAMBDA(const int i) { sies[i] += shift_val; });
}
}

template <
Expand Down
Loading