22 params.
addParam<VariableName>(
"variable_name",
"u",
"Variable name for the equation");
23 params.
addParam<FunctionName>(
"initial_condition",
"Initial condition for the diffused variable");
26 params.
addParam<std::vector<MaterialPropertyName>>(
27 "diffusivity_matprop",
28 "Material property(ies) defining the diffusion coefficient (on each group of blocks)");
29 params.
addParam<std::vector<MooseFunctorName>>(
30 "diffusivity_functor",
"Functor(s) specifying the diffusivity (on each group of blocks)");
31 params.
addParam<std::vector<std::vector<SubdomainName>>>(
32 "diffusivity_blocks",
"Subdomains on which each diffusivity is defined");
35 params.
addParam<MooseFunctorName>(
"source_functor",
"Source term in the diffusion problem");
36 params.
addParam<Real>(
"source_coef", 1,
"Coefficient multiplying the source");
39 params.
addParam<std::vector<BoundaryName>>(
40 "neumann_boundaries", {},
"Boundaries on which to apply a diffusive flux");
41 params.
addParam<std::vector<BoundaryName>>(
42 "dirichlet_boundaries", {},
"Boundaries on which to apply a fixed value");
43 params.
addParam<std::vector<MooseFunctorName>>(
44 "boundary_fluxes", {},
"Functors to compute the diffusive flux on each Neumann boundary'");
45 params.
addParam<std::vector<MooseFunctorName>>(
46 "boundary_values", {},
"Functors to compute the diffusive flux on each Dirichlet boundary'");
49 "Boundary conditions");
52 params.
addParam<std::vector<BoundaryName>>(
53 "compute_diffusive_fluxes_on", {},
"Surfaces to compute the diffusive flux on");
56 MooseEnum pc_options(
"default defer",
"default");
58 "preconditioning", pc_options,
"Which preconditioning to use for this Physics");
66 _var_name(getParam<VariableName>(
"variable_name")),
67 _neumann_boundaries(getParam<
std::vector<BoundaryName>>(
"neumann_boundaries")),
68 _dirichlet_boundaries(getParam<
std::vector<BoundaryName>>(
"dirichlet_boundaries"))
74 checkVectorParamsSameLength<BoundaryName, MooseFunctorName>(
"neumann_boundaries",
76 checkVectorParamsSameLength<BoundaryName, MooseFunctorName>(
"dirichlet_boundaries",
78 checkVectorParamsNoOverlap<BoundaryName>({
"neumann_boundaries",
"dirichlet_boundaries"});
82 getParam<std::vector<MaterialPropertyName>>(
"diffusivity_matprop").size() > 1)
83 checkVectorParamsSameLength<MaterialPropertyName, std::vector<SubdomainName>>(
84 "diffusivity_matprop",
"diffusivity_blocks");
86 getParam<std::vector<MooseFunctorName>>(
"diffusivity_functor").size() > 1)
88 "diffusivity_blocks");
102 const auto option_pair1 =
103 std::make_pair<MooseEnumItem, std::string>(
MooseEnumItem(
"-pc_type"),
"hypre");
104 const auto option_pair2 =
105 std::make_pair<MooseEnumItem, std::string>(
MooseEnumItem(
"-pc_hypre_type"),
"boomeramg");
113 for (
const auto & boundary_name :
114 getParam<std::vector<BoundaryName>>(
"compute_diffusive_fluxes_on"))
117 const bool use_ad =
isParamValid(
"use_automatic_differentiation")
118 ? getParam<bool>(
"use_automatic_differentiation")
120 const std::string pp_type =
121 use_ad ?
"ADSideDiffusiveFluxIntegral" :
"SideDiffusiveFluxIntegral";
123 params.
set<std::vector<VariableName>>(
"variable") = {
_var_name};
126 const auto & diffusivities =
127 getParam<std::vector<MaterialPropertyName>>(
"diffusivity_matprop");
128 if (diffusivities.size() != 1)
130 "Computing diffusive fluxes is not implemented for multiple diffusivities");
131 params.set<MaterialPropertyName>(
"diffusivity") = diffusivities[0];
135 const auto & diffusivities = getParam<std::vector<MooseFunctorName>>(
"diffusivity_functor");
136 if (diffusivities.size() != 1)
138 "Computing diffusive fluxes is not implemented for multiple diffusivities");
139 params.set<MooseFunctorName>(
"functor_diffusivity") = diffusivities[0];
142 params.set<MooseFunctorName>(
"functor_diffusivity") =
"1";
143 params.set<std::vector<BoundaryName>>(
"boundary") = {boundary_name};
157 std::vector<SubdomainName> component_ic_blocks;
163 component_ic_blocks.insert(component_ic_blocks.end(), comp_blocks.begin(), comp_blocks.end());
167 std::vector<SubdomainName> remaining_blocks;
168 for (
const auto & block :
_blocks)
169 if (std::find(component_ic_blocks.begin(), component_ic_blocks.end(), block) ==
170 component_ic_blocks.end())
171 remaining_blocks.push_back(block);
174 if (remaining_blocks.empty())
183 !
parameters().hasDefault(
"initial_condition"),
184 "Should not have a default");
187 _var_name, remaining_blocks,
false,
true))
190 params.
set<FunctionName>(
"function") = getParam<FunctionName>(
"initial_condition");
209 params.
set<MooseFunctorName>(
"functor") = libmesh_map_find(component_bc_map,
_var_name);
const ExecFlagType EXEC_TIMESTEP_END
const ExecFlagType EXEC_INITIAL
const ExecFlagType EXEC_LINEAR
const ExecFlagType EXEC_NONLINEAR
const std::vector< SubdomainName > & blocks() const
Returns the subdomains for the component mesh, if any.
virtual void addPostprocessors() override
Add postprocessing of the fluxes.
virtual void addInitialConditions() override
virtual void addInitialConditionsFromComponents() override
const VariableName & _var_name
Name of the diffused variable.
static InputParameters validParams()
DiffusionPhysicsBase(const InputParameters ¶meters)
virtual void addPreconditioning() override
A MultiMooseEnum object to hold "execute_on" flags.
virtual void addInitialCondition(const std::string &ic_name, const std::string &name, InputParameters ¶meters)
virtual void addPostprocessor(const std::string &pp_name, const std::string &name, InputParameters ¶meters)
InputParameters getValidParams(const std::string &name) const
Get valid parameters for the object.
const InputParameters & parameters() const
Get the parameters of the object.
void paramError(const std::string ¶m, Args... args) const
Emits an error prefixed with the file and line number of the given param (from the input file) along ...
bool isParamSetByUser(const std::string &name) const
Test if the supplied parameter is set by a user, as opposed to not set or set to default.
const T & getParam(const std::string &name) const
Retrieve a parameter for the object.
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
Class for containing MooseEnum item information.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
Factory & _factory
The Factory associated with the MooseApp.
Base class to help creating an entire physics.
void addPetscPairsToPetscOptions(const std::vector< std::pair< MooseEnumItem, std::string > > &petsc_pair_options)
Process the given petsc option pairs into the system solver settings.
static InputParameters validParams()
virtual FEProblemBase & getProblem()
Get the problem for this physics Useful to add objects to the simulation.
Factory & getFactory()
Get the factory for this physics The factory lets you get the parameters for objects.
bool shouldCreateIC(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool ic_is_default_ic, const bool error_if_already_defined) const
Returns whether this Physics should create the variable.
void assignBlocks(InputParameters ¶ms, const std::vector< SubdomainName > &blocks) const
Set the blocks parameter to the input parameters of an object this Physics will create.
void saveSolverVariableName(const VariableName &var_name)
Keep track of the name of the solver variable defined in the Physics.
std::string prefix() const
Use prefix() to disambiguate names.
const ActionComponent & getActionComponent(const ComponentName &comp_name) const
Get a component with the requested name.
std::vector< SubdomainName > _blocks
Keep track of the subdomains the Physics is defined on.
const std::vector< SubdomainName > & blocks() const
Return the blocks this physics is defined on.
const MooseEnum & _preconditioning
Whether to add a default preconditioning.
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...
Interface class to help components interact with Physics.
std::map< std::string, std::map< VariableName, MooseFunctorName > > _components_initial_conditions
Map of components to variables and initial conditions.
static InputParameters validParams()