https://mooseframework.inl.gov
TabulatedBicubicFluidPropertiesTest.h
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 
10 #pragma once
11 
12 #include "MooseObjectUnitTest.h"
14 #include "CO2FluidProperties.h"
16 
18 {
19 public:
21  {
22  buildObjects();
23  }
24 
25 protected:
26  void buildObjects()
27  {
28  // Reference fluid properties
29  InputParameters co2_uo_params = _factory.getValidParams("CO2FluidProperties");
30  _fe_problem->addUserObject("CO2FluidProperties", "co2_fp", co2_uo_params);
31  _co2_fp = &_fe_problem->getUserObject<CO2FluidProperties>("co2_fp");
32 
33  InputParameters idg_uo_params = _factory.getValidParams("IdealGasFluidProperties");
34  _fe_problem->addUserObject("IdealGasFluidProperties", "idg_fp", idg_uo_params);
35  _idg_fp = &_fe_problem->getUserObject<IdealGasFluidProperties>("idg_fp");
36 
37  // Tabulation in (p, T) built from another FluidProperties
38  InputParameters tab_uo_params = _factory.getValidParams("TabulatedBicubicFluidProperties");
39  tab_uo_params.set<UserObjectName>("input_fp") = "co2_fp";
40  _fe_problem->addUserObject("TabulatedBicubicFluidProperties", "tab_fp", tab_uo_params);
41  _tab_pT_from_fp = &_fe_problem->getUserObject<TabulatedBicubicFluidProperties>("tab_fp");
42 
43  // Tabulation in (p, T) built from another FluidProperties, no p,T tabulation, only passthrough
44  // in p,T
45  InputParameters tab_uo_params_idg = _factory.getValidParams("TabulatedBicubicFluidProperties");
46  tab_uo_params_idg.set<UserObjectName>("input_fp") = "idg_fp";
47  tab_uo_params_idg.set<bool>("create_pT_interpolations") = true;
48  MultiMooseEnum properties_empty("density enthalpy internal_energy viscosity k cv cp entropy",
49  "");
50  tab_uo_params_idg.set<MultiMooseEnum>("interpolated_properties") = properties_empty;
51  _fe_problem->addUserObject(
52  "TabulatedBicubicFluidProperties", "tab_fp_pT_idg", tab_uo_params_idg);
54  &_fe_problem->getUserObject<TabulatedBicubicFluidProperties>("tab_fp_pT_idg");
55 
56  // Tabulation in (v, e) built from loading a (p, T) tabulation
57  InputParameters tab_uo_ve_params = _factory.getValidParams("TabulatedBicubicFluidProperties");
58  tab_uo_ve_params.set<bool>("construct_pT_from_ve") = true;
59  tab_uo_ve_params.set<bool>("construct_pT_from_vh") = true;
60  tab_uo_ve_params.set<FileName>("fluid_property_file") = "data/csv/fluid_props.csv";
61  tab_uo_ve_params.set<Real>("T_initial_guess") = 450;
62  tab_uo_ve_params.set<Real>("p_initial_guess") = 1.5e6;
63  MultiMooseEnum properties("density enthalpy internal_energy viscosity k cv cp entropy",
64  "density enthalpy internal_energy viscosity k cv cp entropy");
65  tab_uo_ve_params.set<MultiMooseEnum>("interpolated_properties") = properties;
66  _fe_problem->addUserObject("TabulatedBicubicFluidProperties", "tab_fp_ve", tab_uo_ve_params);
67  _tab_ve_from_pT = &_fe_problem->getUserObject<TabulatedBicubicFluidProperties>("tab_fp_ve");
68 
69  // Tabulation in (p, T) built from another FluidProperties, specifically for testing generation
70  InputParameters tab_gen_uo_params = _factory.getValidParams("TabulatedBicubicFluidProperties");
71  tab_gen_uo_params.set<UserObjectName>("input_fp") = "co2_fp";
72  tab_gen_uo_params.set<Real>("temperature_min") = 400;
73  tab_gen_uo_params.set<Real>("temperature_max") = 500;
74  tab_gen_uo_params.set<Real>("pressure_min") = 1e6;
75  tab_gen_uo_params.set<Real>("pressure_max") = 2e6;
76  tab_gen_uo_params.set<unsigned int>("num_T") = 6;
77  tab_gen_uo_params.set<unsigned int>("num_p") = 6;
78  tab_gen_uo_params.set<MultiMooseEnum>("interpolated_properties") = properties;
79  _fe_problem->addUserObject(
80  "TabulatedBicubicFluidProperties", "tab_pT_from_fp_gen", tab_gen_uo_params);
82  &_fe_problem->getUserObject<TabulatedBicubicFluidProperties>("tab_pT_from_fp_gen");
83 
84  // Tabulation in (v, e) built from another FluidProperties
85  InputParameters tab_direct_ve_params =
86  _factory.getValidParams("TabulatedBicubicFluidProperties");
87  // We use ideal gas as it has more (v,e) support than co2
88  tab_direct_ve_params.set<UserObjectName>("input_fp") = "idg_fp";
89  tab_direct_ve_params.set<MooseEnum>("out_of_bounds_behavior") = "set_to_closest_bound";
90  tab_direct_ve_params.set<bool>("create_pT_interpolations") = false;
91  tab_direct_ve_params.set<bool>("create_ve_interpolations") = true;
92  tab_direct_ve_params.set<Real>("temperature_min") = 400;
93  tab_direct_ve_params.set<Real>("temperature_max") = 500;
94  tab_direct_ve_params.set<Real>("pressure_min") = 1e6;
95  tab_direct_ve_params.set<Real>("pressure_max") = 2e6;
96  // set newton parameters for inversion
97  tab_direct_ve_params.set<Real>("T_initial_guess") = 450;
98  tab_direct_ve_params.set<Real>("p_initial_guess") = 1.5e6;
99  MultiMooseEnum properties_ve(
100  "density enthalpy viscosity k c cv cp entropy pressure temperature",
101  "density enthalpy viscosity k c cv cp entropy pressure temperature");
102  tab_direct_ve_params.set<MultiMooseEnum>("interpolated_properties") = properties_ve;
103  _fe_problem->addUserObject(
104  "TabulatedBicubicFluidProperties", "tab_direct_ve", tab_direct_ve_params);
105  _tab_ve_from_fp = &_fe_problem->getUserObject<TabulatedBicubicFluidProperties>("tab_direct_ve");
106 
107  // To test errors
108  InputParameters unordered_uo_params =
109  _factory.getValidParams("TabulatedBicubicFluidProperties");
110  unordered_uo_params.set<FileName>("fluid_property_file") = "data/csv/unordered_fluid_props.csv";
111  _fe_problem->addUserObject(
112  "TabulatedBicubicFluidProperties", "unordered_fp", unordered_uo_params);
113  _unordered_fp = &_fe_problem->getUserObject<TabulatedBicubicFluidProperties>("unordered_fp");
114 
115  InputParameters unequal_uo_params = _factory.getValidParams("TabulatedBicubicFluidProperties");
116  unequal_uo_params.set<FileName>("fluid_property_file") = "data/csv/unequal_fluid_props.csv";
117  _fe_problem->addUserObject("TabulatedBicubicFluidProperties", "unequal_fp", unequal_uo_params);
118  _unequal_fp = &_fe_problem->getUserObject<TabulatedBicubicFluidProperties>("unequal_fp");
119 
120  InputParameters missing_col_uo_params =
121  _factory.getValidParams("TabulatedBicubicFluidProperties");
122  missing_col_uo_params.set<FileName>("fluid_property_file") =
123  "data/csv/missing_col_fluid_props.csv";
124  _fe_problem->addUserObject(
125  "TabulatedBicubicFluidProperties", "missing_col_fp", missing_col_uo_params);
127  &_fe_problem->getUserObject<TabulatedBicubicFluidProperties>("missing_col_fp");
128 
129  InputParameters unknown_col_uo_params =
130  _factory.getValidParams("TabulatedBicubicFluidProperties");
131  unknown_col_uo_params.set<FileName>("fluid_property_file") = "data/csv/unknown_fluid_props.csv";
132  _fe_problem->addUserObject(
133  "TabulatedBicubicFluidProperties", "unknown_col_fp", unknown_col_uo_params);
135  &_fe_problem->getUserObject<TabulatedBicubicFluidProperties>("unknown_col_fp");
136 
137  InputParameters missing_data_uo_params =
138  _factory.getValidParams("TabulatedBicubicFluidProperties");
139  missing_data_uo_params.set<FileName>("fluid_property_file") =
140  "data/csv/missing_data_fluid_props.csv";
141  _fe_problem->addUserObject(
142  "TabulatedBicubicFluidProperties", "missing_data_fp", missing_data_uo_params);
144  &_fe_problem->getUserObject<TabulatedBicubicFluidProperties>("missing_data_fp");
145  }
146 
147  // For generating reference data
150 
151  // For testing values
157 
158  // These properties are for testing errors and warnings
164 };
std::shared_ptr< FEProblem > _fe_problem
const TabulatedBicubicFluidProperties * _tab_ve_from_pT
const TabulatedBicubicFluidProperties * _tab_pT_from_fp_gen
const TabulatedBicubicFluidProperties * _unknown_col_fp
CO2 fluid properties Most thermophysical properties taken from: Span and Wagner, "A New Equation of S...
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
const TabulatedBicubicFluidProperties * _tab_pT_from_fp
const TabulatedBicubicFluidProperties * _tab_ve_from_fp
const TabulatedBicubicFluidProperties * _unequal_fp
Class for fluid properties read from a file.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const TabulatedBicubicFluidProperties * _missing_col_fp
const TabulatedBicubicFluidProperties * _unordered_fp
Ideal gas fluid properties Default parameters are for air at atmospheric pressure and temperature...
const TabulatedBicubicFluidProperties * _missing_data_fp
const TabulatedBicubicFluidProperties * _tab_pT_from_fp_idg