Loading [MathJax]/extensions/tex2jax.js
https://mooseframework.inl.gov
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
PhysicsComponentInterface.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 
12 
15 {
17  // we likely do not need all these parameters. But developers could expect them
18  return params;
19 }
20 
22  : PhysicsBase(parameters)
23 {
24  addRequiredPhysicsTask("add_ic");
25 }
26 
27 void
29 {
30  // TODO: find a way to force this routine to be called by derived classes
31  if (_current_task == "add_ic")
33  else if (_current_task == "add_bc" || _current_task == "add_fv_bc")
35 }
36 
37 void
39 {
40  // Adds the component's blocks to the block restriction at least
42 
43  // Move initial conditions from components to the Physics
44  if (const auto comp_ic = dynamic_cast<const ComponentInitialConditionInterface *>(&comp))
45  {
46  for (const auto & var_name : solverVariableNames())
47  if (comp_ic->hasInitialCondition(var_name))
48  addInitialCondition(comp.name(), var_name, comp_ic->getInitialCondition(var_name, name()));
49  for (const auto & var_name : auxVariableNames())
50  if (comp_ic->hasInitialCondition(var_name))
51  addInitialCondition(comp.name(), var_name, comp_ic->getInitialCondition(var_name, name()));
52  }
53 
54  // Move boundary conditions from components to the Physics
55  if (const auto comp_bc = dynamic_cast<const ComponentBoundaryConditionInterface *>(&comp))
56  {
57  for (const auto & var_name : solverVariableNames())
58  if (comp_bc->hasBoundaryCondition(var_name))
59  for (const auto & boundary : comp_bc->getBoundaryConditionBoundaries(var_name))
60  {
62  const auto boundary_functor =
63  comp_bc->getBoundaryCondition(var_name, boundary, name(), bc_type);
64  addBoundaryCondition(comp.name(), var_name, boundary, boundary_functor, bc_type);
65  }
66  for (const auto & var_name : auxVariableNames())
67  if (comp_bc->hasBoundaryCondition(var_name))
68  for (const auto & boundary : comp_bc->getBoundaryConditionBoundaries(var_name))
69  {
71  const auto boundary_functor =
72  comp_bc->getBoundaryCondition(var_name, boundary, name(), bc_type);
73  addBoundaryCondition(comp.name(), var_name, boundary, boundary_functor, bc_type);
74  }
75  }
76 }
77 
78 void
79 PhysicsComponentInterface::addInitialCondition(const ComponentName & component_name,
80  const VariableName & var_name,
81  const MooseFunctorName & ic_value)
82 {
83  _components_initial_conditions[component_name][var_name] = ic_value;
84 }
85 
86 void
88  const ComponentName & component_name,
89  const VariableName & var_name,
90  const BoundaryName & boundary_name,
91  const MooseFunctorName & bc_value,
93 {
94  _components_boundary_conditions[component_name][std::make_pair(var_name, boundary_name)] =
95  std::make_pair(bc_value, bc_type);
96 }
97 
98 void
100 {
102  {
103  std::vector<ComponentName> all_components(_components_initial_conditions.size());
104  for (const auto & comp : _components_initial_conditions)
105  all_components.push_back(comp.first);
106  mooseError("Component(s) '",
107  Moose::stringify(all_components),
108  "' requested to add the following initial conditions for this Physics. This Physics "
109  "however does not implement the 'addInitialConditionsFromComponents' "
110  "routine, so it cannot create these initial conditions");
111  }
112 }
113 
114 void
116 {
118  {
119  std::vector<ComponentName> all_components(_components_boundary_conditions.size());
120  for (const auto & comp : _components_boundary_conditions)
121  all_components.push_back(comp.first);
122  mooseError("Component(s) '",
123  Moose::stringify(all_components),
124  "' requested to add boundary conditions for the variable of this Physics. This "
125  "Physics however does not implement the 'addBoundaryConditionsFromComponents' "
126  "routine, so it cannot create these boundary conditions");
127  }
128 }
const std::vector< VariableName > & auxVariableNames() const
Return the list of aux variables in this physics.
Definition: PhysicsBase.h:100
virtual void addComponent(const ActionComponent &component) override
Adds various info from the component.
void addRequiredPhysicsTask(const std::string &task)
Add a new required task for all physics deriving from this class NOTE: This does not register the tas...
Definition: PhysicsBase.h:158
static InputParameters validParams()
PhysicsComponentInterface(const InputParameters &parameters)
Base class to help creating an entire physics.
Definition: PhysicsBase.h:30
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
void addBoundaryCondition(const ComponentName &component_name, const VariableName &var_name, const BoundaryName &boundary_name, const MooseFunctorName &bc_value, const ComponentBoundaryConditionInterface::BoundaryConditionType &bc_type)
Add a boundary condition from a component.
virtual void addBoundaryConditionsFromComponents()
Base class for components that are defined using an action.
std::map< std::string, std::map< VariableName, MooseFunctorName > > _components_initial_conditions
Map of components to variables and initial conditions.
virtual const std::string & name() const
Get the name of the class.
Definition: MooseBase.h:57
std::map< std::string, std::map< std::pair< VariableName, BoundaryName >, std::pair< MooseFunctorName, ComponentBoundaryConditionInterface::BoundaryConditionType > > > _components_boundary_conditions
Map of components to variables and boundary conditions.
void addInitialCondition(const ComponentName &component_name, const VariableName &var_name, const MooseFunctorName &ic_value)
Add an initial condition from a component.
const std::string & _current_task
The current action (even though we have separate instances for each action)
Definition: Action.h:162
std::string stringify(const T &t)
conversion to string
Definition: Conversion.h:62
virtual void actOnAdditionalTasks() override
Routine to add additional setup work on additional registered tasks to a Physics. ...
const std::vector< VariableName > & solverVariableNames() const
Return the list of solver (nonlinear + linear) variables in this physics.
Definition: PhysicsBase.h:98
static InputParameters validParams()
Definition: PhysicsBase.C:20
virtual void addInitialConditionsFromComponents()
virtual void addComponent(const ActionComponent &component)
Most basic way of adding a component: simply adding the blocks to the block restriction of the Physic...
Definition: PhysicsBase.C:217
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type.