Theseus
Compressible flow solver
Loading...
Searching...
No Matches
LTEGasModel.hpp
Go to the documentation of this file.
1// Copyright (c) 2025-2026 Board of Trustees of the University of Illinois
2//
3// This file is part of Theseus.
4//
5// SPDX-License-Identifier: BSD-3-Clause
6#pragma once
7
8#include "Physics.hpp"
9#include "GasState.hpp"
10#include "LTETable.hpp"
11#include "LTEEOS.hpp"
12#include "LTETransport.hpp"
13
14using namespace Theseus::LTETable;
15
16namespace Theseus
17{
18
19// ============================================================================
20// LTEGasModel: Encapsulate/wrap LTE EOS/Transport in standard interface
21// ============================================================================
22 template <typename EOSImpl, typename TransportImpl>
24 {
25
29 EOSImpl eos;
30 TransportImpl transport;
31
32 MFEM_HOST_DEVICE LTEGasModel() = default;
33
34 MFEM_HOST_DEVICE
35 LTEGasModel(const PhysicsConstants &phys_in, const StateLayout &L_in,
36 const LTETables &T_in, const EOSImpl &eos_in, const TransportImpl &tr_in)
37 : phys(phys_in), L(L_in), T(T_in), eos(eos_in), transport(tr_in)
38 { };
39
40 MFEM_HOST_DEVICE
41 LTEGasModel(const PhysicsConstants &phys_in, const StateLayout &L_in,
42 const LTETables &T_in)
43 : phys(phys_in), L(L_in), T(T_in)
44 { };
45
46 template<typename HostDataT>
49 T.tables = {
50 host_data.lteTableData->lte_table.Read(),
51 host_data.lteTableData->inv_table.Read(),
52 host_data.lteTableData->rho_grid.Read(),
53 host_data.lteTableData->T_grid.Read(),
54 host_data.lteTableData->e_grid.Read()
55 };
56 return retVal;
57 }
58
59 // Utilities and constants etc
60 MFEM_HOST_DEVICE
61 inline int num_equations() const
62 { return L.nequations(); };
63
64 MFEM_HOST_DEVICE
65 inline int dim() const
66 { return L.dim; };
67
68 // State Access
69 template<typename StateView>
70 MFEM_HOST_DEVICE
71 inline mfem::real_t velocity(const StateView &S, int d) const
72 { return S.velocity(L,d);};
73
74 template<typename StateView>
75 MFEM_HOST_DEVICE
76 inline mfem::real_t momentum(const StateView &S, int d) const
77 { return S.momentum(L,d);};
78
79 template<typename StateView>
80 MFEM_HOST_DEVICE
81 inline mfem::real_t density(const StateView &S) const
82 {
83 return eos.density(phys, L, S, T);
84 };
85
86 template<typename StateView>
87 MFEM_HOST_DEVICE
88 inline mfem::real_t mass(const StateView &S) const
89 {
90 return eos.density(phys, L, S, T);
91 };
92
93 template<typename StateView>
94 MFEM_HOST_DEVICE
95 inline mfem::real_t scalar(const StateView &S, int s) const
96 {
97 return S.scalar(L, s);
98 };
99
100 template<typename StateView>
101 MFEM_HOST_DEVICE
102 inline mfem::real_t energy(const StateView &S) const
103 {
104 return S.energy(L);
105 };
106
107 // --- Thermodynamics ------------------------------------------------------
108 template<typename StateView>
109 MFEM_HOST_DEVICE
110 inline mfem::real_t pressure(const StateView &S) const
111 {
112 return eos.pressure(phys, L, S, T);
113 }
114
115 template<typename StateView>
116 MFEM_HOST_DEVICE
117 inline mfem::real_t gamma(const StateView &S) const
118 {
119 return eos.gamma(phys, L, S, T);
120 }
121
122 template<typename StateView>
123 MFEM_HOST_DEVICE
124 inline mfem::real_t cp(const StateView &S) const
125 {
126 return eos.cp(phys, L, S, T);
127 }
128
129 template<typename StateView>
130 MFEM_HOST_DEVICE
131 inline mfem::real_t R_gas(const StateView &S) const
132 {
133 return eos.R_gas(phys, L, S, T);
134 }
135
136 template<typename StateView>
137 MFEM_HOST_DEVICE
138 inline mfem::real_t temperature(const StateView &S) const
139 {
140 return eos.temperature(phys, L, S, T);
141 }
142
143 template<typename StateView>
144 MFEM_HOST_DEVICE
145 inline mfem::real_t sound_speed(const StateView &S) const
146 {
147 return eos.sound_speed(phys, L, S, T);
148 }
149
150 template<typename StateView>
151 MFEM_HOST_DEVICE
152 inline mfem::real_t kinetic_energy_density(const StateView &S) const
153 {
154 return eos.kinetic_energy_density(phys, L, S, T);
155 }
156
157 template<typename StateView>
158 MFEM_HOST_DEVICE
159 inline mfem::real_t internal_energy_from_pressure(const StateView &S, mfem::real_t pressure) const
160 {
161 // rho*e = rho*E - 0.5*rho*|u|^2
162 return eos.internal_energy_from_pressure(phys, L, S, pressure, T);
163 }
164
165 template<typename StateView>
166 MFEM_HOST_DEVICE
167 inline mfem::real_t specific_internal_energy(const StateView &S) const
168 {
169 return eos.specific_internal_energy(phys, L, S, T);
170 }
171
172 template<typename StateView>
173 MFEM_HOST_DEVICE
174 inline void grad_temperature(const StateView &S,
175 const mfem::real_t *grad_r, const mfem::real_t *grad_p,
176 mfem::real_t *grad_t) const
177 {
178 return eos.grad_temperature(phys, L, S, grad_r, grad_p, grad_t, T);
179 }
180
181 template<typename StateView>
182 MFEM_HOST_DEVICE
183 inline mfem::real_t entropy(const StateView &S) const
184 {
185 return eos.entropy(phys, L, S, T);
186 }
187
188 template<typename InStateView, typename OutStateView>
189 MFEM_HOST_DEVICE
190 inline void entropy_state(const InStateView &S, OutStateView &E) const
191 {
192 return eos.entropy_state(phys, L, S, E, T);
193 }
194
195 template<typename InStateView, typename OutStateView>
196 MFEM_HOST_DEVICE
197 inline void grad_entropy_to_grad_prim(const InStateView &S, const InStateView &dS,
198 OutStateView &dPrim) const
199 {
200 return eos.grad_entropy_to_grad_prim(phys, L, S, dS, dPrim, T);
201 }
202
203 template<typename InStateView, typename OutStateView>
204 MFEM_HOST_DEVICE
205 inline void entropy_to_conserved(const InStateView &Se, OutStateView &Sc) const
206 {
207 return eos.entropy_to_conserved(phys, L, Se, Sc, T);
208 }
209
210 template<typename InStateView, typename OutStateView>
211 inline void primitive_to_conserved(const InStateView &prim, OutStateView &cons) const
212 {
213 return eos.primitive_to_conserved(phys, L, prim, cons, T);
214 }
215
216 // --- Transport -----------------------------------------------------------
217
218 template<typename StateView>
219 MFEM_HOST_DEVICE
220 inline mfem::real_t viscosity(const StateView &S) const
221 {
222 return transport.viscosity(phys, L, eos, S, T);
223 }
224
225 template<typename StateView>
226 MFEM_HOST_DEVICE
227 inline mfem::real_t bulk_viscosity(const StateView &S) const
228 {
229 return transport.bulk_viscosity(phys, L, eos, S, T);
230 }
231
232 template<typename StateView>
233 MFEM_HOST_DEVICE
234 inline mfem::real_t thermal_conductivity(const StateView &S) const
235 {
236 return transport.thermal_conductivity(phys, L, eos, S, T);
237 }
238
239 };
240
242
243} // namespace Theseus
Definition LTETable.hpp:19
Definition AxisymmetricGeometry.hpp:15
LTEGasModel< LTEGasEOS, LTETransport > LTEGas
Definition LTEGasModel.hpp:241
Definition LTEGasModel.hpp:24
MFEM_HOST_DEVICE void grad_entropy_to_grad_prim(const InStateView &S, const InStateView &dS, OutStateView &dPrim) const
Definition LTEGasModel.hpp:197
MFEM_HOST_DEVICE mfem::real_t cp(const StateView &S) const
Definition LTEGasModel.hpp:124
MFEM_HOST_DEVICE mfem::real_t internal_energy_from_pressure(const StateView &S, mfem::real_t pressure) const
Definition LTEGasModel.hpp:159
MFEM_HOST_DEVICE mfem::real_t entropy(const StateView &S) const
Definition LTEGasModel.hpp:183
MFEM_HOST_DEVICE mfem::real_t pressure(const StateView &S) const
Definition LTEGasModel.hpp:110
MFEM_HOST_DEVICE mfem::real_t kinetic_energy_density(const StateView &S) const
Definition LTEGasModel.hpp:152
TransportImpl transport
Definition LTEGasModel.hpp:30
MFEM_HOST_DEVICE int num_equations() const
Definition LTEGasModel.hpp:61
MFEM_HOST_DEVICE mfem::real_t density(const StateView &S) const
Definition LTEGasModel.hpp:81
Theseus::PhysicsConstants phys
Definition LTEGasModel.hpp:26
MFEM_HOST_DEVICE void grad_temperature(const StateView &S, const mfem::real_t *grad_r, const mfem::real_t *grad_p, mfem::real_t *grad_t) const
Definition LTEGasModel.hpp:174
MFEM_HOST_DEVICE void entropy_state(const InStateView &S, OutStateView &E) const
Definition LTEGasModel.hpp:190
MFEM_HOST_DEVICE int dim() const
Definition LTEGasModel.hpp:65
MFEM_HOST_DEVICE mfem::real_t temperature(const StateView &S) const
Definition LTEGasModel.hpp:138
void primitive_to_conserved(const InStateView &prim, OutStateView &cons) const
Definition LTEGasModel.hpp:211
MFEM_HOST_DEVICE mfem::real_t thermal_conductivity(const StateView &S) const
Definition LTEGasModel.hpp:234
MFEM_HOST_DEVICE mfem::real_t R_gas(const StateView &S) const
Definition LTEGasModel.hpp:131
MFEM_HOST_DEVICE mfem::real_t sound_speed(const StateView &S) const
Definition LTEGasModel.hpp:145
MFEM_HOST_DEVICE mfem::real_t viscosity(const StateView &S) const
Definition LTEGasModel.hpp:220
MFEM_HOST_DEVICE mfem::real_t bulk_viscosity(const StateView &S) const
Definition LTEGasModel.hpp:227
MFEM_HOST_DEVICE LTEGasModel()=default
MFEM_HOST_DEVICE void entropy_to_conserved(const InStateView &Se, OutStateView &Sc) const
Definition LTEGasModel.hpp:205
MFEM_HOST_DEVICE mfem::real_t scalar(const StateView &S, int s) const
Definition LTEGasModel.hpp:95
LTEGasModel< EOSImpl, TransportImpl > to_device(HostDataT &host_data)
Definition LTEGasModel.hpp:47
MFEM_HOST_DEVICE mfem::real_t momentum(const StateView &S, int d) const
Definition LTEGasModel.hpp:76
MFEM_HOST_DEVICE mfem::real_t velocity(const StateView &S, int d) const
Definition LTEGasModel.hpp:71
Theseus::StateLayout L
Definition LTEGasModel.hpp:27
EOSImpl eos
Definition LTEGasModel.hpp:29
MFEM_HOST_DEVICE LTEGasModel(const PhysicsConstants &phys_in, const StateLayout &L_in, const LTETables &T_in, const EOSImpl &eos_in, const TransportImpl &tr_in)
Definition LTEGasModel.hpp:35
MFEM_HOST_DEVICE mfem::real_t gamma(const StateView &S) const
Definition LTEGasModel.hpp:117
LTETables T
Definition LTEGasModel.hpp:28
MFEM_HOST_DEVICE LTEGasModel(const PhysicsConstants &phys_in, const StateLayout &L_in, const LTETables &T_in)
Definition LTEGasModel.hpp:41
MFEM_HOST_DEVICE mfem::real_t specific_internal_energy(const StateView &S) const
Definition LTEGasModel.hpp:167
MFEM_HOST_DEVICE mfem::real_t energy(const StateView &S) const
Definition LTEGasModel.hpp:102
MFEM_HOST_DEVICE mfem::real_t mass(const StateView &S) const
Definition LTEGasModel.hpp:88
Definition LTETable.hpp:75
LTETable::View tables
Definition LTETable.hpp:82
const mfem::real_t * lte_table
Definition LTETable.hpp:67
Definition Physics.hpp:14
Definition GasState.hpp:37
MFEM_HOST_DEVICE int nequations() const
Definition GasState.hpp:91
int dim
Definition GasState.hpp:38