BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
cl_GM_EoS_Hydrogen.hpp
Go to the documentation of this file.
1/*
2 * BELFEM -- The Berkeley Lab Finite Element Framework
3 * Copyright (c) 2026, The Regents of the University of California,
4 * through Lawrence Berkeley National Laboratory (subject to receipt of any required
5 * approvals from the U.S. Dept. of Energy). All rights reserved.
6 *
7 * Developers: Christian Messe, Gregory Giard
8 *
9 * See the top-level LICENSE file for the complete license and disclaimer.
10 */
11
12#ifndef BELFEM_CL_GM_HELMHOLTZ_HYDROGEN_HPP
13#define BELFEM_CL_GM_HELMHOLTZ_HYDROGEN_HPP
14#include "en_Helmholtz.hpp"
15#include "cl_GM_Helmholtz.hpp"
16#include "cl_Vector.hpp"
17
18namespace belfem
19{
20 namespace gasmodels
21 {
43 class EoS_Hydrogen : public Helmholtz
44 {
47
50
52 real mNab ;
53
56
59
64
66 Vector< real > mAlpha ;
67
69 Vector< real > mBeta ;
70
72 Vector< real > mGamma ;
73
75 Vector< real > mPsi ;
76
78 //Vector< real > mVapN ;
79
81 //Vector< real > mVapK ;
82
83
84 // container for expression delta^d
85 // entry 14 is the stamp and contains the value of delta
86 mutable Vector< real > mDeltaPowD ;
87
88 // container for expression tau^theta
89 // entry 14 is the stamp and contains the value of tau
90 mutable Vector< real > mTauPowT ;
91
92 // help function for phi0
93 mutable Vector< real > mE ;
94
95 // help function
96 // entry 14 contains value of tau
97 // entry 15 contains value of delta
98 mutable Vector< real > mF ;
99
100 // help function
101 // entry 14 contains value of tau
102 // entry 15 contains value of delta
103 mutable Vector< real > mG ;
104
105//----------------------------------------------------------------------------
106 public:
107//----------------------------------------------------------------------------
108
109 EoS_Hydrogen( Gas & aParent, const HelmholtzModel aModel );
110
112
113//----------------------------------------------------------------------------
114 private:
115//----------------------------------------------------------------------------
116
121 void
122 select_table( const HelmholtzModel aModel );
123
124//----------------------------------------------------------------------------
125// help functions
126//----------------------------------------------------------------------------
127
128 void
129 update_e() const ;
130
131 void
132 update_f() const ;
133
134//----------------------------------------------------------------------------
135
136 void
137 update_g() const;
138
139//----------------------------------------------------------------------------
140
141 void
142 update_delta_pow_d() const;
143
144//----------------------------------------------------------------------------
145
146 void
147 update_tau_pow_theta() const;
148
149//----------------------------------------------------------------------------
150 protected:
151//----------------------------------------------------------------------------
152
153 real
154 compute_phi0() const ;
155
156 //----------------------------------------------------------------------------
157
158 real
159 compute_phir() const ;
160
161//----------------------------------------------------------------------------
162
163 real
164 compute_phi0_t() const ;
165
166//----------------------------------------------------------------------------
167
168 real
169 compute_phi0_tt() const ;
170
171//----------------------------------------------------------------------------
172
173 real
174 compute_phir_d() const ;
175
176//----------------------------------------------------------------------------
177
178 real
179 compute_phir_dd() const ;
180
181//----------------------------------------------------------------------------
182
183 real
184 compute_phir_t() const ;
185
186//----------------------------------------------------------------------------
187
188 real
189 compute_phir_tt() const ;
190
191//----------------------------------------------------------------------------
192
193 real
194 compute_phir_dt() const ;
195
196//----------------------------------------------------------------------------
197 };
198
199//----------------------------------------------------------------------------
200// help functions for real gas contribution to helmholtz function
201//----------------------------------------------------------------------------
202
203 inline void
204 EoS_Hydrogen::update_e() const
205 {
206 // the e-values depend on tau only; mE( 0 ) is the stamp
207 if ( mTau != mE( 0 ) )
208 {
209 mE( 0 ) = mTau ;
210 for( uint k=2; k<mNab; ++k )
211 {
212 mE( k ) = std::exp( mB( k ) * mTau );
213 }
214 }
215 }
216
217//----------------------------------------------------------------------------
218
219 inline void
220 EoS_Hydrogen::update_f() const
221 {
222 this->update_tau_pow_theta() ;
223 this->update_delta_pow_d() ;
224
225 if( mTau != mF( 14 ) || mDelta != mF( 15 ) )
226 {
227 mF( 0 ) = mN( 0 ) * mDeltaPowD( 0 ) * mTauPowT( 0 ) ;
228 mF( 1 ) = mN( 1 ) * mDeltaPowD( 1 ) * mTauPowT( 1 ) ;
229 mF( 2 ) = mN( 2 ) * mDeltaPowD( 2 ) * mTauPowT( 2 ) ;
230 mF( 3 ) = mN( 3 ) * mDeltaPowD( 3 ) * mTauPowT( 3 ) ;
231 mF( 4 ) = mN( 4 ) * mDeltaPowD( 4 ) * mTauPowT( 4 ) ;
232 mF( 5 ) = mN( 5 ) * mDeltaPowD( 5 ) * mTauPowT( 5 ) ;
233 mF( 6 ) = mN( 6 ) * mDeltaPowD( 6 ) * mTauPowT( 6 ) ;
234 mF( 7 ) = mN( 7 ) * mDeltaPowD( 7 ) * mTauPowT( 7 ) ;
235 mF( 8 ) = mN( 8 ) * mDeltaPowD( 8 ) * mTauPowT( 8 ) ;
236 mF( 9 ) = mN( 9 ) * mDeltaPowD( 9 ) * mTauPowT( 9 ) ;
237 mF( 10 ) = mN( 10 ) * mDeltaPowD( 10 ) * mTauPowT( 10 ) ;
238 mF( 11 ) = mN( 11 ) * mDeltaPowD( 11 ) * mTauPowT( 11 ) ;
239 mF( 12 ) = mN( 12 ) * mDeltaPowD( 12 ) * mTauPowT( 12 ) ;
240 mF( 13 ) = mN( 13 ) * mDeltaPowD( 13 ) * mTauPowT( 13 ) ;
241
242 mF( 14 ) = mTau ;
243 mF( 15 ) = mDelta ;
244 }
245 }
246
247//----------------------------------------------------------------------------
248
249 inline void
250 EoS_Hydrogen::update_g() const
251 {
252 if( mTau != mG( 14 ) || mDelta != mG( 15 ) )
253 {
254 mG( 7 ) = std::exp( -mDelta );
255 mG( 8 ) = mG( 7 );
256
257 mG( 9 ) = std::exp(
258 mAlpha( 9 ) * std::pow( mDelta - mPsi( 9 ), 2 )
259 + mBeta( 9 ) * std::pow( mTau - mGamma( 9 ), 2 ) );
260
261 mG( 10 ) = std::exp(
262 mAlpha( 10 ) * std::pow( mDelta - mPsi( 10 ), 2 )
263 + mBeta( 10 ) * std::pow( mTau - mGamma( 10 ), 2 ) );
264
265 mG( 11 ) = std::exp(
266 mAlpha( 11 ) * std::pow( mDelta - mPsi( 11 ), 2 )
267 + mBeta( 11 ) * std::pow( mTau - mGamma( 11 ), 2 ) );
268
269 mG( 12 ) = std::exp(
270 mAlpha( 12 ) * std::pow( mDelta - mPsi( 12 ), 2 )
271 + mBeta( 12 ) * std::pow( mTau - mGamma( 12 ), 2 ) );
272
273
274 mG( 13 ) = std::exp(
275 mAlpha( 13 ) * std::pow( mDelta - mPsi( 13 ), 2 )
276 + mBeta( 13 ) * std::pow( mTau - mGamma( 13 ), 2 ) );
277
278
279 mG( 14 ) = mTau ;
280 mG( 15 ) = mDelta ;
281 }
282 }
283
284//----------------------------------------------------------------------------
285
286 inline void
287 EoS_Hydrogen::update_delta_pow_d() const
288 {
289 if( mDelta != mDeltaPowD( 14 ) )
290 {
291 // integer exponents: repeated multiplication instead of std::pow
292 for( uint k=0; k<14; ++k )
293 {
294 real tPow = 1.0 ;
295
296 for( uint i=0; i<mD( k ); ++i )
297 {
298 tPow *= mDelta ;
299 }
300
301 mDeltaPowD( k ) = tPow ;
302 }
303
304 mDeltaPowD( 14 ) = mDelta ;
305 }
306 }
307
308//----------------------------------------------------------------------------
309
310 inline void
311 EoS_Hydrogen::update_tau_pow_theta() const
312 {
313 if( mTau != mTauPowT( 14 ) )
314 {
315 mTauPowT( 0 ) = std::pow( mTau, mT( 0 ) );
316 mTauPowT( 1 ) = std::pow( mTau, mT( 1 ) );
317 mTauPowT( 2 ) = std::pow( mTau, mT( 2 ) );
318 mTauPowT( 3 ) = std::pow( mTau, mT( 3 ) );
319 mTauPowT( 4 ) = std::pow( mTau, mT( 4 ) );
320 mTauPowT( 5 ) = std::pow( mTau, mT( 5 ) );
321 mTauPowT( 6 ) = std::pow( mTau, mT( 6 ) );
322 mTauPowT( 7 ) = std::pow( mTau, mT( 7 ) );
323 mTauPowT( 8 ) = std::pow( mTau, mT( 8 ) );
324 mTauPowT( 9 ) = std::pow( mTau, mT( 9 ) );
325 mTauPowT( 10 ) = std::pow( mTau, mT( 10 ) );
326 mTauPowT( 11 ) = std::pow( mTau, mT( 11 ) );
327 mTauPowT( 12 ) = std::pow( mTau, mT( 12 ) );
328 mTauPowT( 13 ) = std::pow( mTau, mT( 13 ) );
329
330 mTauPowT( 14 ) = mTau ;
331 }
332 }
333
334//----------------------------------------------------------------------------
335 }
336}
337#endif //BELFEM_CL_GM_HELMHOLTZ_HYDROGEN_HPP
The gas class that provides the fluid model.
Definition cl_Gas.hpp:81
real compute_phi0_t() const
Definition cl_GM_EoS_Hydrogen.cpp:234
real compute_phir_dd() const
Definition cl_GM_EoS_Hydrogen.cpp:300
real compute_phi0() const
Definition cl_GM_EoS_Hydrogen.cpp:191
real compute_phir_tt() const
Definition cl_GM_EoS_Hydrogen.cpp:364
real compute_phi0_tt() const
Definition cl_GM_EoS_Hydrogen.cpp:252
real compute_phir_t() const
Definition cl_GM_EoS_Hydrogen.cpp:334
real compute_phir_dt() const
Definition cl_GM_EoS_Hydrogen.cpp:399
real compute_phir_d() const
Definition cl_GM_EoS_Hydrogen.cpp:270
EoS_Hydrogen(Gas &aParent, const HelmholtzModel aModel)
Definition cl_GM_EoS_Hydrogen.cpp:24
real compute_phir() const
Definition cl_GM_EoS_Hydrogen.cpp:209
Helmholtz(Gas &aParent, const string &aLabel)
Definition cl_GM_Helmholtz.cpp:25
const real & mTau
Definition cl_GM_Helmholtz.hpp:115
const real & mDelta
Definition cl_GM_Helmholtz.hpp:116
Definition cl_Gas.hpp:42
USER GUIDES:
Definition cl_Capacitor.cpp:16
HelmholtzModel
Definition en_Helmholtz.hpp:18
unsigned int uint
Definition typedefs.hpp:30
double real
Definition typedefs.hpp:36
i
Definition main.py:48