https://mooseframework.inl.gov
TemperaturePressureFunctionFluidPropertiesTest.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
12 
17 {
18  EXPECT_EQ(_fp->fluidName(), "TemperaturePressureFunctionFluidProperties");
19 }
20 
25 {
26  const Real cv = 4186.0;
27 
28  const Real tol = REL_TOL_CONSISTENCY;
29  const Real large_tol = 100 * tol;
30 
31  Real p = 8.56E7;
32  Real T = 200.0;
33  Real e = cv * T;
34  Real v = 1 / (1400 + 2.5 * T + 32e-5 * p);
35  Real h = cv * T + p / _fp->rho_from_p_T(p, T);
36 
37  // See header for expressions
38  Real thermal_cond = 14 + 2e-2 * T + 3e-5 * p;
39  Real visc = 1e-3 + 1e-5 * T - 3e-9 * p;
40  Real density = 1 / v;
41  Real alpha = -1. / density * 2.5;
42  Real beta = -1. / density * 32e-5;
43  Real cp = cv + MathUtils::pow(alpha, 2) * T / density / beta;
44 
45  // Testing the properties with a constant cv
46  ABS_TEST(_fp->cp_from_p_T(p, T), cp, tol);
47  ABS_TEST(_fp->cv_from_p_T(p, T), cv, tol);
48  ABS_TEST(_fp->k_from_p_T(p, T), thermal_cond, tol);
49  ABS_TEST(_fp->k_from_p_T(p, T), thermal_cond, tol);
50  ABS_TEST(_fp->rho_from_p_T(p, T), density, tol);
51  ABS_TEST(_fp->v_from_p_T(p, T), 1 / density, tol);
52  ABS_TEST(_fp->e_from_p_T(p, T), cv * T, tol);
53  ABS_TEST(_fp->e_from_p_rho(p, 1. / v),
54  cv * T,
55  large_tol); // uses a Newton solve for variable set inversion
56  ABS_TEST(_fp->mu_from_p_T(p, T), visc, tol);
57  ABS_TEST(_fp->h_from_p_T(p, T), h, tol);
58  ABS_TEST(_fp->cp_from_v_e(v, e), cp, tol);
59  ABS_TEST(_fp->cv_from_v_e(v, e), cv, tol);
60  ABS_TEST(_fp->k_from_v_e(v, e), thermal_cond, tol);
61  ABS_TEST(_fp->T_from_v_e(v, e), T, tol);
62  ABS_TEST(_fp->T_from_p_h(p, _fp->h_from_p_T(p, T)), T, tol);
63  ABS_TEST(_fp->T_from_p_rho(p, 1. / v), T, tol);
64  ABS_TEST(
65  _fp->p_from_v_e(v, e), p, 1.5 * large_tol); // uses a Newton solve for variable set inversion
66  ABS_TEST(_fp->mu_from_v_e(v, e), visc, tol);
67 
68  p = 1.06841E9;
69  T = 300.0;
70  e = cv * T;
71  v = 1 / (1400 + 2.5 * T + 32e-5 * p);
72  h = cv * T + p / _fp->rho_from_p_T(p, T);
73 
74  // See header for expressions
75  thermal_cond = 14 + 2e-2 * T + 3e-5 * p;
76  visc = 1e-3 + 1e-5 * T - 3e-9 * p;
77  density = 1 / v;
78  alpha = -1. / density * 2.5;
79  beta = -1. / density * 32e-5;
80  cp = cv + MathUtils::pow(alpha, 2) * T / density / beta;
81 
82  ABS_TEST(_fp->cp_from_p_T(p, T), cp, tol);
83  ABS_TEST(_fp->cv_from_p_T(p, T), cv, tol);
84  ABS_TEST(_fp->k_from_p_T(p, T), thermal_cond, tol);
85  ABS_TEST(_fp->k_from_p_T(p, T), thermal_cond, tol);
86  ABS_TEST(_fp->rho_from_p_T(p, T), density, tol);
87  ABS_TEST(_fp->v_from_p_T(p, T), 1 / density, tol);
88  ABS_TEST(_fp->e_from_p_T(p, T), cv * T, tol);
89  ABS_TEST(_fp->e_from_p_rho(p, 1. / v),
90  cv * T,
91  large_tol); // uses a Newton solve for variable set inversion
92  ABS_TEST(_fp->mu_from_p_T(p, T), visc, tol);
93  ABS_TEST(_fp->h_from_p_T(p, T), h, tol);
94  ABS_TEST(_fp->cp_from_v_e(v, e), cp, tol);
95  ABS_TEST(_fp->cv_from_v_e(v, e), cv, tol);
96  ABS_TEST(_fp->k_from_v_e(v, e), thermal_cond, tol);
97  ABS_TEST(_fp->T_from_v_e(v, e), T, tol);
98  ABS_TEST(_fp->T_from_p_h(p, _fp->h_from_p_T(p, T)), T, tol);
99  ABS_TEST(_fp->T_from_p_rho(p, 1. / v), T, tol);
100  ABS_TEST(_fp->p_from_v_e(v, e), p, large_tol); // uses a Newton solve for variable set inversion
101  ABS_TEST(_fp->mu_from_v_e(v, e), visc, tol);
102 }
103 
108 {
109  const Real tol = REL_TOL_CONSISTENCY;
110  // properties computed using numerical integral evaluation
111  const Real large_tol = 1e-8;
112  // properties using both numerical integration and Newton's method
113  const Real newton_tol = 1e-4;
114 
115  {
116  Real p = 8.56E7;
117  Real T = 200.0;
118  Real cp = 3000. + 3 * T + 5e-4 * p;
119  Real e = 9220000.46051060781;
120  Real v = 1 / (1400 + 2.5 * T + 32e-5 * p);
121  Real h = e + p * v;
122 
123  // See header for expressions
124  Real thermal_cond = 14 + 2e-2 * T + 3e-5 * p;
125  Real visc = 1e-3 + 1e-5 * T - 3e-9 * p;
126  Real density = 1 / v;
127  Real alpha = -1. / density * 2.5;
128  Real beta = -1. / density * 32e-5;
129  Real cv = cp - MathUtils::pow(alpha, 2) * T / density / beta;
130 
131  ABS_TEST(_fp_cp->cp_from_p_T(p, T), cp, tol);
132  ABS_TEST(_fp_cp->cv_from_p_T(p, T), cv, tol);
133  ABS_TEST(_fp_cp->k_from_p_T(p, T), thermal_cond, tol);
134  ABS_TEST(_fp_cp->k_from_p_T(p, T), thermal_cond, tol);
135  ABS_TEST(_fp_cp->rho_from_p_T(p, T), density, tol);
136  ABS_TEST(_fp_cp->v_from_p_T(p, T), 1 / density, tol);
137  ABS_TEST(_fp_cp->e_from_p_T(p, T), e, tol);
138  ABS_TEST(_fp_cp->e_from_p_rho(p, 1. / v), e, 10 * large_tol);
139  ABS_TEST(_fp_cp->mu_from_p_T(p, T), visc, tol);
140  ABS_TEST(_fp_cp->h_from_p_T(p, T), h, tol);
141  ABS_TEST(_fp_cp->cp_from_v_e(v, e), cp, large_tol);
142  ABS_TEST(_fp_cp->cv_from_v_e(v, e), cv, large_tol);
143  ABS_TEST(_fp_cp->k_from_v_e(v, e), thermal_cond, large_tol);
144  ABS_TEST(_fp_cp->T_from_v_e(v, e), T, large_tol);
145  ABS_TEST(_fp_cp->T_from_p_h(p, _fp_cp->h_from_p_T(p, T)), T, large_tol);
146  ABS_TEST(_fp_cp->T_from_p_rho(p, 1. / v), T, large_tol);
147  ABS_TEST(_fp_cp->p_from_v_e(v, e), p, newton_tol);
148  ABS_TEST(_fp_cp->mu_from_v_e(v, e), visc, large_tol);
149  }
150 
151  {
152  Real p = 1.06841E8;
153  Real T = 300.0;
154  Real cp = 3000. + 3 * T + 5e-4 * p;
155  Real e = 17061150.6748718396;
156  Real v = 1 / (1400 + 2.5 * T + 32e-5 * p);
157  Real h = e + p * v;
158 
159  // See header for expressions
160  Real thermal_cond = 14 + 2e-2 * T + 3e-5 * p;
161  Real visc = 1e-3 + 1e-5 * T - 3e-9 * p;
162  Real density = 1 / v;
163  Real alpha = -1. / density * 2.5;
164  Real beta = -1. / density * 32e-5;
165  Real cv = cp - MathUtils::pow(alpha, 2) * T / density / beta;
166 
167  ABS_TEST(_fp_cp->cp_from_p_T(p, T), cp, tol);
168  ABS_TEST(_fp_cp->cv_from_p_T(p, T), cv, tol);
169  ABS_TEST(_fp_cp->k_from_p_T(p, T), thermal_cond, tol);
170  ABS_TEST(_fp_cp->k_from_p_T(p, T), thermal_cond, tol);
171  ABS_TEST(_fp_cp->rho_from_p_T(p, T), density, tol);
172  ABS_TEST(_fp_cp->v_from_p_T(p, T), 1 / density, tol);
173  ABS_TEST(_fp_cp->e_from_p_T(p, T), e, tol);
174  ABS_TEST(_fp_cp->e_from_p_rho(p, 1. / v), e, tol);
175  ABS_TEST(_fp_cp->mu_from_p_T(p, T), visc, tol);
176  ABS_TEST(_fp_cp->h_from_p_T(p, T), h, tol);
177  ABS_TEST(_fp_cp->cp_from_v_e(v, e), cp, 1.5 * large_tol);
178  ABS_TEST(_fp_cp->cv_from_v_e(v, e), cv, 1.5 * large_tol);
179  ABS_TEST(_fp_cp->k_from_v_e(v, e), thermal_cond, large_tol);
180  ABS_TEST(_fp_cp->T_from_v_e(v, e), T, 1.5 * large_tol);
181  ABS_TEST(_fp_cp->T_from_p_h(p, _fp_cp->h_from_p_T(p, T)), T, large_tol);
182  ABS_TEST(_fp_cp->T_from_p_rho(p, 1. / v), T, large_tol);
183  ABS_TEST(_fp_cp->p_from_v_e(v, e), p, newton_tol);
184  ABS_TEST(_fp_cp->mu_from_v_e(v, e), visc, large_tol);
185  }
186 }
187 
193 {
194  const Real tol = REL_TOL_DERIVATIVE;
195  // Finite difference just does not get much
196  const Real large_tol = 1000 * tol;
197 
198  // p, T and v, e are not consistent here but that's ok
199  Real p = 1.0E7;
200  Real T = 10.0;
201  Real e = 8.372E5;
202  Real v = 1.25E-3;
203 
204  AD_DERIV_TEST(_fp->rho_from_p_T, p, T, tol);
205  DERIV_TEST(_fp->rho_from_p_T, p, T, tol);
206  DERIV_TEST(_fp->v_from_p_T, p, T, tol);
207  DERIV_TEST(_fp->mu_from_p_T, p, T, tol);
208  DERIV_TEST(_fp->e_from_p_T, p, T, tol);
209  DERIV_TEST(_fp->h_from_p_T, p, T, tol);
210  DERIV_TEST(_fp->k_from_p_T, p, T, tol);
211  DERIV_TEST(_fp->cp_from_p_T, p, T, 4 * large_tol); // uses finite differencing
212  DERIV_TEST(_fp->cv_from_p_T, p, T, tol);
213  DERIV_TEST(_fp->cp_from_v_e, v, e, large_tol); // uses finite differencing
214  DERIV_TEST(_fp->cv_from_v_e, v, e, tol);
215 
216  e = 80150.0458189499477;
217  v = 0.00021621621621621621;
218 
219  AD_DERIV_TEST(_fp_cp->rho_from_p_T, p, T, tol);
220  DERIV_TEST(_fp_cp->rho_from_p_T, p, T, tol);
221  DERIV_TEST(_fp_cp->v_from_p_T, p, T, tol);
222  DERIV_TEST(_fp_cp->mu_from_p_T, p, T, tol);
223  DERIV_TEST(_fp_cp->e_from_p_T, p, T, tol);
224  DERIV_TEST(_fp_cp->h_from_p_T, p, T, tol);
225  DERIV_TEST(_fp_cp->k_from_p_T, p, T, tol);
226  DERIV_TEST(_fp_cp->cp_from_p_T, p, T, large_tol); // uses finite differencing
227  DERIV_TEST(_fp_cp->cv_from_p_T, p, T, large_tol);
228  DERIV_TEST(_fp_cp->cp_from_v_e, v, e, large_tol); // uses finite differencing
229  DERIV_TEST(_fp_cp->cv_from_v_e, v, e, large_tol);
230 
231  p = 5.0E7;
232  T = 190.0;
233  e = 1.6744E6;
234  v = 6.25E-4;
235 
236  AD_DERIV_TEST(_fp->rho_from_p_T, p, T, tol);
237  DERIV_TEST(_fp->rho_from_p_T, p, T, tol);
238  DERIV_TEST(_fp->v_from_p_T, p, T, tol);
239  DERIV_TEST(_fp->mu_from_p_T, p, T, tol);
240  DERIV_TEST(_fp->e_from_p_T, p, T, tol);
241  DERIV_TEST(_fp->h_from_p_T, p, T, tol);
242  DERIV_TEST(_fp->k_from_p_T, p, T, tol);
243  DERIV_TEST(_fp->cp_from_p_T, p, T, 2 * large_tol); // uses finite differencing
244  DERIV_TEST(_fp->cv_from_p_T, p, T, tol);
245  DERIV_TEST(_fp->cp_from_v_e, v, e, 2 * large_tol); // uses finite differencing
246  DERIV_TEST(_fp->cv_from_v_e, v, e, tol);
247 
248  e = 5374151.12329934724;
249  v = 5.5944055944055945e-05;
250 
251  AD_DERIV_TEST(_fp_cp->rho_from_p_T, p, T, tol);
252  DERIV_TEST(_fp_cp->rho_from_p_T, p, T, tol);
253  DERIV_TEST(_fp_cp->v_from_p_T, p, T, tol);
254  DERIV_TEST(_fp_cp->mu_from_p_T, p, T, tol);
255  DERIV_TEST(_fp_cp->e_from_p_T, p, T, tol);
256  DERIV_TEST(_fp_cp->h_from_p_T, p, T, tol);
257  DERIV_TEST(_fp_cp->k_from_p_T, p, T, tol);
258  DERIV_TEST(_fp_cp->cp_from_p_T, p, T, large_tol); // uses finite differencing
259  DERIV_TEST(_fp_cp->cv_from_p_T, p, T, large_tol);
260  DERIV_TEST(_fp_cp->cp_from_v_e, v, e, large_tol); // uses finite differencing
261  DERIV_TEST(_fp_cp->cv_from_v_e, v, e, large_tol);
262 }
263 
269 {
270  const Real p = 1.0e6;
271  const Real T = 300.0;
272  const Real tol = REL_TOL_CONSISTENCY;
273 
274  // Single property methods
275  Real rho, drho_dp, drho_dT;
276  _fp->rho_from_p_T(p, T, rho, drho_dp, drho_dT);
277  Real mu, dmu_dp, dmu_dT;
278  _fp->mu_from_p_T(p, T, mu, dmu_dp, dmu_dT);
279  Real e, de_dp, de_dT;
280  _fp->e_from_p_T(p, T, e, de_dp, de_dT);
281 
282  // Combined property methods
283  Real rho2, drho2_dp, drho2_dT, mu2, dmu2_dp, dmu2_dT, e2, de2_dp, de2_dT;
284  _fp->rho_mu_from_p_T(p, T, rho2, mu2);
285 
286  ABS_TEST(rho, rho2, tol);
287  ABS_TEST(mu, mu2, tol);
288 
289  _fp->rho_mu_from_p_T(p, T, rho2, drho2_dp, drho2_dT, mu2, dmu2_dp, dmu2_dT);
290  ABS_TEST(rho, rho2, tol);
291  ABS_TEST(drho_dp, drho2_dp, tol);
292  ABS_TEST(drho_dT, drho2_dT, tol);
293  ABS_TEST(mu, mu2, tol);
294  ABS_TEST(dmu_dp, dmu2_dp, tol);
295  ABS_TEST(dmu_dT, dmu2_dT, tol);
296 
297  _fp->rho_e_from_p_T(p, T, rho2, drho2_dp, drho2_dT, e2, de2_dp, de2_dT);
298  ABS_TEST(rho, rho2, tol);
299  ABS_TEST(drho_dp, drho2_dp, tol);
300  ABS_TEST(drho_dT, drho2_dT, tol);
301  ABS_TEST(e, e2, tol);
302  ABS_TEST(de_dp, de2_dp, tol);
303  ABS_TEST(de_dT, de2_dT, tol);
304 }
static const std::string cv
Definition: NS.h:122
const double tol
TEST_F(TemperaturePressureFunctionFluidPropertiesTest, fluidName)
Test that the fluid name is correctly returned.
static const std::string density
Definition: NS.h:33
static const std::string cp
Definition: NS.h:121
static const std::string mu
Definition: NS.h:123
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
Definition: NS.h:84
static const std::string alpha
Definition: NS.h:134
T pow(T x, int e)