Skip to content

Commit

Permalink
quokka::EOS code linting (#578)
Browse files Browse the repository at this point in the history
### Description
This fixes some clang-tidy and CodeQL warnings for EOS.hpp. All of the
changes convert pass-by-value to pass-by-reference for large objects in
EOS function calls.

### Related issues
https://github.com/quokka-astro/quokka/security/code-scanning/2609

### Checklist
_Before this pull request can be reviewed, all of these tasks should be
completed. Denote completed tasks with an `x` inside the square brackets
`[ ]` in the Markdown source below:_
- [x] I have added a description (see above).
- [x] I have added a link to any related issues see (see above).
- [x] I have read the [Contributing
Guide](https://github.com/quokka-astro/quokka/blob/development/CONTRIBUTING.md).
- [ ] I have added tests for any new physics that this PR adds to the
code.
- [x] I have tested this PR on my local computer and all tests pass.
- [x] I have manually triggered the GPU tests with the magic comment
`/azp run`.
- [x] I have requested a reviewer for this PR.

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
BenWibking and pre-commit-ci[bot] authored Jun 10, 2024
1 parent 2938a27 commit c52d071
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 45 deletions.
48 changes: 33 additions & 15 deletions src/EOS.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <optional>
#include <tuple>

#include "AMReX.H"
#include "AMReX_Array.H"
#include "AMReX_GpuQualifiers.H"
#include "AMReX_REAL.H"
Expand Down Expand Up @@ -41,25 +42,28 @@ template <typename problem_t> class EOS
public:
static constexpr int nmscalars_ = Physics_Traits<problem_t>::numMassScalars;
[[nodiscard]] AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE static auto
ComputeTgasFromEint(amrex::Real rho, amrex::Real Eint, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars = {}) -> amrex::Real;
ComputeTgasFromEint(amrex::Real rho, amrex::Real Eint, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars = {}) -> amrex::Real;

[[nodiscard]] AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE static auto
ComputeEintFromTgas(amrex::Real rho, amrex::Real Tgas, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars = {}) -> amrex::Real;
ComputeEintFromTgas(amrex::Real rho, amrex::Real Tgas, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars = {}) -> amrex::Real;

[[nodiscard]] AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE static auto
ComputeEintFromPres(amrex::Real rho, amrex::Real Pressure, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars = {}) -> amrex::Real;
ComputeEintFromPres(amrex::Real rho, amrex::Real Pressure, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars = {})
-> amrex::Real;

[[nodiscard]] AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE static auto
ComputeEintTempDerivative(amrex::Real rho, amrex::Real Tgas, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars = {}) -> amrex::Real;
ComputeEintTempDerivative(amrex::Real rho, amrex::Real Tgas, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars = {})
-> amrex::Real;

[[nodiscard]] AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE static auto
ComputeOtherDerivatives(amrex::Real rho, amrex::Real P, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars = {});
ComputeOtherDerivatives(amrex::Real rho, amrex::Real P, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars = {});

[[nodiscard]] AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE static auto
ComputePressure(amrex::Real rho, amrex::Real Eint, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars = {}) -> amrex::Real;
ComputePressure(amrex::Real rho, amrex::Real Eint, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars = {}) -> amrex::Real;

[[nodiscard]] AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE static auto
ComputeSoundSpeed(amrex::Real rho, amrex::Real Pressure, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars = {}) -> amrex::Real;
ComputeSoundSpeed(amrex::Real rho, amrex::Real Pressure, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars = {})
-> amrex::Real;

private:
static constexpr amrex::Real gamma_ = EOS_Traits<problem_t>::gamma;
Expand All @@ -69,7 +73,7 @@ template <typename problem_t> class EOS

template <typename problem_t>
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeTgasFromEint(amrex::Real rho, amrex::Real Eint,
const std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars)
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars)
-> amrex::Real
{
// return temperature for an ideal gas given density and internal energy
Expand All @@ -94,6 +98,8 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeTgasFromEin
eos(eos_input_re, chemstate);
Tgas = chemstate.T;
#else
amrex::ignore_unused(massScalars);

if constexpr (gamma_ != 1.0) {
chem_eos_t estate;
estate.rho = rho;
Expand All @@ -109,7 +115,7 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeTgasFromEin

template <typename problem_t>
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeEintFromTgas(amrex::Real rho, amrex::Real Tgas,
const std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars)
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars)
-> amrex::Real
{
// return internal energy density given density and temperature
Expand All @@ -136,6 +142,8 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeEintFromTga
eos(eos_input_rt, chemstate);
Eint = chemstate.e * chemstate.rho;
#else
amrex::ignore_unused(massScalars);

if constexpr (gamma_ != 1.0) {
chem_eos_t estate;
estate.rho = rho;
Expand All @@ -150,7 +158,7 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeEintFromTga

template <typename problem_t>
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeEintFromPres(amrex::Real rho, amrex::Real Pressure,
const std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars)
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars)
-> amrex::Real
{
// return internal energy density given density and pressure
Expand All @@ -175,6 +183,8 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeEintFromPre
eos(eos_input_rp, chemstate);
Eint = chemstate.e * chemstate.rho;
#else
amrex::ignore_unused(massScalars);

if constexpr (gamma_ != 1.0) {
chem_eos_t estate;
estate.rho = rho;
Expand All @@ -190,7 +200,7 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeEintFromPre
template <typename problem_t>
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto
EOS<problem_t>::ComputeEintTempDerivative(const amrex::Real rho, const amrex::Real Tgas,
const std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars) -> amrex::Real
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars) -> amrex::Real
{
// compute derivative of internal energy w/r/t temperature, given density and temperature
amrex::Real dEint_dT = NAN;
Expand All @@ -215,6 +225,8 @@ EOS<problem_t>::ComputeEintTempDerivative(const amrex::Real rho, const amrex::Re
eos(eos_input_rt, chemstate);
dEint_dT = chemstate.dedT * chemstate.rho;
#else
amrex::ignore_unused(massScalars);

if constexpr (gamma_ != 1.0) {
chem_eos_t estate;
estate.rho = rho;
Expand All @@ -228,8 +240,8 @@ EOS<problem_t>::ComputeEintTempDerivative(const amrex::Real rho, const amrex::Re
}

template <typename problem_t>
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeOtherDerivatives(const amrex::Real rho, const amrex::Real P,
const std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto
EOS<problem_t>::ComputeOtherDerivatives(const amrex::Real rho, const amrex::Real P, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars)
{
// compute derivative of specific internal energy w/r/t density, given density and pressure
amrex::Real deint_dRho = NAN;
Expand Down Expand Up @@ -266,6 +278,8 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeOtherDeriva
G = chemstate.G;

#else
amrex::ignore_unused(massScalars);

if constexpr (gamma_ != 1.0) {
chem_eos_t estate;
estate.rho = rho;
Expand All @@ -284,7 +298,7 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeOtherDeriva

template <typename problem_t>
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputePressure(amrex::Real rho, amrex::Real Eint,
const std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars)
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars)
-> amrex::Real
{
// return pressure for an ideal gas
Expand All @@ -308,6 +322,8 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputePressure(am
eos(eos_input_re, chemstate);
P = chemstate.p;
#else
amrex::ignore_unused(massScalars);

if constexpr (gamma_ != 1.0) {
chem_eos_t estate;
estate.rho = rho;
Expand All @@ -327,7 +343,7 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputePressure(am

template <typename problem_t>
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeSoundSpeed(amrex::Real rho, amrex::Real Pressure,
const std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> massScalars)
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const &massScalars)
-> amrex::Real
{
// return sound speed for an ideal gas
Expand All @@ -352,6 +368,8 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS<problem_t>::ComputeSoundSpeed(
eos(eos_input_rp, chemstate);
cs = chemstate.cs;
#else
amrex::ignore_unused(massScalars);

if constexpr (gamma_ != 1.0) {
chem_eos_t estate;
estate.rho = rho;
Expand Down
12 changes: 7 additions & 5 deletions src/RadMarshak/test_radiation_marshak.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,22 +74,24 @@ AMREX_GPU_HOST_DEVICE auto RadSystem<SuOlsonProblem>::ComputeFluxMeanOpacity(con
static constexpr int nmscalars_ = Physics_Traits<SuOlsonProblem>::numMassScalars;
template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<SuOlsonProblem>::ComputeTgasFromEint(const double /*rho*/, const double Egas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/) -> double
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/)
-> double
{
return std::pow(4.0 * Egas / alpha_SuOlson, 1. / 4.);
}

template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<SuOlsonProblem>::ComputeEintFromTgas(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/) -> double
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/)
-> double
{
return (alpha_SuOlson / 4.0) * std::pow(Tgas, 4);
}

template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<SuOlsonProblem>::ComputeEintTempDerivative(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/)
-> double
AMREX_GPU_HOST_DEVICE auto
quokka::EOS<SuOlsonProblem>::ComputeEintTempDerivative(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/) -> double
{
// This is also known as the heat capacity, i.e.
// \del E_g / \del T = \rho c_v,
Expand Down
10 changes: 5 additions & 5 deletions src/RadMarshakCGS/test_radiation_marshak_cgs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,24 +77,24 @@ AMREX_GPU_HOST_DEVICE auto RadSystem<SuOlsonProblemCgs>::ComputeFluxMeanOpacity(
static constexpr int nmscalars_ = Physics_Traits<SuOlsonProblemCgs>::numMassScalars;
template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<SuOlsonProblemCgs>::ComputeTgasFromEint(const double /*rho*/, const double Egas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/)
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/)
-> double
{
return std::pow(4.0 * Egas / alpha_SuOlson, 1. / 4.);
}

template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<SuOlsonProblemCgs>::ComputeEintFromTgas(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/)
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/)
-> double
{
return (alpha_SuOlson / 4.0) * std::pow(Tgas, 4);
}

template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<SuOlsonProblemCgs>::ComputeEintTempDerivative(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/)
-> double
AMREX_GPU_HOST_DEVICE auto
quokka::EOS<SuOlsonProblemCgs>::ComputeEintTempDerivative(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/) -> double
{
// This is also known as the heat capacity, i.e.
// \del E_g / \del T = \rho c_v,
Expand Down
12 changes: 7 additions & 5 deletions src/RadMatterCoupling/test_radiation_matter_coupling.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,22 +74,24 @@ AMREX_GPU_HOST_DEVICE auto RadSystem<CouplingProblem>::ComputeFluxMeanOpacity(co
static constexpr int nmscalars_ = Physics_Traits<CouplingProblem>::numMassScalars;
template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<CouplingProblem>::ComputeTgasFromEint(const double /*rho*/, const double Egas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/) -> double
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/)
-> double
{
return std::pow(4.0 * Egas / alpha_SuOlson, 1. / 4.);
}

template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<CouplingProblem>::ComputeEintFromTgas(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/) -> double
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/)
-> double
{
return (alpha_SuOlson / 4.0) * std::pow(Tgas, 4);
}

template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<CouplingProblem>::ComputeEintTempDerivative(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/)
-> double
AMREX_GPU_HOST_DEVICE auto
quokka::EOS<CouplingProblem>::ComputeEintTempDerivative(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/) -> double
{
// This is also known as the heat capacity, i.e.
// \del E_g / \del T = \rho c_v,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,22 +76,24 @@ AMREX_GPU_HOST_DEVICE auto RadSystem<CouplingProblem>::ComputeFluxMeanOpacity(co
static constexpr int nmscalars_ = Physics_Traits<CouplingProblem>::numMassScalars;
template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<CouplingProblem>::ComputeTgasFromEint(const double /*rho*/, const double Egas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/) -> double
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/)
-> double
{
return std::pow(4.0 * Egas / alpha_SuOlson, 1. / 4.);
}

template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<CouplingProblem>::ComputeEintFromTgas(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/) -> double
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/)
-> double
{
return (alpha_SuOlson / 4.0) * std::pow(Tgas, 4);
}

template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<CouplingProblem>::ComputeEintTempDerivative(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/)
-> double
AMREX_GPU_HOST_DEVICE auto
quokka::EOS<CouplingProblem>::ComputeEintTempDerivative(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/) -> double
{
// This is also known as the heat capacity, i.e.
// \del E_g / \del T = \rho c_v,
Expand Down
12 changes: 7 additions & 5 deletions src/RadSuOlson/test_radiation_SuOlson.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,22 +83,24 @@ AMREX_GPU_HOST_DEVICE auto RadSystem<MarshakProblem>::ComputeFluxMeanOpacity(con
static constexpr int nmscalars_ = Physics_Traits<MarshakProblem>::numMassScalars;
template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<MarshakProblem>::ComputeTgasFromEint(const double /*rho*/, const double Egas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/) -> double
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/)
-> double
{
return std::pow(4.0 * Egas / alpha_SuOlson, 1. / 4.);
}

template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<MarshakProblem>::ComputeEintFromTgas(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/) -> double
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/)
-> double
{
return (alpha_SuOlson / 4.0) * (Tgas * Tgas * Tgas * Tgas);
}

template <>
AMREX_GPU_HOST_DEVICE auto quokka::EOS<MarshakProblem>::ComputeEintTempDerivative(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/)
-> double
AMREX_GPU_HOST_DEVICE auto
quokka::EOS<MarshakProblem>::ComputeEintTempDerivative(const double /*rho*/, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/) -> double
{
// This is also known as the heat capacity, i.e.
// \del E_g / \del T = \rho c_v,
Expand Down
10 changes: 5 additions & 5 deletions src/RadTophat/test_radiation_tophat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,24 +86,24 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto RadSystem<TophatProblem>::ComputeF
static constexpr int nmscalars_ = Physics_Traits<TophatProblem>::numMassScalars;
template <>
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto
quokka::EOS<TophatProblem>::ComputeTgasFromEint(const double rho, const double Egas, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/)
-> double
quokka::EOS<TophatProblem>::ComputeTgasFromEint(const double rho, const double Egas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/) -> double
{
return Egas / (rho * c_v);
}

template <>
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto
quokka::EOS<TophatProblem>::ComputeEintFromTgas(const double rho, const double Tgas, std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/)
-> double
quokka::EOS<TophatProblem>::ComputeEintFromTgas(const double rho, const double Tgas,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/) -> double
{
return rho * c_v * Tgas;
}

template <>
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto
quokka::EOS<TophatProblem>::ComputeEintTempDerivative(const double rho, const double /*Tgas*/,
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> /*massScalars*/) -> double
std::optional<amrex::GpuArray<amrex::Real, nmscalars_>> const & /*massScalars*/) -> double
{
// This is also known as the heat capacity, i.e.
// \del E_g / \del T = \rho c_v,
Expand Down

0 comments on commit c52d071

Please sign in to comment.