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
18{
20 params.addPrivateParam<THMProblem *>("_thm_problem");
21 params.addPrivateParam<FlowChannelBase *>("_flow_channel");
22 params.addRequiredParam<UserObjectName>(
23 "fp", "The name of the user object that defines fluid properties");
24 params.addRequiredParam<bool>("output_vector_velocity",
25 "True if velocity is put out as a vector field.");
26 params.registerBase("THM:flow_model");
27 return params;
28}
29
30const std::string FlowModel::AREA = THM::AREA;
36const std::string FlowModel::UNITY = THM::UNITY;
37const std::string FlowModel::DIRECTION = THM::DIRECTION;
38
40 : MooseObject(params),
41 _sim(*params.getCheckedPointerParam<THMProblem *>("_thm_problem")),
42 _factory(_app.getFactory()),
43 _flow_channel(*params.getCheckedPointerParam<FlowChannelBase *>("_flow_channel")),
44 _fe_type(_sim.getFlowFEType()),
45 _fp_name(params.get<UserObjectName>("fp")),
46 _comp_name(name()),
47 _gravity_vector(_flow_channel.getParam<RealVectorValue>("gravity_vector")),
48 _gravity_magnitude(_gravity_vector.norm()),
49 _output_vector_velocity(params.get<bool>("output_vector_velocity"))
50{
51}
52
53const FunctionName &
54FlowModel::getVariableFn(const FunctionName & fn_param_name)
55{
56 const FunctionName & fn_name = _flow_channel.getParam<FunctionName>(fn_param_name);
57 const Function & fn = _sim.getFunction(fn_name);
58
59 if (dynamic_cast<const ConstantFunction *>(&fn) != nullptr)
60 {
61 _flow_channel.connectObject(fn.parameters(), fn_name, fn_param_name, "value");
62 }
63
64 return fn_name;
65}
66
67void
69{
70 const std::vector<SubdomainName> & subdomains = _flow_channel.getSubdomainNames();
71
72 _sim.addSimVariable(false, AREA, _fe_type, subdomains);
74 _sim.addSimVariable(false, AREA_LINEAR, FEType(FIRST, LAGRANGE), subdomains);
75}
76
77void
79{
81 {
82 const std::vector<SubdomainName> & block = _flow_channel.getSubdomainNames();
83 const FunctionName & area_function = _flow_channel.getAreaFunctionName();
84
85 if (!_sim.hasFunction(area_function))
86 {
87 const Function & fn = _sim.getFunction(area_function);
88 _sim.addConstantIC(AREA, fn.value(0, Point()), block);
89 _sim.addConstantIC(AREA_LINEAR, fn.value(0, Point()), block);
90 }
91 else
92 {
93 _sim.addFunctionIC(AREA_LINEAR, area_function, block);
94
95 {
96 const std::string class_name = "FunctionNodalAverageIC";
97 InputParameters params = _factory.getValidParams(class_name);
98 params.set<VariableName>("variable") = AREA;
99 params.set<std::vector<SubdomainName>>("block") = block;
100 params.set<FunctionName>("function") = area_function;
101 _sim.addSimInitialCondition(class_name, genName(_comp_name, AREA, "ic"), params);
102 }
103 }
104 }
105}
106
107void
109{
110 // add material property equal to one, useful for dummy multiplier values
111 {
112 const std::string class_name = "ConstantMaterial";
113 InputParameters params = _factory.getValidParams(class_name);
114 params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
115 params.set<std::string>("property_name") = FlowModel::UNITY;
116 params.set<Real>("value") = 1.0;
117 params.set<std::vector<VariableName>>("derivative_vars") = _derivative_vars;
118 _sim.addMaterial(class_name, genName(_comp_name, FlowModel::UNITY), params);
119 }
120}
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)
InputParameters getValidParams(const std::string &name) const
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:54
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:68
const std::string _comp_name
The component name.
Definition FlowModel.h:68
FlowModel(const InputParameters &params)
Definition FlowModel.C:39
static const std::string UNITY
Definition FlowModel.h:109
static InputParameters validParams()
Definition FlowModel.C:17
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:78
virtual void addCommonMooseObjects()
Adds common MOOSE objects.
Definition FlowModel.C:108
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:509
void addFunctionIC(const VariableName &var_name, const std::string &func_name, const std::vector< SubdomainName > &block_names)
Definition Simulation.C:529
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.
void addSimInitialCondition(const std::string &type, const std::string &name, InputParameters params)
Definition Simulation.C:492
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