https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
16using 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
32const std::string FlowModel::AREA = THM::AREA;
38const std::string FlowModel::UNITY = THM::UNITY;
39const 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
55const FunctionName &
56FlowModel::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
69void
71{
72 const std::vector<SubdomainName> & subdomains = _flow_channel.getSubdomainNames();
73
74 _sim.addSimVariable(false, AREA, _fe_type, subdomains);
76 _sim.addSimVariable(false, AREA_LINEAR, FEType(FIRST, LAGRANGE), subdomains);
77}
78
79void
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 else
94 {
95 _sim.addFunctionIC(AREA_LINEAR, area_function, block);
96
97 {
98 const std::string class_name = "FunctionNodalAverageIC";
99 InputParameters params = _factory.getValidParams(class_name);
100 params.set<VariableName>("variable") = AREA;
101 params.set<std::vector<SubdomainName>>("block") = block;
102 params.set<FunctionName>("function") = area_function;
103 _sim.addSimInitialCondition(class_name, genName(_comp_name, AREA, "ic"), params);
104 }
105 }
106 }
107}
108
109void
111{
112 // add material property equal to one, useful for dummy multiplier values
113 {
114 const std::string class_name = "ConstantMaterial";
115 InputParameters params = _factory.getValidParams(class_name);
116 params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
117 params.set<std::string>("property_name") = FlowModel::UNITY;
118 params.set<Real>("value") = 1.0;
119 params.set<std::vector<VariableName>>("derivative_vars") = _derivative_vars;
120 _sim.addMaterial(class_name, genName(_comp_name, FlowModel::UNITY), params);
121 }
122}
const std::string name
Definition Setup.h:21
virtual const std::vector< SubdomainName > & getSubdomainNames() const
Gets the subdomain names for this component.
Definition Component.C:345
void connectObject(const InputParameters &obj_params, const std::string &obj_name, const std::string &param) const
Connects a controllable parameter of the component to a controllable parameter of a constituent objec...
Definition Component.C:98
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
virtual bool hasFunction(const std::string &name, const THREAD_ID tid=0)
virtual Function & getFunction(const std::string &name, const THREAD_ID tid=0)
A base class for flow channels.
const FunctionName & getAreaFunctionName() const
Get the name of the function describing the flow channel area.
static const std::string HEAT_FLUX_WALL
Definition FlowModel.h:104
static const std::string NUSSELT_NUMBER
Definition FlowModel.h:106
static const std::string DIRECTION
Definition FlowModel.h:110
FlowChannelBase & _flow_channel
The flow channel component that built this class.
Definition FlowModel.h:59
static const std::string AREA
Definition FlowModel.h:102
const FunctionName & getVariableFn(const FunctionName &fn_param_name)
Definition FlowModel.C:56
static const std::string TEMPERATURE_WALL
Definition FlowModel.h:108
static const std::string AREA_LINEAR
Definition FlowModel.h:103
virtual void addCommonVariables()
Adds variables common to any flow model (A, P_hf, ...)
Definition FlowModel.C:70
const std::string _comp_name
The component name.
Definition FlowModel.h:68
FlowModel(const InputParameters &params)
Definition FlowModel.C:41
static const std::string UNITY
Definition FlowModel.h:109
static InputParameters validParams()
Definition FlowModel.C:19
Factory & _factory
The Factory associated with the MooseApp.
Definition FlowModel.h:56
const libMesh::FEType & _fe_type
The type of FE used for flow.
Definition FlowModel.h:62
virtual void addCommonInitialConditions()
Adds initial conditions common to any flow model.
Definition FlowModel.C:80
virtual void addCommonMooseObjects()
Adds common MOOSE objects.
Definition FlowModel.C:110
THMProblem & _sim
Definition FlowModel.h:53
static const std::string HEAT_FLUX_PERIMETER
Definition FlowModel.h:105
std::vector< VariableName > _derivative_vars
Definition FlowModel.h:79
virtual Real value(Real t, const Point &p) const
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addPrivateParam(const std::string &name, const T &value)
void registerBase(const std::string &value)
T & set(const std::string &name, bool quiet_mode=false)
bool isRestarting() const
const T & getParam(const std::string &name) const
bool isParamValid(const std::string &name) const
static InputParameters validParams()
MooseApp & _app
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.
void addConstantIC(const VariableName &var_name, Real value, const std::vector< SubdomainName > &block_names)
Definition Simulation.C:512
void addFunctionIC(const VariableName &var_name, const std::string &func_name, const std::vector< SubdomainName > &block_names)
Definition Simulation.C:532
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
void addSimInitialCondition(const std::string &type, const std::string &name, InputParameters params)
Definition Simulation.C:495
Specialization of FEProblem to run with component subsystem.
Definition THMProblem.h:19
static const std::string DIRECTION
Definition THMNames.h:17
static const std::string AREA
Definition THMNames.h:14
static const std::string HEAT_FLUX_PERIMETER
Definition THMNames.h:21
static const std::string HEAT_FLUX_WALL
Definition THMNames.h:20
static const std::string AREA_LINEAR
Definition THMNames.h:15
static const std::string TEMPERATURE_WALL
Definition THMNames.h:40
static const std::string UNITY
Definition THMNames.h:42
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...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real