27 params.
addClassDescription(
"Creates all the objects necessary to solve a particular physics");
29 params.
addParam<std::vector<SubdomainName>>(
30 "block", {},
"Blocks (subdomains) that this Physics is active on.");
32 MooseEnum transient_options(
"true false same_as_problem",
"same_as_problem");
34 "transient", transient_options,
"Whether the physics is to be solved as a transient");
36 params.
addParam<
bool>(
"verbose",
false,
"Flag to facilitate debugging a Physics");
39 params.
addParam<std::vector<SolverSystemName>>(
42 "Name of the solver system(s) for the variables. If a single name is specified, " 43 "that system is used for all solver variables.");
44 MooseEnum pc_options(
"default defer",
"defer");
47 "Which preconditioning to use/add for this Physics, or whether to " 48 "defer to the Preconditioning block, or another Physics");
51 params.
addParam<
bool>(
"initialize_variables_from_mesh_file",
53 "Determines if the variables that are added by the action are initialized" 54 "from the mesh file (only for Exodus format)");
56 "initial_from_file_timestep",
58 "Gives the time step number (or \"LATEST\") for which to read the Exodus solution");
60 "Restart from Exodus");
63 params.
addParam<
bool>(
"dont_create_solver_variables",
65 "Whether to skip the 'add_variable'/'add_variables_physics' task(s)");
67 "dont_create_ics",
false,
"Whether to skip the 'add_ic'/'add_fv_ic/add_ics_physics' task(s)");
69 "dont_create_kernels",
false,
"Whether to skip the 'add_kernel' task for each kernel type");
70 params.
addParam<
bool>(
"dont_create_bcs",
72 "Whether to skip the 'add_bc' task for each boundary condition type");
73 params.
addParam<
bool>(
"dont_create_functions",
false,
"Whether to skip the 'add_function' task");
75 "dont_create_aux_variables",
false,
"Whether to skip the 'add_aux_variable' task");
77 "dont_create_aux_kernels",
false,
"Whether to skip the 'add_aux_kernel' task");
79 "dont_create_materials",
81 "Whether to skip the 'add_material'/'add_materials_physics' task(s) for each material type");
83 "dont_create_user_objects",
85 "Whether to skip the 'add_user_object' task. This does not apply to UserObject derived " 86 "classes being created on a different task (for example: postprocessors, VPPs, correctors)");
88 "dont_create_correctors",
false,
"Whether to skip the 'add_correctors' task");
90 "dont_create_postprocessors",
false,
"Whether to skip the 'add_postprocessors' task");
91 params.
addParam<
bool>(
"dont_create_vectorpostprocessors",
93 "Whether to skip the 'add_vectorpostprocessors' task");
95 "dont_create_solver_variables dont_create_ics dont_create_kernels dont_create_bcs " 96 "dont_create_functions dont_create_aux_variables dont_create_aux_kernels " 97 "dont_create_materials dont_create_user_objects dont_create_correctors " 98 "dont_create_postprocessors dont_create_vectorpostprocessors",
99 "Reduce Physics object creation");
109 _system_names(getParam<
std::vector<SolverSystemName>>(
"system_names")),
110 _verbose(getParam<bool>(
"verbose")),
111 _preconditioning(getParam<
MooseEnum>(
"preconditioning")),
112 _blocks(getParam<
std::vector<SubdomainName>>(
"block")),
113 _is_transient(getParam<
MooseEnum>(
"transient"))
116 "initial_from_file_timestep");
135 !getParam<bool>(
"dont_create_solver_variables"))
139 !getParam<bool>(
"dont_create_ics"))
143 else if (
_current_task ==
"add_interpolation_method_physics" &&
144 !getParam<bool>(
"dont_create_kernels"))
146 else if (
_current_task ==
"add_kernel" && !getParam<bool>(
"dont_create_kernels"))
148 else if (
_current_task ==
"add_nodal_kernel" && !getParam<bool>(
"dont_create_kernels"))
151 !getParam<bool>(
"dont_create_kernels"))
153 else if (
_current_task ==
"add_dirac_kernel" && !getParam<bool>(
"dont_create_kernels"))
155 else if (
_current_task ==
"add_dg_kernel" && !getParam<bool>(
"dont_create_kernels"))
157 else if (
_current_task ==
"add_scalar_kernel" && !getParam<bool>(
"dont_create_kernels"))
159 else if (
_current_task ==
"add_interface_kernel" && !getParam<bool>(
"dont_create_kernels"))
161 else if (
_current_task ==
"add_fv_ik" && !getParam<bool>(
"dont_create_kernels"))
165 else if (
_current_task ==
"add_bc" && !getParam<bool>(
"dont_create_bcs"))
167 else if (
_current_task ==
"add_nodal_bc" && !getParam<bool>(
"dont_create_bcs"))
170 !getParam<bool>(
"dont_create_bcs"))
172 else if (
_current_task ==
"add_periodic_bc" && !getParam<bool>(
"dont_create_bcs"))
176 else if (
_current_task ==
"add_function" && !getParam<bool>(
"dont_create_functions"))
178 else if (
_current_task ==
"add_aux_variable" && !getParam<bool>(
"dont_create_aux_variables"))
180 else if (
_current_task ==
"add_aux_kernel" && !getParam<bool>(
"dont_create_aux_kernels"))
183 !getParam<bool>(
"dont_create_materials"))
185 else if (
_current_task ==
"add_functor_material" && !getParam<bool>(
"dont_create_materials"))
195 else if (
_current_task ==
"add_user_object" && !getParam<bool>(
"dont_create_user_objects"))
197 else if (
_current_task ==
"add_corrector" && !getParam<bool>(
"dont_create_correctors"))
199 else if (
_current_task ==
"add_postprocessor" && !getParam<bool>(
"dont_create_postprocessors"))
202 !getParam<bool>(
"dont_create_vectorpostprocessors"))
234 const std::string & uo_name,
241 return std::find(supplied.begin(), supplied.end(), uo_name) != supplied.end();
243 "The UserObject '" + uo_name +
"' added by Physics '" +
name() +
244 "' was not declared in getSuppliedUserObjects(). Declare it there so its construction " 245 "order can be resolved.");
252 if (getParam<bool>(
"initialize_variables_from_mesh_file"))
256 "initial_from_file_timestep");
262 mooseAssert(
_problem,
"We don't have a problem yet");
274 mooseAssert(
_mesh,
"We dont have a mesh yet");
275 mooseAssert(
_dim < 4,
"Dimension has not been set yet");
279 std::set<SubdomainID>
282 const bool not_block_restricted =
285 mooseAssert(
_mesh,
"Should have a mesh");
289 std::set<SubdomainID> block_ids_set =
290 not_block_restricted ?
_mesh->meshSubdomains() :
_mesh->getSubdomainIDs(
blocks);
291 return block_ids_set;
294 std::vector<std::string>
297 mooseAssert(
_mesh,
"Should have a mesh");
298 std::vector<std::string> sub_names_ids;
299 sub_names_ids.reserve(
blocks.size());
300 for (
const auto bid :
blocks)
302 const auto bname =
_mesh->getSubdomainName(bid);
303 sub_names_ids.push_back((bname.empty() ?
"(unnamed)" : bname) +
" (" + std::to_string(bid) +
306 return sub_names_ids;
322 if (block_ids.size())
324 for (
const auto bid : block_ids)
333 for (
const auto & block : component.
blocks())
358 "Empty block restriction is not supported. Comment out the Physics if you are " 359 "trying to disable it.");
363 _blocks.push_back(
"ANY_BLOCK_ID");
365 mooseAssert(
_mesh,
"We should have a mesh to find the dimension");
385 if (
std::find(problem_nl_systems.begin(), problem_nl_systems.end(), sys_name) ==
386 problem_nl_systems.end() &&
387 std::find(problem_lin_systems.begin(), problem_lin_systems.end(), sys_name) ==
388 problem_lin_systems.end() &&
390 mooseError(
"System '", sys_name,
"' is not found in the Problem");
401 paramError(
"transient",
"We cannot solve a physics as transient in a steady problem");
406 "There should be one system name per solver variable (potentially repeated), or a " 407 "single system name for all variables. Currently you have '" +
408 std::to_string(
_system_names.size()) +
"' systems specified for '" +
412 unsigned int var_i = 0;
416 if (!
_problem->getSolverSystem(
_problem->solverSysNum(sys_name)).hasVariable(var_name) &&
417 !
_problem->getSolverSystem(
_problem->solverSysNum(sys_name)).hasScalarVariable(var_name))
419 "We expected system '" + sys_name +
"' to contain variable '" + var_name +
420 "' but it did not. Make sure the system names closely match the ordering of " 421 "the variables in the Physics.");
429 if (getParam<bool>(
"initialize_variables_from_mesh_file"))
431 mooseInfoRepeated(
"Adding Exodus restart for " + std::to_string(variables_to_copy.size()) +
434 for (
const auto i :
index_range(variables_to_copy))
440 const auto & var_name = variables_to_copy[i];
442 var_name, var_name, getParam<std::string>(
"initial_from_file_timestep"));
450 if (error_if_aux &&
_problem->getAuxiliarySystem().hasVariable(var_name))
453 "' is supposed to be nonlinear for physics '",
455 "' but it is already defined as auxiliary");
457 return _problem->hasVariable(var_name);
463 return _problem->hasSolverVariable(var_name);
466 const SolverSystemName &
469 mooseAssert(!
_system_names.empty(),
"We should have a solver system name");
478 const SolverSystemName &
481 mooseAssert(!
_system_names.empty(),
"We should have a solver system name");
491 mooseError(
"Variable '", var_name,
"' was not found within the Physics solver variables.");
501 if (!registered_tasks.count(required_task))
503 "' has been declared as required by a Physics parent class of derived class '" +
505 "' but this task is not registered to the derived class. Registered tasks for " 506 "this Physics are: " +
517 params.
set<std::vector<SubdomainName>>(
"block") =
blocks;
519 mooseInfoRepeated(
"Empty block restriction assigned to an object created by Physics '" +
520 name() +
"'.\n Did you mean to do this?");
525 const std::vector<SubdomainName> &
blocks,
526 bool error_if_not_identical)
const 540 auto copy_blocks_other =
blocks;
541 std::sort(copy_blocks.begin(), copy_blocks.end());
542 copy_blocks.erase(unique(copy_blocks.begin(), copy_blocks.end()), copy_blocks.end());
543 std::sort(copy_blocks_other.begin(), copy_blocks_other.end());
544 copy_blocks_other.erase(unique(copy_blocks_other.begin(), copy_blocks_other.end()),
545 copy_blocks_other.end());
547 if (copy_blocks == copy_blocks_other)
549 std::vector<SubdomainName> diff;
550 std::set_difference(copy_blocks.begin(),
552 copy_blocks_other.begin(),
553 copy_blocks_other.end(),
554 std::inserter(diff, diff.begin()));
555 if (error_if_not_identical)
560 "' have different block restrictions.\nPhysics: ",
573 mooseAssert(
_blocks.size(),
"hasBlocks called before blocks were initialized");
574 return std::all_of(
blocks.begin(),
576 [
this](
const SubdomainName & block)
583 mooseAssert(
_mesh,
"The mesh should exist already");
587 else if (
blocks.size() !=
_mesh->meshSubdomains().size())
590 for (
const auto mesh_block :
_mesh->meshSubdomains())
592 const auto & subdomain_name =
_mesh->getSubdomainName(mesh_block);
594 if (!subdomain_name.empty() &&
607 std::vector<SubdomainName> blocks_vec(
blocks.begin(),
blocks.end());
613 const std::vector<std::pair<MooseEnumItem, std::string>> & petsc_pair_options)
620 _problem->getSolverSystem(solver_sys_num).prefix(),
628 const auto var = &
_problem->getVariable(0, var_name);
635 return _problem->hasScalarVariable(var_name);
640 const std::vector<SubdomainName> &
blocks,
641 const bool error_if_aux)
646 auto & var =
_problem->getVariable(0, var_name);
647 const bool not_block_restricted =
650 if (!var.blockRestricted() || (!not_block_restricted && var.hasBlocks(
blocks)))
657 mooseError(
"Variable '" + var_name +
"' already exists with subdomain restriction '" +
658 Moose::stringify(var.blocks()) +
"' which does not include the subdomains '" +
664 const std::vector<SubdomainName> &
blocks,
665 const bool ic_is_default_ic,
666 const bool error_if_already_defined)
const 672 if (getParam<bool>(
"initialize_variables_from_mesh_file"))
675 mooseAssert(!
isVariableScalar(var_name),
"shouldCreateIC not implemented for scalar variables");
678 std::set<SubdomainName> blocks_set(
blocks.begin(),
blocks.end());
682 std::set<SubdomainID> blocks_ids_covered;
686 has_all_blocks =
_problem->getFVInitialConditionWarehouse().hasObjectsForVariableAndBlocks(
687 var_name, blocks_ids_set, blocks_ids_covered, 0);
689 std::set<SubdomainID> blocks_ids_covered_fe;
690 const bool has_all_blocks_from_feics =
691 _problem->getInitialConditionWarehouse().hasObjectsForVariableAndBlocks(
692 var_name, blocks_ids_set, blocks_ids_covered_fe, 0);
694 has_all_blocks = has_all_blocks || has_all_blocks_from_feics;
695 blocks_ids_covered.insert(blocks_ids_covered_fe.begin(), blocks_ids_covered_fe.end());
698 has_all_blocks =
_problem->getInitialConditionWarehouse().hasObjectsForVariableAndBlocks(
699 var_name, blocks_ids_set, blocks_ids_covered, 0);
701 const bool has_some_blocks = !blocks_ids_covered.empty();
702 if (!has_some_blocks)
707 if (error_if_already_defined)
708 mooseError(
"ICs for variable '" + var_name +
"' have already been defined for blocks '" +
715 mooseError(
"There is a partial overlap between the subdomains covered by pre-existing initial " 716 "conditions (ICs), defined on blocks (ids): " +
718 "\n and a newly created IC for variable '" + var_name +
720 ".\nWe should be creating the Physics' IC only for non-covered blocks. This is not " 721 "implemented at this time.");
726 const std::vector<SubdomainName> &
blocks,
727 const bool error_if_already_defined)
const 737 "shouldCreateTimeDerivative not implemented for scalar variables");
738 mooseAssert(!
_problem->hasAuxiliaryVariable(var_name),
739 "Should not be called with auxiliary variables");
742 const auto var = &
_problem->getVariable(0, var_name);
743 const auto var_id = var->number();
744 const auto sys_num = var->sys().number();
745 const auto time_vector_tag =
746 (sys_num <
_problem->numNonlinearSystems())
747 ? var->sys().timeVectorTag()
749 :
dynamic_cast<LinearSystem *
>(&var->sys())->rightHandSideTimeVectorTag();
752 bool all_blocks_covered =
true;
753 std::set<SubdomainID> blocks_ids_covered;
756 for (
const auto & block :
blocks)
758 std::vector<MooseObject *> time_kernels;
759 if (block !=
"ANY_BLOCK_ID")
761 const auto bid =
_mesh->getSubdomainID(block);
764 .template condition<AttribSysNum>(sys_num)
765 .
template condition<AttribVar>(var_id)
766 .template condition<AttribSubdomains>(bid)
768 .
template condition<AttribVectorTags>(time_vector_tag)
769 .queryInto(time_kernels);
774 .template condition<AttribSysNum>(sys_num)
775 .
template condition<AttribVar>(var_id)
777 .template condition<AttribVectorTags>(time_vector_tag)
778 .queryInto(time_kernels);
780 if (time_kernels.size())
782 if (block ==
"ANY_BLOCK_ID")
784 for (
const auto & time_kernel : time_kernels)
785 if (
const auto blk = dynamic_cast<BlockRestrictable *>(time_kernel))
786 blocks_ids_covered.insert(blk->blockIDs().begin(), blk->blockIDs().end());
789 blocks_ids_covered.insert(
_mesh->getSubdomainID(block));
792 all_blocks_covered =
false;
796 if (all_blocks_covered)
798 std::set<SubdomainName> blocks_set(
blocks.begin(),
blocks.end());
800 if (blocks_ids != blocks_ids_covered)
801 all_blocks_covered =
false;
803 const bool has_some_blocks = !blocks_ids_covered.empty();
804 if (!has_some_blocks)
806 if (all_blocks_covered)
808 if (error_if_already_defined)
809 mooseError(
"A time kernel for variable '" + var_name +
816 mooseError(
"There is a partial overlap between the subdomains covered by pre-existing time " 817 "derivative kernel(s), defined on blocks (ids): " +
819 "\nand a newly created time derivative kernel for variable " + var_name +
821 ".\nWe should be creating the Physics' time derivative only for non-covered " 822 "blocks. This is not implemented at this time.");
827 const std::string & object_type,
828 const std::string & object_name)
const 830 std::vector<std::string> defaults_unused;
831 std::vector<std::string> user_values_unused;
832 for (
const auto & param : param_names)
835 user_values_unused.push_back(param);
837 defaults_unused.push_back(param);
839 const std::string object_name_string =
840 object_name.empty() ?
"" : (
"and name '" + object_name +
"' ");
842 if (defaults_unused.size() &&
_verbose)
844 "' for object of type '" + object_type +
"' " + object_name_string +
845 "were not used because the object was not created by this Physics.");
846 if (user_values_unused.size())
850 "User-specifed values for parameters '" +
Moose::stringify(user_values_unused) +
851 "' for object of type '" + object_type +
"' " + object_name_string +
852 "were not used because the corresponding object was not created by this Physics.");
855 "' for object of type '" + object_type +
"' " + object_name_string +
856 "were not used because the corresponding object was not created by this Physics.");
const T & getAction(const std::string &name) const
Retrieve an action with its name and the desired type.
void addUserObject(const std::string &uo_type, const std::string &uo_name, InputParameters ¶ms)
Add a UserObject supplied by this Physics to the problem.
const std::vector< VariableName > & auxVariableNames() const
Return the list of aux variables in this physics.
const std::vector< NonlinearSystemName > & getNonlinearSystemNames() const
virtual void act() override final
Forwards from the action tasks to the implemented addXYZ() in the derived classes If you need more th...
KOKKOS_INLINE_FUNCTION const T * find(const T &target, const T *const begin, const T *const end)
Find a value in an array.
virtual InputParameters getAdditionalRMParams() const
Provide additional parameters for the relationship managers.
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.
virtual void addInitialConditions()
bool shouldCreateVariable(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_aux)
Returns whether this Physics should create the variable.
std::vector< VariableName > _aux_var_names
Vector of the aux variables in the Physics.
virtual void addFVInterfaceKernels()
virtual void addPreconditioning()
MooseEnum _is_transient
Whether the physics is to be solved as a transient.
RelationshipManagerType
Main types of Relationship Managers.
ActionWarehouse & _awh
Reference to ActionWarehouse where we store object build by actions.
void initializePhysics()
Process some parameters that require the problem to be created. Executed on init_physics.
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 ...
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...
void addPetscPairsToPetscOptions(const std::vector< std::pair< MooseEnumItem, std::string >> &petsc_pair_options)
Process the given petsc option pairs into the system solver settings.
void addPetscPairsToPetscOptions(const std::vector< std::pair< MooseEnumItem, std::string >> &petsc_pair_options, const unsigned int mesh_dimension, std::string prefix, const ParallelParamObject ¶m_object, PetscOptions &petsc_options)
Populate name and value pairs in a given PetscOptions object using vectors of input arguments...
virtual void checkIntegrity() const
Additional checks performed near the end of the setup phase.
Base class to help creating an entire physics.
virtual void checkIntegrityEarly() const
Additional checks performed once the executioner / executor has been created.
std::set< std::string > getTasksByAction(const std::string &action) const
virtual void addMultiApps()
ActionFactory & _action_factory
Builds Actions.
virtual void addAuxiliaryKernels()
A struct for storing the various types of petsc options and values.
virtual void addPeriodicBCs()
const std::vector< SubdomainName > & blocks() const
Return the blocks this physics is defined on.
void reportPotentiallyMissedParameters(const std::vector< std::string > ¶m_names, const std::string &object_type, const std::string &object_name="") const
When this is called, we are knowingly not using the value of these parameters.
void mooseInfoRepeated(Args &&... args)
Emit an informational message with the given stringified, concatenated args.
virtual void addVariableToCopy(const std::string &dest_name, const std::string &source_name, const std::string ×tep)
Add info about variable that will be copied.
bool solverVariableExists(const VariableName &var_name) const
Check whether a variable already exists and is a solver variable.
const bool _verbose
Whether to output additional information.
Base class for components that are defined using an action.
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.
bool shouldCreateTimeDerivative(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_already_defined) const
Returns whether this Physics should create the variable.
Base class for a system (of equations)
bool isRestarting() const
Whether or not this is a "restart" calculation.
bool allMeshBlocks(const std::vector< SubdomainName > &blocks) const
Check if a vector contains all the mesh blocks.
std::vector< SubdomainName > _blocks
Keep track of the subdomains the Physics is defined on.
unsigned int dimension() const
Return the maximum dimension of the blocks the Physics is active on.
void addBlocks(const std::vector< SubdomainName > &blocks)
Add new blocks to the Physics.
virtual FEProblemBase & getProblem()
Get the problem for this physics Useful to add objects to the simulation.
void mooseWarning(Args &&... args) const
const std::string & name() const
Get the name of the class.
static InputParameters validParams()
virtual void addNodalBCs()
const SolverSystemName & getSolverSystem(unsigned int variable_index) const
Get the solver system for this variable index.
virtual void addNodalKernels()
virtual void addDGKernels()
bool unusedFlagIsError() const
Returns whether the flag for unused parameters is set to throw an error.
virtual void addMaterials()
std::set< std::string > _required_tasks
Manually keeps track of the tasks required by each physics as tasks cannot be inherited.
void setExodusFileRestart(bool flag)
Set the flag to indicate whether or not we need to use a separate Exodus reader to read the mesh BEFO...
bool isVariableScalar(const VariableName &var_name) const
Whether the variable is a scalar variable (global single scalar, not a field)
PhysicsBase(const InputParameters ¶meters)
void copyVariablesFromMesh(const std::vector< VariableName > &variables_to_copy, bool are_nonlinear=true)
Copy nonlinear or aux variables from the mesh file.
unsigned int _dim
Dimension of the physics, which we expect for now to be the dimension of the mesh NOTE: this is not k...
virtual void addReporters()
bool isVariableFV(const VariableName &var_name) const
Whether the variable is a finite volume variable.
std::vector< std::string > getSubdomainNamesAndIDs(const std::set< SubdomainID > &blocks) const
Get the vector of subdomain names and ids for the incoming set of subdomain IDs.
const std::string & type() const
Get the type of this class.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
const std::string & _current_task
The current action (even though we have separate instances for each action)
virtual const SystemBase & systemBaseAuxiliary() const override
Return the auxiliary system object as a base class reference.
virtual void addPostprocessors()
virtual void addFunctions()
MooseApp & _app
The MOOSE application this is associated with.
std::string stringify(const T &t)
conversion to string
virtual void addSolverVariables()
The default implementation of these routines will do nothing as we do not expect all Physics to be de...
virtual void addExecutioner()
bool hasBlocks(const std::vector< SubdomainName > &blocks) const
Whether the Physics is defined on those blocks.
const std::vector< LinearSystemName > & getLinearSystemNames() const
const std::vector< VariableName > & solverVariableNames() const
Return the list of solver (nonlinear + linear) variables in this physics.
bool variableExists(const VariableName &var_name, bool error_if_aux) const
Check whether a variable already exists.
bool checkBlockRestrictionIdentical(const std::string &object_name, const std::vector< SubdomainName > &blocks, const bool error_if_not_identical=true) const
Check if an external object has the same block restriction.
virtual void addFVKernels()
static InputParameters validParams()
virtual std::vector< UserObjectName > getSuppliedUserObjects() const
Return the names of the UserObjects this Physics adds to the problem.
virtual void addFVInterpolationMethods()
virtual const SystemBase & getSystemBase(const unsigned int sys_num) const
Get constant reference to a system in this problem.
std::shared_ptr< MooseMesh > & _mesh
std::vector< VariableName > _solver_var_names
Vector of the solver variables (nonlinear and linear) in the Physics.
std::set< SubdomainID > getSubdomainIDs(const std::set< SubdomainName > &blocks) const
Get the set of subdomain ids for the incoming vector of subdomain names.
virtual void addComponent(const ActionComponent &component)
Most basic way of adding a component: simply adding the blocks to the block restriction of the Physic...
virtual void addFEKernels()
virtual void addUserObjects()
virtual void addRelationshipManagers(Moose::RelationshipManagerType input_rm_type) override
Method to add a relationship manager for the objects being added to the system.
bool unusedFlagIsWarning() const
Returns whether the flag for unused parameters is set to throw a warning only.
virtual void actOnAdditionalTasks()
Routine to add additional setup work on additional registered tasks to a Physics. ...
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters ¶meters)
void addBlocksById(const std::vector< SubdomainID > &block_ids)
void prepareCopyVariablesFromMesh() const
Tell the app if we want to use Exodus restart.
const std::vector< SubdomainName > & blocks() const
Returns the subdomains for the component mesh, if any.
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type and optionally a file path to the top-level block p...
virtual void addOutputs()
bool addRelationshipManagers(Moose::RelationshipManagerType when_type, const InputParameters &moose_object_pars)
Method to add a relationship manager for the objects being added to the system.
std::shared_ptr< FEProblemBase > & _problem
Convenience reference to a problem this action works on.
Linear system to be solved.
virtual void addDiracKernels()
virtual void addVectorPostprocessors()
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
virtual void addExecutors()
virtual bool isTransient() const override
virtual void addInterfaceKernels()
virtual void addFunctorMaterials()
const ActionComponent & getActionComponent(const ComponentName &comp_name) const
Get a component with the requested name.
std::vector< unsigned int > _system_numbers
System numbers for the system(s) owning the solver variables.
virtual void addTransfers()
bool isRecovering() const
Whether or not this is a "recover" calculation.
virtual void addCorrectors()
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.
void setVerboseProblem(bool verbose)
Make the problem be verbose.
auto index_range(const T &sizable)
std::vector< SolverSystemName > _system_names
System names for the system(s) owning the solver variables.
bool isTransient() const
Return whether the Physics is solved using a transient.
virtual void addAuxiliaryVariables()
virtual void initializePhysicsAdditional()
Additional initialization work that should happen very early, as soon as the problem is created...
virtual void addScalarKernels()
void checkRequiredTasks() const
Check the list of required tasks for missing tasks.