www.mooseframework.org
CavityPressureUserObject.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 
12 registerMooseObject("TensorMechanicsApp", CavityPressureUserObject);
13 
15 
16 InputParameters
18 {
19  InputParameters params = GeneralUserObject::validParams();
20  params.addClassDescription("Uses the ideal gas law to compute internal pressure "
21  "and an initial moles of gas quantity.");
22  params.addRangeCheckedParam<Real>(
23  "initial_pressure",
24  0.0,
25  "initial_pressure >= 0.0",
26  "The initial pressure in the cavity. If not given, a zero initial pressure will be used.");
27  params.addParam<std::vector<PostprocessorName>>("material_input",
28  "The name of the postprocessor(s) that holds the "
29  "amount of material injected into the cavity.");
30  params.addRequiredRangeCheckedParam<Real>(
31  "R", "R > 0.0", "The universal gas constant for the units used.");
32  params.addRequiredParam<PostprocessorName>(
33  "temperature", "The name of the average temperature postprocessor value.");
34  params.addRangeCheckedParam<Real>(
35  "initial_temperature", "initial_temperature > 0.0", "Initial temperature (optional)");
36  params.addRequiredParam<std::vector<PostprocessorName>>(
37  "volume",
38  "The name of the postprocessor(s) that holds the value of the internal volume in the cavity");
39  params.addParam<Real>(
40  "startup_time",
41  0.0,
42  "The amount of time during which the pressure will ramp from zero to its true value.");
43  params.set<bool>("use_displaced_mesh") = true;
44 
45  return params;
46 }
47 
49  : GeneralUserObject(params),
50  _cavity_pressure(declareRestartableData<Real>("cavity_pressure", 0.0)),
51  _n0(declareRestartableData<Real>("initial_moles", 0.0)),
52  _initial_pressure(getParam<Real>("initial_pressure")),
53  _material_input(params.get<std::vector<PostprocessorName>>("material_input").size()),
54  _volume(params.get<std::vector<PostprocessorName>>("volume").size()),
55  _R(getParam<Real>("R")),
56  _temperature(getPostprocessorValue("temperature")),
57  _init_temp_given(isParamValid("initial_temperature")),
58  _init_temp(_init_temp_given ? getParam<Real>("initial_temperature") : 0.0),
59  _startup_time(getParam<Real>("startup_time")),
60  _initialized(declareRestartableData<bool>("initialized", false)),
61  _start_time(0.0)
62 {
63  auto material_names = params.get<std::vector<PostprocessorName>>("material_input");
64  for (unsigned int i = 0; i < _material_input.size(); ++i)
65  _material_input[i] = &getPostprocessorValueByName(material_names[i]);
66 
67  auto volume_names = params.get<std::vector<PostprocessorName>>("volume");
68  for (unsigned int i = 0; i < volume_names.size(); ++i)
69  _volume[i] = &getPostprocessorValueByName(volume_names[i]);
70 }
71 
72 Real
73 CavityPressureUserObject::getValue(const MooseEnum & quantity) const
74 {
75  Real value = 0;
76  if (quantity == INITIAL_MOLES)
77  {
78  if (_n0 < 0.0)
79  mooseError("In ",
80  _name,
81  ": Negative number of moles calculated as an input for the cavity pressure");
82 
83  value = _n0;
84  }
85  else if (quantity == CAVITY_PRESSURE)
86  value = _cavity_pressure;
87  else
88  mooseError("In ", _name, ": Unknown quantity.");
89 
90  return value;
91 }
92 
93 void
95 {
96  if (!_initialized)
97  {
98  const Real volume = computeCavityVolume();
99  Real init_temp = _temperature;
100  if (_init_temp_given)
101  init_temp = _init_temp;
102 
103  if (MooseUtils::absoluteFuzzyLessEqual(init_temp, 0.0))
104  mooseError("Cannot have initial temperature of zero when initializing cavity pressure. "
105  "Does the supplied Postprocessor for temperature execute at initial?");
106 
107  _n0 = _initial_pressure * volume / (_R * init_temp);
108  _start_time = _t - _dt;
109  const Real factor =
110  _t >= _start_time + _startup_time ? 1.0 : (_t - _start_time) / _startup_time;
112  _initialized = true;
113  }
114 }
115 
116 void
118 {
119  const Real volume = computeCavityVolume();
120  Real mat = 0;
121 
122  for (unsigned int i = 0; i < _material_input.size(); ++i)
123  mat += *_material_input[i];
124 
125  const Real pressure = (_n0 + mat) * _R * _temperature / volume;
126  const Real factor = _t >= _start_time + _startup_time ? 1.0 : (_t - _start_time) / _startup_time;
127  _cavity_pressure = factor * pressure;
128 }
129 
130 Real
132 {
133  Real volume = 0;
134  for (unsigned int i = 0; i < _volume.size(); ++i)
135  volume += *_volume[i];
136 
137  return volume;
138 }
CavityPressureUserObject::_volume
std::vector< const PostprocessorValue * > _volume
Definition: CavityPressureUserObject.h:44
CavityPressureUserObject::_start_time
Real _start_time
Definition: CavityPressureUserObject.h:55
CavityPressureUserObject::_R
const Real _R
Definition: CavityPressureUserObject.h:46
CavityPressureUserObject::_init_temp
const Real _init_temp
Definition: CavityPressureUserObject.h:50
CavityPressureUserObject::_init_temp_given
const bool _init_temp_given
Definition: CavityPressureUserObject.h:49
CavityPressureUserObject::CavityPressureUserObject
CavityPressureUserObject(const InputParameters &parameters)
Definition: CavityPressureUserObject.C:48
CavityPressureUserObject::_initialized
bool & _initialized
Definition: CavityPressureUserObject.h:54
CavityPressureUserObject::_cavity_pressure
Real & _cavity_pressure
Definition: CavityPressureUserObject.h:36
defineLegacyParams
defineLegacyParams(CavityPressureUserObject)
CavityPressureUserObject::initialize
virtual void initialize() override
Definition: CavityPressureUserObject.C:94
CavityPressureUserObject::_temperature
const Real & _temperature
Definition: CavityPressureUserObject.h:48
CavityPressureUserObject::execute
virtual void execute() override
Definition: CavityPressureUserObject.C:117
CavityPressureUserObject::computeCavityVolume
virtual Real computeCavityVolume()
Definition: CavityPressureUserObject.C:131
CavityPressureUserObject::CAVITY_PRESSURE
Definition: CavityPressureUserObject.h:33
CavityPressureUserObject::_initial_pressure
const Real _initial_pressure
Definition: CavityPressureUserObject.h:41
CavityPressureUserObject::_startup_time
const Real _startup_time
Definition: CavityPressureUserObject.h:52
validParams
InputParameters validParams()
registerMooseObject
registerMooseObject("TensorMechanicsApp", CavityPressureUserObject)
CavityPressureUserObject::INITIAL_MOLES
Definition: CavityPressureUserObject.h:32
CavityPressureUserObject::_material_input
std::vector< const PostprocessorValue * > _material_input
Definition: CavityPressureUserObject.h:43
CavityPressureUserObject::getValue
Real getValue(const MooseEnum &quantity) const
Definition: CavityPressureUserObject.C:73
CavityPressureUserObject
Definition: CavityPressureUserObject.h:14
CavityPressureUserObject::validParams
static InputParameters validParams()
Definition: CavityPressureUserObject.C:17
CavityPressureUserObject::_n0
Real & _n0
Initial number of moles of gas.
Definition: CavityPressureUserObject.h:39
CavityPressureUserObject.h
NS::pressure
const std::string pressure
Definition: NS.h:25