Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/PDE/EoS/ThermallyPerfectGas.hpp
4 : : \copyright 2012-2015 J. Bakosi,
5 : : 2016-2018 Los Alamos National Security, LLC.,
6 : : 2019-2021 Triad National Security, LLC.
7 : : All rights reserved. See the LICENSE file for details.
8 : : \brief Thermally perfect gas equation of state
9 : : \details This file declares functions for the thermally perfect gas equation
10 : : of state for the compressible flow equations.
11 : : */
12 : : // *****************************************************************************
13 : : #ifndef ThermallyPerfectGas_h
14 : : #define ThermallyPerfectGas_h
15 : :
16 : : #include "Data.hpp"
17 : :
18 : : namespace inciter {
19 : :
20 [ + - ]: 72 : class ThermallyPerfectGas {
21 : :
22 : : private:
23 : : tk::real m_gamma;
24 : : tk::real m_R;
25 : : std::vector< tk::real > m_cp_coeff{std::vector< tk::real >(8)};
26 : :
27 : : public:
28 : : //! Default constructor
29 : : ThermallyPerfectGas() = default;
30 : :
31 : : //! Constructor
32 : : ThermallyPerfectGas(
33 : : tk::real gamma,
34 : : tk::real R,
35 : : std::vector< tk::real > cp_coeff );
36 : :
37 : : //! Set rho0 EOS parameter. No-op.
38 : : void setRho0(tk::real) {}
39 : :
40 : : //! Calculate density from the material pressure and temperature
41 : : tk::real density( tk::real pr,
42 : : tk::real temp ) const;
43 : :
44 : : //! Calculate pressure from the material density, momentum and total energy
45 : : tk::real pressure( tk::real rho,
46 : : tk::real u,
47 : : tk::real v,
48 : : tk::real w,
49 : : tk::real rhoE,
50 : : tk::real alpha=1.0,
51 : : std::size_t imat=0,
52 : : const std::array< std::array< tk::real, 3 >, 3 >& defgrad={{}}) const;
53 : :
54 : : //! \brief Calculate the Cauchy stress tensor from the material density,
55 : : //! momentum, and total energy
56 : : std::array< std::array< tk::real, 3 >, 3 >
57 : : CauchyStress(
58 : : tk::real,
59 : : tk::real,
60 : : tk::real,
61 : : tk::real,
62 : : tk::real,
63 : : tk::real,
64 : : std::size_t,
65 : : const std::array< std::array< tk::real, 3 >, 3 >& adefgrad={{}} ) const;
66 : :
67 : : //! Calculate speed of sound from the material density and material pressure
68 : : tk::real soundspeed( tk::real rho,
69 : : tk::real pr,
70 : : tk::real alpha=1.0,
71 : : std::size_t imat=0,
72 : : const std::array< std::array< tk::real, 3 >, 3 >& adefgrad={{}},
73 : : const std::array< tk::real, 3 >& asigman={{}} ) const;
74 : :
75 : : //! Calculate speed of shear waves
76 : : tk::real shearspeed(
77 : : tk::real,
78 : : tk::real,
79 : : std::size_t ) const { return 0.0; }
80 : :
81 : : //! \brief Calculate material specific total energy from the material
82 : : //! density, momentum and material pressure
83 : : tk::real totalenergy( tk::real rho,
84 : : tk::real u,
85 : : tk::real v,
86 : : tk::real w,
87 : : tk::real pr,
88 : : const std::array< std::array< tk::real, 3 >, 3 >& defgrad={{}} ) const;
89 : :
90 : : //! \brief Calculate material temperature from the material density, and
91 : : //! material specific total energy
92 : : tk::real temperature( tk::real rho,
93 : : tk::real u,
94 : : tk::real v,
95 : : tk::real w,
96 : : tk::real rhoE,
97 : : tk::real alpha=1.0,
98 : : const std::array< std::array< tk::real, 3 >, 3 >& defgrad={{}} ) const;
99 : :
100 : : //! Compute the minimum allowed pressure
101 : : tk::real min_eff_pressure(
102 : : tk::real min,
103 : : tk::real,
104 : : tk::real ) const
105 : : { return min; }
106 : :
107 : : //! Compute the reference density
108 : : tk::real refDensity() const { return density(refPressure(), 300.0); }
109 : :
110 : : //! Compute the reference pressure
111 : : tk::real refPressure() const { return 1.0e5; }
112 : :
113 : : //! Return initial density
114 : 0 : tk::real rho0() const { return density(1.0e5, 300.0); }
115 : :
116 : : /** @name Charm++ pack/unpack serializer member functions */
117 : : ///@{
118 : : //! \brief Pack/Unpack serialize member function
119 : : //! \param[in,out] p Charm++'s PUP::er serializer object reference
120 : : void pup( PUP::er &p ) /*override*/ {
121 : : p | m_gamma;
122 : : p | m_R;
123 : : p | m_cp_coeff;
124 : : }
125 : : //! \brief Pack/Unpack serialize operator|
126 : : //! \param[in,out] p Charm++'s PUP::er serializer object reference
127 : : //! \param[in,out] i ThermallyPerfectGas object reference
128 : : friend void operator|( PUP::er& p, ThermallyPerfectGas& i ) { i.pup(p); }
129 : : //@}
130 : : };
131 : :
132 : : } //inciter::
133 : :
134 : : #endif // ThermallyPerfectGas_h
|