https://mooseframework.inl.gov
FlowModel.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 
10 #include "THMProblem.h"
11 #include "Component.h"
12 #include "FlowChannelBase.h"
13 #include "ConstantFunction.h"
14 #include "THMNames.h"
15 
16 using namespace libMesh;
17 
20 {
22  params.addPrivateParam<THMProblem *>("_thm_problem");
23  params.addPrivateParam<FlowChannelBase *>("_flow_channel");
24  params.addRequiredParam<UserObjectName>(
25  "fp", "The name of the user object that defines fluid properties");
26  params.addRequiredParam<bool>("output_vector_velocity",
27  "True if velocity is put out as a vector field.");
28  params.registerBase("THM:flow_model");
29  return params;
30 }
31 
32 const std::string FlowModel::AREA = THM::AREA;
33 const std::string FlowModel::AREA_LINEAR = THM::AREA_LINEAR;
38 const std::string FlowModel::UNITY = THM::UNITY;
39 const std::string FlowModel::DIRECTION = THM::DIRECTION;
40 
42  : MooseObject(params),
43  _sim(*params.getCheckedPointerParam<THMProblem *>("_thm_problem")),
44  _factory(_app.getFactory()),
45  _flow_channel(*params.getCheckedPointerParam<FlowChannelBase *>("_flow_channel")),
46  _fe_type(_sim.getFlowFEType()),
47  _fp_name(params.get<UserObjectName>("fp")),
48  _comp_name(name()),
49  _gravity_vector(_flow_channel.getParam<RealVectorValue>("gravity_vector")),
50  _gravity_magnitude(_gravity_vector.norm()),
51  _output_vector_velocity(params.get<bool>("output_vector_velocity"))
52 {
53 }
54 
55 const FunctionName &
56 FlowModel::getVariableFn(const FunctionName & fn_param_name)
57 {
58  const FunctionName & fn_name = _flow_channel.getParam<FunctionName>(fn_param_name);
59  const Function & fn = _sim.getFunction(fn_name);
60 
61  if (dynamic_cast<const ConstantFunction *>(&fn) != nullptr)
62  {
63  _flow_channel.connectObject(fn.parameters(), fn_name, fn_param_name, "value");
64  }
65 
66  return fn_name;
67 }
68 
69 void
71 {
72  const std::vector<SubdomainName> & subdomains = _flow_channel.getSubdomainNames();
73 
74  _sim.addSimVariable(false, AREA, _fe_type, subdomains);
75  _sim.addSimVariable(false, HEAT_FLUX_PERIMETER, _fe_type, subdomains);
76  _sim.addSimVariable(false, AREA_LINEAR, FEType(FIRST, LAGRANGE), subdomains);
77 }
78 
79 void
81 {
83  {
84  const std::vector<SubdomainName> & block = _flow_channel.getSubdomainNames();
85  const FunctionName & area_function = _flow_channel.getAreaFunctionName();
86 
87  if (!_sim.hasFunction(area_function))
88  {
89  const Function & fn = _sim.getFunction(area_function);
90  _sim.addConstantIC(AREA, fn.value(0, Point()), block);
91  _sim.addConstantIC(AREA_LINEAR, fn.value(0, Point()), block);
92 
93  _flow_channel.makeFunctionControllableIfConstant(area_function, "Area", "value");
94  }
95  else
96  {
97  _sim.addFunctionIC(AREA_LINEAR, area_function, block);
98 
99  {
100  const std::string class_name = "FunctionNodalAverageIC";
101  InputParameters params = _factory.getValidParams(class_name);
102  params.set<VariableName>("variable") = AREA;
103  params.set<std::vector<SubdomainName>>("block") = block;
104  params.set<FunctionName>("function") = area_function;
105  _sim.addSimInitialCondition(class_name, genName(_comp_name, AREA, "ic"), params);
106  }
107  }
108  }
109 }
110 
111 void
113 {
114  // add material property equal to one, useful for dummy multiplier values
115  {
116  const std::string class_name = "ConstantMaterial";
117  InputParameters params = _factory.getValidParams(class_name);
118  params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
119  params.set<std::string>("property_name") = FlowModel::UNITY;
120  params.set<Real>("value") = 1.0;
121  params.set<std::vector<VariableName>>("derivative_vars") = _derivative_vars;
122  _sim.addMaterial(class_name, genName(_comp_name, FlowModel::UNITY), params);
123  }
124 }
LAGRANGE
static const std::string AREA_LINEAR
Definition: FlowModel.h:103
const FunctionName & getAreaFunctionName() const
Get the name of the function describing the flow channel area.
Specialization of FEProblem to run with component subsystem.
Definition: THMProblem.h:18
static const std::string UNITY
Definition: THMNames.h:42
std::string genName(const std::string &prefix, unsigned int id, const std::string &suffix="") const
Build a name from a prefix, number and possible suffix.
static const std::string NUSSELT_NUMBER
Definition: FlowModel.h:106
static const std::string HEAT_FLUX_WALL
Definition: THMNames.h:20
void addPrivateParam(const std::string &name, const T &value)
static const std::string AREA
Definition: FlowModel.h:102
static const std::string UNITY
Definition: FlowModel.h:109
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
static const std::string TEMPERATURE_WALL
Definition: THMNames.h:40
FIRST
T & set(const std::string &name, bool quiet_mode=false)
virtual void addCommonInitialConditions()
Adds initial conditions common to any flow model.
Definition: FlowModel.C:80
static InputParameters validParams()
Definition: FlowModel.C:19
A base class for flow channels.
static const std::string NUSSELT_NUMBER
Definition: THMNames.h:26
The following methods are specializations for using the Parallel::packed_range_* routines for a vecto...
void makeFunctionControllableIfConstant(const FunctionName &fn_name, const std::string &control_name, const std::string &param="value") const
Makes a function controllable if it is constant.
Definition: Component.C:141
const FunctionName & getVariableFn(const FunctionName &fn_param_name)
Definition: FlowModel.C:56
bool isRestarting() const
FlowChannelBase & _flow_channel
The flow channel component that built this class.
Definition: FlowModel.h:59
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addFunctionIC(const VariableName &var_name, const std::string &func_name, const std::vector< SubdomainName > &block_names)
Definition: Simulation.C:532
bool isParamValid(const std::string &name) const
static const std::string HEAT_FLUX_PERIMETER
Definition: THMNames.h:21
void registerBase(const std::string &value)
static const std::string AREA_LINEAR
Definition: THMNames.h:15
virtual Function & getFunction(const std::string &name, const THREAD_ID tid=0)
void addSimVariable(bool nl, const VariableName &name, libMesh::FEType fe_type, Real scaling_factor=1.0)
Queues a variable of type MooseVariableScalar to be added to the nonlinear or aux system...
Definition: Simulation.C:271
static const std::string TEMPERATURE_WALL
Definition: FlowModel.h:108
const std::string name
Definition: Setup.h:20
virtual void addCommonVariables()
Adds variables common to any flow model (A, P_hf, ...)
Definition: FlowModel.C:70
const T & getParam(const std::string &name) const
const libMesh::FEType & _fe_type
The type of FE used for flow.
Definition: FlowModel.h:62
auto norm(const T &a) -> decltype(std::abs(a))
Factory & _factory
The Factory associated with the MooseApp.
Definition: FlowModel.h:56
static const std::string AREA
Definition: THMNames.h:14
static const std::string DIRECTION
Definition: THMNames.h:17
static const std::string HEAT_FLUX_PERIMETER
Definition: FlowModel.h:105
void addSimInitialCondition(const std::string &type, const std::string &name, InputParameters params)
Definition: Simulation.C:495
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
MooseApp & _app
FlowModel(const InputParameters &params)
Definition: FlowModel.C:41
void connectObject(const InputParameters &params, const std::string &mooseName, const std::string &name) const
Connect with control logic.
Definition: Component.C:98
static const std::string HEAT_FLUX_WALL
Definition: FlowModel.h:104
virtual const std::vector< SubdomainName > & getSubdomainNames() const
Gets the subdomain names for this component.
Definition: Component.C:307
static InputParameters validParams()
virtual Real value(Real t, const Point &p) const
virtual void addCommonMooseObjects()
Adds common MOOSE objects.
Definition: FlowModel.C:112
const std::string _comp_name
The component name.
Definition: FlowModel.h:68
THMProblem & _sim
Definition: FlowModel.h:53
void addConstantIC(const VariableName &var_name, Real value, const std::vector< SubdomainName > &block_names)
Definition: Simulation.C:512
virtual bool hasFunction(const std::string &name, const THREAD_ID tid=0)
const Elem & get(const ElemType type_in)
static const std::string DIRECTION
Definition: FlowModel.h:110
std::vector< VariableName > _derivative_vars
Definition: FlowModel.h:79