www.mooseframework.org
TabulatedFluidProperties.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
11 #include "BicubicInterpolation.h"
12 #include "MooseUtils.h"
13 #include "Conversion.h"
14 
15 // C++ includes
16 #include <fstream>
17 #include <ctime>
18 
19 registerMooseObject("FluidPropertiesApp", TabulatedFluidProperties);
20 
21 template <>
22 InputParameters
24 {
25  InputParameters params = validParams<SinglePhaseFluidProperties>();
26  params.addParam<FileName>(
27  "fluid_property_file",
28  "fluid_properties.csv",
29  "Name of the csv file containing the tabulated fluid property data. If "
30  "no file exists and save_file = true, then one will be written to "
31  "fluid_properties.csv using the temperature and pressure range specified.");
32  params.addRangeCheckedParam<Real>("temperature_min",
33  300.0,
34  "temperature_min > 0",
35  "Minimum temperature for tabulated data. Default is 300 K)");
36  params.addParam<Real>(
37  "temperature_max", 500.0, "Maximum temperature for tabulated data. Default is 500 K");
38  params.addRangeCheckedParam<Real>("pressure_min",
39  1.0e5,
40  "pressure_min > 0",
41  "Minimum pressure for tabulated data. Default is 0.1 MPa)");
42  params.addParam<Real>(
43  "pressure_max", 50.0e6, "Maximum pressure for tabulated data. Default is 50 MPa");
44  params.addRangeCheckedParam<unsigned int>(
45  "num_T", 100, "num_T > 0", "Number of points to divide temperature range. Default is 100");
46  params.addRangeCheckedParam<unsigned int>(
47  "num_p", 100, "num_p > 0", "Number of points to divide pressure range. Default is 100");
48  params.addRequiredParam<UserObjectName>("fp", "The name of the FluidProperties UserObject");
49  MultiMooseEnum properties("density enthalpy internal_energy viscosity k cv cp entropy",
50  "density enthalpy internal_energy viscosity");
51  params.addParam<MultiMooseEnum>("interpolated_properties",
52  properties,
53  "Properties to interpolate if no data file is provided");
54  params.addParam<bool>("save_file", true, "Whether to save the csv fluid properties file");
55  params.addClassDescription(
56  "Fluid properties using bicubic interpolation on tabulated values provided");
57  return params;
58 }
59 
60 TabulatedFluidProperties::TabulatedFluidProperties(const InputParameters & parameters)
61  : SinglePhaseFluidProperties(parameters),
62  _file_name(getParam<FileName>("fluid_property_file")),
63  _temperature_min(getParam<Real>("temperature_min")),
64  _temperature_max(getParam<Real>("temperature_max")),
65  _pressure_min(getParam<Real>("pressure_min")),
66  _pressure_max(getParam<Real>("pressure_max")),
67  _num_T(getParam<unsigned int>("num_T")),
68  _num_p(getParam<unsigned int>("num_p")),
69  _save_file(getParam<bool>("save_file")),
70  _fp(getUserObject<SinglePhaseFluidProperties>("fp")),
71  _interpolated_properties_enum(getParam<MultiMooseEnum>("interpolated_properties")),
72  _interpolated_properties(),
73  _interpolate_density(false),
74  _interpolate_enthalpy(false),
75  _interpolate_internal_energy(false),
76  _interpolate_viscosity(false),
77  _interpolate_k(false),
78  _interpolate_cp(false),
79  _interpolate_cv(false),
80  _interpolate_entropy(false),
81  _density_idx(0),
82  _enthalpy_idx(0),
83  _internal_energy_idx(0),
84  _viscosity_idx(0),
85  _k_idx(0),
86  _cp_idx(0),
87  _cv_idx(0),
88  _entropy_idx(0),
89  _csv_reader(_file_name, &_communicator)
90 {
91  // Sanity check on minimum and maximum temperatures and pressures
93  mooseError(name(), ": temperature_max must be greater than temperature_min");
95  mooseError(name(), ": pressure_max must be greater than pressure_min");
96 
97  // Lines starting with # in the data file are treated as comments
98  _csv_reader.setComment("#");
99 }
100 
102 
103 void
105 {
106  // Check to see if _file_name supplied exists. If it does, that data
107  // will be used. If it does not exist, data will be generated and then
108  // written to _file_name.
109  std::ifstream file(_file_name.c_str());
110  if (file.good())
111  {
112  _console << name() + ": Reading tabulated properties from " << _file_name << "\n";
113  _csv_reader.read();
114 
115  const std::vector<std::string> & column_names = _csv_reader.getNames();
116 
117  // Check that all required columns are present
118  for (std::size_t i = 0; i < _required_columns.size(); ++i)
119  {
120  if (std::find(column_names.begin(), column_names.end(), _required_columns[i]) ==
121  column_names.end())
122  mooseError(name(),
123  ": no ",
125  " data read in ",
126  _file_name,
127  ". A column named ",
129  " must be present");
130  }
131 
132  // Check that any property names read from the file are present in the list of possible
133  // properties, and if they are, add them to the list of read properties
134  for (std::size_t i = 0; i < column_names.size(); ++i)
135  {
136  // Only check properties not in _required_columns
137  if (std::find(_required_columns.begin(), _required_columns.end(), column_names[i]) ==
138  _required_columns.end())
139  {
140  if (std::find(_property_columns.begin(), _property_columns.end(), column_names[i]) ==
141  _property_columns.end())
142  mooseError(name(),
143  ": ",
144  column_names[i],
145  " read in ",
146  _file_name,
147  " is not one of the properties that TabulatedFluidProperties understands");
148  else
149  _interpolated_properties.push_back(column_names[i]);
150  }
151  }
152 
153  std::map<std::string, unsigned int> data_index;
154  for (std::size_t i = 0; i < column_names.size(); ++i)
155  {
156  auto it = std::find(column_names.begin(), column_names.end(), column_names[i]);
157  data_index[column_names[i]] = std::distance(column_names.begin(), it);
158  }
159 
160  const std::vector<std::vector<Real>> & column_data = _csv_reader.getData();
161 
162  // Extract the pressure and temperature data vectors
163  _pressure = column_data[data_index.find("pressure")->second];
164  _temperature = column_data[data_index.find("temperature")->second];
165 
166  // Pressure and temperature data contains duplicates due to the csv format.
167  // First, check that pressure is monotonically increasing
168  if (!std::is_sorted(_pressure.begin(), _pressure.end()))
169  mooseError(
170  name(), ": the column data for pressure is not monotonically increasing in ", _file_name);
171 
172  // The first pressure value is repeated for each temperature value. Counting the
173  // number of repeats provides the number of temperature values
174  auto num_T = std::count(_pressure.begin(), _pressure.end(), _pressure.front());
175 
176  // Now remove the duplicates in the pressure vector
177  auto last_unique = std::unique(_pressure.begin(), _pressure.end());
178  _pressure.erase(last_unique, _pressure.end());
179  _num_p = _pressure.size();
180 
181  // Check that the number of rows in the csv file is equal to _num_p * _num_T
182  if (column_data[0].size() != _num_p * static_cast<unsigned int>(num_T))
183  mooseError(name(),
184  ": the number of rows in ",
185  _file_name,
186  " is not equal to the number of unique pressure values ",
187  _num_p,
188  " multiplied by the number of unique temperature values ",
189  num_T);
190 
191  // Need to make sure that the temperature values are provided in ascending order
192  // as well as duplicated for each pressure value
193  std::vector<Real> temp0(_temperature.begin(), _temperature.begin() + num_T);
194  if (!std::is_sorted(temp0.begin(), temp0.end()))
195  mooseError(name(),
196  ": the column data for temperature is not monotonically increasing in ",
197  _file_name);
198 
199  auto it_temp = _temperature.begin() + num_T;
200  for (std::size_t i = 1; i < _pressure.size(); ++i)
201  {
202  std::vector<Real> temp(it_temp, it_temp + num_T);
203  if (temp != temp0)
204  mooseError(name(),
205  ": temperature values for pressure ",
206  _pressure[i],
207  " are not identical to values for ",
208  _pressure[0]);
209 
210  std::advance(it_temp, num_T);
211  }
212 
213  // At this point, all temperature data has been provided in ascending order
214  // identically for each pressure value, so we can just keep the first range
215  _temperature.erase(_temperature.begin() + num_T, _temperature.end());
216  _num_T = _temperature.size();
217 
218  // Minimum and maximum pressure and temperature. Note that _pressure and
219  // _temperature are sorted
220  _pressure_min = _pressure.front();
221  _pressure_max = _pressure.back();
222  _temperature_min = _temperature.front();
224 
225  // Extract the fluid property data from the file
226  for (std::size_t i = 0; i < _interpolated_properties.size(); ++i)
227  _properties.push_back(column_data[data_index.find(_interpolated_properties[i])->second]);
228  }
229  else
230  {
231  _console << name() + ": No tabulated properties file named " << _file_name << " exists.\n";
232  _console << name() + ": Generating tabulated data\n";
233 
234  if (_save_file)
235  _console << name() + ": Writing tabulated data to " << _file_name << "\n";
236 
238 
239  // Write tabulated data to file
240  if (_save_file)
242  }
243 
244  // At this point, all properties read or generated are able to be used by
245  // TabulatedFluidProperties. Now set flags and indexes for each property in
246  //_interpolated_properties to use in property calculations
247  for (std::size_t i = 0; i < _interpolated_properties.size(); ++i)
248  {
249  if (_interpolated_properties[i] == "density")
250  {
251  _interpolate_density = true;
252  _density_idx = i;
253  }
254  if (_interpolated_properties[i] == "enthalpy")
255  {
256  _interpolate_enthalpy = true;
257  _enthalpy_idx = i;
258  }
259  if (_interpolated_properties[i] == "internal_energy")
260  {
263  }
264  if (_interpolated_properties[i] == "viscosity")
265  {
266  _interpolate_viscosity = true;
267  _viscosity_idx = i;
268  }
269  if (_interpolated_properties[i] == "k")
270  {
271  _interpolate_k = true;
272  _k_idx = i;
273  }
274  if (_interpolated_properties[i] == "cp")
275  {
276  _interpolate_cp = true;
277  _cp_idx = i;
278  }
279  if (_interpolated_properties[i] == "cv")
280  {
281  _interpolate_cv = true;
282  _cv_idx = i;
283  }
284  if (_interpolated_properties[i] == "entropy")
285  {
286  _interpolate_entropy = true;
287  _entropy_idx = i;
288  }
289  }
290 
291  // Construct bicubic interpolants from tabulated data
292  std::vector<std::vector<Real>> data_matrix;
293  _property_ipol.resize(_properties.size());
294 
295  for (std::size_t i = 0; i < _property_ipol.size(); ++i)
296  {
297  reshapeData2D(_num_p, _num_T, _properties[i], data_matrix);
298  _property_ipol[i] =
299  libmesh_make_unique<BicubicInterpolation>(_pressure, _temperature, data_matrix);
300  }
301 }
302 
303 std::string
305 {
306  return _fp.fluidName();
307 }
308 
309 Real
311 {
312  return _fp.molarMass();
313 }
314 
315 Real
317 {
319  {
322  }
323  else
324  return _fp.rho_from_p_T(pressure, temperature);
325 }
326 
327 void
329  Real pressure, Real temperature, Real & rho, Real & drho_dp, Real & drho_dT) const
330 {
332  {
334  _property_ipol[_density_idx]->sampleValueAndDerivatives(
335  pressure, temperature, rho, drho_dp, drho_dT);
336  }
337  else
338  _fp.rho_from_p_T(pressure, temperature, rho, drho_dp, drho_dT);
339 }
340 
341 Real
343 {
345  {
348  }
349  else
350  return _fp.e_from_p_T(pressure, temperature);
351 }
352 
353 void
355  Real pressure, Real temperature, Real & e, Real & de_dp, Real & de_dT) const
356 {
358  {
360  _property_ipol[_internal_energy_idx]->sampleValueAndDerivatives(
361  pressure, temperature, e, de_dp, de_dT);
362  }
363  else
364  _fp.e_from_p_T(pressure, temperature, e, de_dp, de_dT);
365 }
366 
367 Real
369 {
371  {
374  }
375  else
376  return _fp.h_from_p_T(pressure, temperature);
377 }
378 
379 void
381  Real pressure, Real temperature, Real & h, Real & dh_dp, Real & dh_dT) const
382 {
384  {
386  _property_ipol[_enthalpy_idx]->sampleValueAndDerivatives(
387  pressure, temperature, h, dh_dp, dh_dT);
388  }
389  else
390  _fp.h_from_p_T(pressure, temperature, h, dh_dp, dh_dT);
391 }
392 
393 Real
395 {
397  {
400  }
401  else
402  return _fp.mu_from_p_T(pressure, temperature);
403 }
404 
405 void
407  Real pressure, Real temperature, Real & mu, Real & dmu_dp, Real & dmu_dT) const
408 {
410  {
412  _property_ipol[_viscosity_idx]->sampleValueAndDerivatives(
413  pressure, temperature, mu, dmu_dp, dmu_dT);
414  }
415  else
416  return _fp.mu_from_p_T(pressure, temperature, mu, dmu_dp, dmu_dT);
417 }
418 
419 Real
421 {
422  return _fp.c_from_p_T(pressure, temperature);
423 }
424 
425 Real
427 {
428  if (_interpolate_cp)
429  {
431  return _property_ipol[_cp_idx]->sample(pressure, temperature);
432  }
433  else
434  return _fp.cp_from_p_T(pressure, temperature);
435 }
436 
437 Real
439 {
440  if (_interpolate_cv)
441  {
443  return _property_ipol[_cv_idx]->sample(pressure, temperature);
444  }
445  else
446  return _fp.cv_from_p_T(pressure, temperature);
447 }
448 
449 Real
451 {
452  if (_interpolate_k)
453  {
455  return _property_ipol[_k_idx]->sample(pressure, temperature);
456  }
457  else
458  return _fp.k_from_p_T(pressure, temperature);
459 }
460 
461 void
463  Real pressure, Real temperature, Real & k, Real & dk_dp, Real & dk_dT) const
464 {
465  if (_interpolate_k)
466  {
468  return _property_ipol[_k_idx]->sampleValueAndDerivatives(
469  pressure, temperature, k, dk_dp, dk_dT);
470  }
471  else
472  return _fp.k_from_p_T(pressure, temperature, k, dk_dp, dk_dT);
473 }
474 
475 Real
477 {
479  {
482  }
483  else
484  return _fp.s_from_p_T(pressure, temperature);
485 }
486 
487 void
488 TabulatedFluidProperties::s_from_p_T(Real p, Real T, Real & s, Real & ds_dp, Real & ds_dT) const
489 {
490  SinglePhaseFluidProperties::s_from_p_T(p, T, s, ds_dp, ds_dT);
491 }
492 
493 std::vector<Real>
495 {
496  return _fp.henryCoefficients();
497 }
498 
499 Real
501 {
502  return _fp.vaporPressure(temperature);
503 }
504 
505 void
506 TabulatedFluidProperties::vaporPressure(Real temperature, Real & psat, Real & dpsat_dT) const
507 {
508  _fp.vaporPressure(temperature, psat, dpsat_dT);
509 }
510 
511 void
513 {
514  if (processor_id() == 0)
515  {
516  MooseUtils::checkFileWriteable(file_name);
517 
518  std::ofstream file_out(file_name.c_str());
519 
520  // Write out date and fluid type
521  time_t now = time(&now);
522  file_out << "# " << _fp.fluidName() << " properties created by TabulatedFluidProperties on "
523  << ctime(&now) << "\n";
524 
525  // Write out column names
526  file_out << "pressure, temperature";
527  for (std::size_t i = 0; i < _interpolated_properties.size(); ++i)
528  file_out << ", " << _interpolated_properties[i];
529  file_out << "\n";
530 
531  // Write out the fluid property data
532  for (unsigned int p = 0; p < _num_p; ++p)
533  for (unsigned int t = 0; t < _num_T; ++t)
534  {
535  file_out << _pressure[p] << ", " << _temperature[t];
536  for (std::size_t i = 0; i < _properties.size(); ++i)
537  file_out << ", " << _properties[i][p * _num_T + t];
538  file_out << "\n";
539  }
540  }
541 }
542 
543 void
545 {
546  _pressure.resize(_num_p);
547  _temperature.resize(_num_T);
548 
549  // Generate data for all properties entered in input file
552 
553  for (std::size_t i = 0; i < _interpolated_properties_enum.size(); ++i)
555 
556  for (std::size_t i = 0; i < _properties.size(); ++i)
557  _properties[i].resize(_num_p * _num_T);
558 
559  // Temperature is divided equally into _num_T segments
560  Real delta_T = (_temperature_max - _temperature_min) / static_cast<Real>(_num_T - 1);
561 
562  for (unsigned int j = 0; j < _num_T; ++j)
563  _temperature[j] = _temperature_min + j * delta_T;
564 
565  // Divide the pressure into _num_p equal segments
566  Real delta_p = (_pressure_max - _pressure_min) / static_cast<Real>(_num_p - 1);
567 
568  for (unsigned int i = 0; i < _num_p; ++i)
569  _pressure[i] = _pressure_min + i * delta_p;
570 
571  // Generate the tabulated data at the pressure and temperature points
572  for (std::size_t i = 0; i < _properties.size(); ++i)
573  {
574  if (_interpolated_properties[i] == "density")
575  for (unsigned int p = 0; p < _num_p; ++p)
576  for (unsigned int t = 0; t < _num_T; ++t)
577  _properties[i][p * _num_T + t] = _fp.rho_from_p_T(_pressure[p], _temperature[t]);
578 
579  if (_interpolated_properties[i] == "enthalpy")
580  for (unsigned int p = 0; p < _num_p; ++p)
581  for (unsigned int t = 0; t < _num_T; ++t)
582  _properties[i][p * _num_T + t] = _fp.h_from_p_T(_pressure[p], _temperature[t]);
583 
584  if (_interpolated_properties[i] == "internal_energy")
585  for (unsigned int p = 0; p < _num_p; ++p)
586  for (unsigned int t = 0; t < _num_T; ++t)
587  _properties[i][p * _num_T + t] = _fp.e_from_p_T(_pressure[p], _temperature[t]);
588 
589  if (_interpolated_properties[i] == "viscosity")
590  for (unsigned int p = 0; p < _num_p; ++p)
591  for (unsigned int t = 0; t < _num_T; ++t)
592  _properties[i][p * _num_T + t] = _fp.mu_from_p_T(_pressure[p], _temperature[t]);
593 
594  if (_interpolated_properties[i] == "k")
595  for (unsigned int p = 0; p < _num_p; ++p)
596  for (unsigned int t = 0; t < _num_T; ++t)
597  _properties[i][p * _num_T + t] = _fp.k_from_p_T(_pressure[p], _temperature[t]);
598 
599  if (_interpolated_properties[i] == "cv")
600  for (unsigned int p = 0; p < _num_p; ++p)
601  for (unsigned int t = 0; t < _num_T; ++t)
602  _properties[i][p * _num_T + t] = _fp.cv_from_p_T(_pressure[p], _temperature[t]);
603 
604  if (_interpolated_properties[i] == "cp")
605  for (unsigned int p = 0; p < _num_p; ++p)
606  for (unsigned int t = 0; t < _num_T; ++t)
607  _properties[i][p * _num_T + t] = _fp.cp_from_p_T(_pressure[p], _temperature[t]);
608 
609  if (_interpolated_properties[i] == "entropy")
610  for (unsigned int p = 0; p < _num_p; ++p)
611  for (unsigned int t = 0; t < _num_T; ++t)
612  _properties[i][p * _num_T + t] = _fp.s_from_p_T(_pressure[p], _temperature[t]);
613  }
614 }
615 
616 void
618  unsigned int ncol,
619  const std::vector<Real> & vec,
620  std::vector<std::vector<Real>> & mat)
621 {
622  if (!vec.empty())
623  {
624  mat.resize(nrow);
625  for (unsigned int i = 0; i < nrow; ++i)
626  mat[i].resize(ncol);
627 
628  for (unsigned int i = 0; i < nrow; ++i)
629  for (unsigned int j = 0; j < ncol; ++j)
630  mat[i][j] = vec[i * ncol + j];
631  }
632 }
633 
634 void
636 {
637  if (pressure < _pressure_min || pressure > _pressure_max)
638  throw MooseException(
639  "Pressure " + Moose::stringify(pressure) + " is outside the range of tabulated pressure (" +
640  Moose::stringify(_pressure_min) + ", " + Moose::stringify(_pressure_max) + ").");
641 
642  if (temperature < _temperature_min || temperature > _temperature_max)
643  throw MooseException("Temperature " + Moose::stringify(temperature) +
644  " is outside the range of tabulated temperature (" +
645  Moose::stringify(_temperature_min) + ", " +
646  Moose::stringify(_temperature_max) + ").");
647 }
TabulatedFluidProperties::henryCoefficients
virtual std::vector< Real > henryCoefficients() const override
Henry's law coefficients for dissolution in water.
Definition: TabulatedFluidProperties.C:494
TabulatedFluidProperties::_interpolate_enthalpy
bool _interpolate_enthalpy
Definition: TabulatedFluidProperties.h:221
registerMooseObject
registerMooseObject("FluidPropertiesApp", TabulatedFluidProperties)
TabulatedFluidProperties
Class for fluid properties read from a file.
Definition: TabulatedFluidProperties.h:92
TabulatedFluidProperties::_csv_reader
MooseUtils::DelimitedFileReader _csv_reader
The MOOSE delimited file reader.
Definition: TabulatedFluidProperties.h:240
SinglePhaseFluidProperties::henryCoefficients
virtual std::vector< Real > henryCoefficients() const
Henry's law coefficients for dissolution in water.
Definition: SinglePhaseFluidProperties.C:183
SinglePhaseFluidProperties
Common class for single phase fluid properties.
Definition: SinglePhaseFluidProperties.h:89
TabulatedFluidProperties::generateTabulatedData
virtual void generateTabulatedData()
Generates a table of fluid properties by looping over pressure and temperature and calculating proper...
Definition: TabulatedFluidProperties.C:544
TabulatedFluidProperties::s_from_p_T
virtual Real s_from_p_T(Real pressure, Real temperature) const override
Definition: TabulatedFluidProperties.C:476
TabulatedFluidProperties::_interpolated_properties_enum
MultiMooseEnum _interpolated_properties_enum
Properties to be interpolated entered in the input file.
Definition: TabulatedFluidProperties.h:216
TabulatedFluidProperties::k_from_p_T
virtual Real k_from_p_T(Real pressure, Real temperature) const override
Definition: TabulatedFluidProperties.C:450
TabulatedFluidProperties::initialSetup
virtual void initialSetup() override
Definition: TabulatedFluidProperties.C:104
TabulatedFluidProperties::_fp
const SinglePhaseFluidProperties & _fp
SinglePhaseFluidPropertiesPT UserObject.
Definition: TabulatedFluidProperties.h:208
TabulatedFluidProperties::_viscosity_idx
unsigned int _viscosity_idx
Definition: TabulatedFluidProperties.h:233
TabulatedFluidProperties::vaporPressure
virtual Real vaporPressure(Real temperature) const override
Vapor pressure.
Definition: TabulatedFluidProperties.C:500
TabulatedFluidProperties::checkInputVariables
virtual void checkInputVariables(Real &pressure, Real &temperature) const
Checks that the inputs are within the range of the tabulated data, and throws an error if they are no...
Definition: TabulatedFluidProperties.C:635
TabulatedFluidProperties::_interpolate_entropy
bool _interpolate_entropy
Definition: TabulatedFluidProperties.h:227
TabulatedFluidProperties::_required_columns
const std::vector< std::string > _required_columns
List of required column names to be read.
Definition: TabulatedFluidProperties.h:211
TabulatedFluidProperties::_interpolate_cv
bool _interpolate_cv
Definition: TabulatedFluidProperties.h:226
TabulatedFluidProperties::_interpolated_properties
std::vector< std::string > _interpolated_properties
List of properties to be interpolated.
Definition: TabulatedFluidProperties.h:218
TabulatedFluidProperties::_pressure
std::vector< Real > _pressure
Pressure vector.
Definition: TabulatedFluidProperties.h:183
TabulatedFluidProperties::_pressure_max
Real _pressure_max
Maximum pressure in tabulated data.
Definition: TabulatedFluidProperties.h:199
TabulatedFluidProperties::_interpolate_cp
bool _interpolate_cp
Definition: TabulatedFluidProperties.h:225
TabulatedFluidProperties::_num_T
unsigned int _num_T
Number of temperature points in the tabulated data.
Definition: TabulatedFluidProperties.h:201
SinglePhaseFluidProperties::T
e e e e p h T T T T T T
Definition: SinglePhaseFluidProperties.h:177
TabulatedFluidProperties::_properties
std::vector< std::vector< Real > > _properties
Tabulated fluid properties.
Definition: TabulatedFluidProperties.h:187
TabulatedFluidProperties::_internal_energy_idx
unsigned int _internal_energy_idx
Definition: TabulatedFluidProperties.h:232
TabulatedFluidProperties::_cv_idx
unsigned int _cv_idx
Definition: TabulatedFluidProperties.h:236
TabulatedFluidProperties::cv_from_p_T
virtual Real cv_from_p_T(Real pressure, Real temperature) const override
Definition: TabulatedFluidProperties.C:438
SinglePhaseFluidProperties::rho
e e e e p h T rho
Definition: SinglePhaseFluidProperties.h:169
SinglePhaseFluidProperties::vaporPressure
virtual Real vaporPressure(Real T) const
Vapor pressure.
Definition: SinglePhaseFluidProperties.C:177
TabulatedFluidProperties::_density_idx
unsigned int _density_idx
Index of each property.
Definition: TabulatedFluidProperties.h:230
name
const std::string name
Definition: Setup.h:21
TabulatedFluidProperties::_property_columns
const std::vector< std::string > _property_columns
List of possible property column names to be read.
Definition: TabulatedFluidProperties.h:213
TabulatedFluidProperties::molarMass
virtual Real molarMass() const override
Fluid name.
Definition: TabulatedFluidProperties.C:310
TabulatedFluidProperties::_interpolate_density
bool _interpolate_density
Set of flags to note whether a property is to be interpolated.
Definition: TabulatedFluidProperties.h:220
TabulatedFluidProperties::reshapeData2D
void reshapeData2D(unsigned int nrow, unsigned int ncol, const std::vector< Real > &vec, std::vector< std::vector< Real >> &mat)
Forms a 2D matrix from a single std::vector.
Definition: TabulatedFluidProperties.C:617
TabulatedFluidProperties::_cp_idx
unsigned int _cp_idx
Definition: TabulatedFluidProperties.h:235
validParams< TabulatedFluidProperties >
InputParameters validParams< TabulatedFluidProperties >()
Definition: TabulatedFluidProperties.C:23
TabulatedFluidProperties::_temperature_min
Real _temperature_min
Minimum temperature in tabulated data.
Definition: TabulatedFluidProperties.h:193
TabulatedFluidProperties.h
TabulatedFluidProperties::h_from_p_T
virtual Real h_from_p_T(Real p, Real T) const override
Definition: TabulatedFluidProperties.C:368
TabulatedFluidProperties::_interpolate_internal_energy
bool _interpolate_internal_energy
Definition: TabulatedFluidProperties.h:222
TabulatedFluidProperties::_save_file
const bool _save_file
Whether to save a generated fluid properties file to disk.
Definition: TabulatedFluidProperties.h:205
TabulatedFluidProperties::~TabulatedFluidProperties
virtual ~TabulatedFluidProperties()
Definition: TabulatedFluidProperties.C:101
TabulatedFluidProperties::_property_ipol
std::vector< std::unique_ptr< BicubicInterpolation > > _property_ipol
Interpolated fluid property.
Definition: TabulatedFluidProperties.h:190
SinglePhaseFluidProperties::molarMass
virtual virtual std Real molarMass() const
Fluid name.
Definition: SinglePhaseFluidProperties.C:96
TabulatedFluidProperties::c_from_p_T
virtual Real c_from_p_T(Real pressure, Real temperature) const override
Definition: TabulatedFluidProperties.C:420
TabulatedFluidProperties::writeTabulatedData
void writeTabulatedData(std::string file_name)
Writes tabulated data to a file.
Definition: TabulatedFluidProperties.C:512
NS::temperature
const std::string temperature
Definition: NS.h:26
TabulatedFluidProperties::_file_name
FileName _file_name
File name of tabulated data file.
Definition: TabulatedFluidProperties.h:181
TabulatedFluidProperties::_temperature
std::vector< Real > _temperature
Temperature vector.
Definition: TabulatedFluidProperties.h:185
TabulatedFluidProperties::e_from_p_T
virtual Real e_from_p_T(Real pressure, Real temperature) const override
Definition: TabulatedFluidProperties.C:342
TabulatedFluidProperties::TabulatedFluidProperties
TabulatedFluidProperties(const InputParameters &parameters)
Definition: TabulatedFluidProperties.C:60
TabulatedFluidProperties::fluidName
virtual std::string fluidName() const override
Definition: TabulatedFluidProperties.C:304
TabulatedFluidProperties::_pressure_min
Real _pressure_min
Minimum pressure in tabulated data.
Definition: TabulatedFluidProperties.h:197
TabulatedFluidProperties::_enthalpy_idx
unsigned int _enthalpy_idx
Definition: TabulatedFluidProperties.h:231
TabulatedFluidProperties::rho_from_p_T
virtual Real rho_from_p_T(Real pressure, Real temperature) const override
Definition: TabulatedFluidProperties.C:316
TabulatedFluidProperties::_interpolate_k
bool _interpolate_k
Definition: TabulatedFluidProperties.h:224
TabulatedFluidProperties::mu_from_p_T
virtual Real mu_from_p_T(Real pressure, Real temperature) const override
Definition: TabulatedFluidProperties.C:394
SinglePhaseFluidProperties::p
e e e e p h p
Definition: SinglePhaseFluidProperties.h:167
TabulatedFluidProperties::_interpolate_viscosity
bool _interpolate_viscosity
Definition: TabulatedFluidProperties.h:223
validParams< SinglePhaseFluidProperties >
InputParameters validParams< SinglePhaseFluidProperties >()
Definition: SinglePhaseFluidProperties.C:14
TabulatedFluidProperties::cp_from_p_T
virtual Real cp_from_p_T(Real pressure, Real temperature) const override
Definition: TabulatedFluidProperties.C:426
TabulatedFluidProperties::_num_p
unsigned int _num_p
Number of pressure points in the tabulated data.
Definition: TabulatedFluidProperties.h:203
TabulatedFluidProperties::_k_idx
unsigned int _k_idx
Definition: TabulatedFluidProperties.h:234
TabulatedFluidProperties::_entropy_idx
unsigned int _entropy_idx
Definition: TabulatedFluidProperties.h:237
TabulatedFluidProperties::_temperature_max
Real _temperature_max
Maximum temperature in tabulated data.
Definition: TabulatedFluidProperties.h:195
NS::pressure
const std::string pressure
Definition: NS.h:25
SinglePhaseFluidProperties::h
e e e e h
Definition: SinglePhaseFluidProperties.h:163