https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | Friends | List of all members
FEProblemBase Class Referenceabstract

Specialization of SubProblem for solving nonlinear equations plus auxiliary equations. More...

#include <FEProblemBase.h>

Inheritance diagram for FEProblemBase:
[legend]

Classes

class  CreateTaggedMatrixKey
 
class  CurrentResidualVectorTagsKey
 Class that is used as a parameter to set/clearCurrentResidualVectorTags that allows only blessed classes to call said methods. More...
 

Public Types

enum class  CoverageCheckMode {
  FALSE , TRUE , OFF , ON ,
  SKIP_LIST , ONLY_LIST
}
 
using DataFileParameterType = DataFileName
 The parameter type this interface expects for a data file name.
 

Public Member Functions

 FEProblemBase (const InputParameters &parameters)
 
virtual ~FEProblemBase ()
 
bool initialized () const
 
virtual libMesh::EquationSystemses () override
 
virtual MooseMeshmesh () override
 
virtual const MooseMeshmesh () const override
 
const MooseMeshmesh (bool use_displaced) const override
 
MooseMeshmesh (bool use_displaced)
 
void setCoordSystem (const std::vector< SubdomainName > &blocks, const MultiMooseEnum &coord_sys)
 
void setAxisymmetricCoordAxis (const MooseEnum &rz_coord_axis)
 
void setCoupling (Moose::CouplingType type)
 Set the coupling between variables TODO: allow user-defined coupling.
 
Moose::CouplingType coupling () const
 
void setCouplingMatrix (std::unique_ptr< libMesh::CouplingMatrix > cm, const unsigned int nl_sys_num)
 Set custom coupling matrix.
 
void setCouplingMatrix (libMesh::CouplingMatrix *cm, const unsigned int nl_sys_num)
 
const libMesh::CouplingMatrixcouplingMatrix (const unsigned int nl_sys_num) const override
 The coupling matrix defining what blocks exist in the preconditioning matrix.
 
void setNonlocalCouplingMatrix ()
 Set custom coupling matrix for variables requiring nonlocal contribution.
 
bool areCoupled (const unsigned int ivar, const unsigned int jvar, const unsigned int nl_sys_num) const
 
bool hasUOAuxStateCheck () const
 Whether or not MOOSE will perform a user object/auxiliary kernel state check.
 
bool checkingUOAuxState () const
 Return a flag to indicate whether we are executing user objects and auxliary kernels for state check Note: This function can return true only when hasUOAuxStateCheck() returns true, i.e.
 
virtual bool checkResidualForNans () const override
 Whether to check residual for NaN/Inf values.
 
void setCheckResidualForNans (bool check_residual_for_nans)
 Setter for residual NaN/Inf checking.
 
void trustUserCouplingMatrix ()
 Whether to trust the user coupling matrix even if we want to do things like be paranoid and create a full coupling matrix.
 
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & couplingEntries (const THREAD_ID tid, const unsigned int nl_sys_num)
 
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & nonlocalCouplingEntries (const THREAD_ID tid, const unsigned int nl_sys_num)
 
virtual bool hasVariable (const std::string &var_name) const override
 Whether or not this problem has the variable.
 
bool hasSolverVariable (const std::string &var_name) const
 
virtual const MooseVariableFieldBasegetVariable (const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type=Moose::VarKindType::VAR_ANY, Moose::VarFieldType expected_var_field_type=Moose::VarFieldType::VAR_FIELD_ANY) const override
 Returns the variable reference for requested variable which must be of the expected_var_type (Nonlinear vs.
 
MooseVariableFieldBasegetActualFieldVariable (const THREAD_ID tid, const std::string &var_name) override
 Returns the variable reference for requested MooseVariableField which may be in any system.
 
virtual MooseVariablegetStandardVariable (const THREAD_ID tid, const std::string &var_name) override
 Returns the variable reference for requested MooseVariable which may be in any system.
 
virtual VectorMooseVariablegetVectorVariable (const THREAD_ID tid, const std::string &var_name) override
 Returns the variable reference for requested VectorMooseVariable which may be in any system.
 
virtual ArrayMooseVariablegetArrayVariable (const THREAD_ID tid, const std::string &var_name) override
 Returns the variable reference for requested ArrayMooseVariable which may be in any system.
 
virtual bool hasScalarVariable (const std::string &var_name) const override
 Returns a Boolean indicating whether any system contains a variable with the name provided.
 
virtual MooseVariableScalargetScalarVariable (const THREAD_ID tid, const std::string &var_name) override
 Returns the scalar variable reference from whichever system contains it.
 
virtual libMesh::SystemgetSystem (const std::string &var_name) override
 Returns the equation system containing the variable provided.
 
const RestartableEquationSystemsgetRestartableEquationSystems () const
 Get the RestartableEquationSystems object.
 
virtual void setActiveElementalMooseVariables (const std::set< MooseVariableFEBase * > &moose_vars, const THREAD_ID tid) override
 Set the MOOSE variables to be reinited on each element.
 
virtual void clearActiveElementalMooseVariables (const THREAD_ID tid) override
 Clear the active elemental MooseVariableFEBase.
 
virtual void clearActiveFEVariableCoupleableMatrixTags (const THREAD_ID tid) override
 
virtual void clearActiveFEVariableCoupleableVectorTags (const THREAD_ID tid) override
 
virtual void setActiveFEVariableCoupleableVectorTags (std::set< TagID > &vtags, const THREAD_ID tid) override
 
virtual void setActiveFEVariableCoupleableMatrixTags (std::set< TagID > &mtags, const THREAD_ID tid) override
 
virtual void clearActiveScalarVariableCoupleableMatrixTags (const THREAD_ID tid) override
 
virtual void clearActiveScalarVariableCoupleableVectorTags (const THREAD_ID tid) override
 
virtual void setActiveScalarVariableCoupleableVectorTags (std::set< TagID > &vtags, const THREAD_ID tid) override
 
virtual void setActiveScalarVariableCoupleableMatrixTags (std::set< TagID > &mtags, const THREAD_ID tid) override
 
virtual void createQRules (libMesh::QuadratureType type, libMesh::Order order, libMesh::Order volume_order=libMesh::INVALID_ORDER, libMesh::Order face_order=libMesh::INVALID_ORDER, SubdomainID block=Moose::ANY_BLOCK_ID, bool allow_negative_qweights=true)
 
void bumpVolumeQRuleOrder (libMesh::Order order, SubdomainID block)
 Increases the element/volume quadrature order for the specified mesh block if and only if the current volume quadrature order is lower.
 
void bumpAllQRuleOrder (libMesh::Order order, SubdomainID block)
 
unsigned int getMaxQps () const
 
libMesh::Order getMaxScalarOrder () const
 
void checkNonlocalCoupling ()
 
void checkUserObjectJacobianRequirement (THREAD_ID tid)
 
void setVariableAllDoFMap (const std::vector< const MooseVariableFEBase * > &moose_vars)
 
const std::vector< const MooseVariableFEBase * > & getUserObjectJacobianVariables (const THREAD_ID tid) const
 
virtual Assemblyassembly (const THREAD_ID tid, const unsigned int sys_num) override
 
virtual const Assemblyassembly (const THREAD_ID tid, const unsigned int sys_num) const override
 
Moose::Kokkos::AssemblykokkosAssembly ()
 
const Moose::Kokkos::AssemblykokkosAssembly () const
 
virtual std::vector< VariableName > getVariableNames ()
 Returns a list of all the variables in the problem (both from the NL and Aux systems.
 
void initialSetup () override
 
void checkDuplicatePostprocessorVariableNames ()
 
void timestepSetup () override
 
void customSetup (const ExecFlagType &exec_type) override
 
void residualSetup () override
 
void jacobianSetup () override
 
virtual void prepare (const Elem *elem, const THREAD_ID tid) override
 
virtual void prepareFace (const Elem *elem, const THREAD_ID tid) override
 
virtual void prepare (const Elem *elem, unsigned int ivar, unsigned int jvar, const std::vector< dof_id_type > &dof_indices, const THREAD_ID tid) override
 
virtual void setCurrentSubdomainID (const Elem *elem, const THREAD_ID tid) override
 
virtual void setNeighborSubdomainID (const Elem *elem, unsigned int side, const THREAD_ID tid) override
 
virtual void setNeighborSubdomainID (const Elem *elem, const THREAD_ID tid)
 
virtual void prepareAssembly (const THREAD_ID tid) override
 
virtual void prepareAssemblyNeighbor (const THREAD_ID tid)
 Begin a fresh neighbor accumulation phase by sizing and zeroing the neighbor blocks.
 
virtual void addGhostedElem (dof_id_type elem_id) override
 Will make sure that all dofs connected to elem_id are ghosted to this processor.
 
virtual void addGhostedBoundary (BoundaryID boundary_id) override
 Will make sure that all necessary elements from boundary_id are ghosted to this processor.
 
virtual void ghostGhostedBoundaries () override
 Causes the boundaries added using addGhostedBoundary to actually be ghosted.
 
virtual void sizeZeroes (unsigned int size, const THREAD_ID tid)
 
virtual bool reinitDirac (const Elem *elem, const THREAD_ID tid) override
 Returns true if the Problem has Dirac kernels it needs to compute on elem.
 
virtual void reinitElem (const Elem *elem, const THREAD_ID tid) override
 
virtual void reinitElemPhys (const Elem *elem, const std::vector< Point > &phys_points_in_elem, const THREAD_ID tid) override
 
void reinitElemFace (const Elem *elem, unsigned int side, BoundaryID, const THREAD_ID tid)
 
virtual void reinitElemFace (const Elem *elem, unsigned int side, const THREAD_ID tid) override
 
virtual void reinitLowerDElem (const Elem *lower_d_elem, const THREAD_ID tid, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr) override
 
virtual void reinitNode (const Node *node, const THREAD_ID tid) override
 
virtual void reinitNodeFace (const Node *node, BoundaryID bnd_id, const THREAD_ID tid) override
 
virtual void reinitNeighbor (const Elem *elem, unsigned int side, const THREAD_ID tid) override
 
virtual void reinitNeighborPhys (const Elem *neighbor, unsigned int neighbor_side, const std::vector< Point > &physical_points, const THREAD_ID tid) override
 
virtual void reinitNeighborPhys (const Elem *neighbor, const std::vector< Point > &physical_points, const THREAD_ID tid) override
 
virtual void reinitElemNeighborAndLowerD (const Elem *elem, unsigned int side, const THREAD_ID tid) override
 
virtual void reinitScalars (const THREAD_ID tid, bool reinit_for_derivative_reordering=false) override
 fills the VariableValue arrays for scalar variables from the solution vector
 
virtual void reinitOffDiagScalars (const THREAD_ID tid) override
 
virtual void getDiracElements (std::set< const Elem * > &elems) override
 Fills "elems" with the elements that should be looped over for Dirac Kernels.
 
virtual void clearDiracInfo () override
 Gets called before Dirac Kernels are asked to add the points they are supposed to be evaluated in.
 
virtual void subdomainSetup (SubdomainID subdomain, const THREAD_ID tid)
 
virtual void neighborSubdomainSetup (SubdomainID subdomain, const THREAD_ID tid)
 
virtual void newAssemblyArray (std::vector< std::shared_ptr< SolverSystem > > &solver_systems)
 
virtual void initNullSpaceVectors (const InputParameters &parameters, std::vector< std::shared_ptr< NonlinearSystemBase > > &nl)
 
virtual void init () override
 
virtual void solve (const unsigned int nl_sys_num)
 
void initKokkos ()
 Construct Kokkos assembly and systems and allocate Kokkos material property storages.
 
virtual void solveLinearSystem (const unsigned int linear_sys_num, const Moose::PetscSupport::PetscOptions *po=nullptr)
 Build and solve a linear system.
 
virtual void setException (const std::string &message)
 Set an exception, which is stored at this point by toggling a member variable in this class, and which must be followed up with by a call to checkExceptionAndStopSolve().
 
virtual bool hasException ()
 Whether or not an exception has occurred.
 
virtual void checkExceptionAndStopSolve (bool print_message=true)
 Check to see if an exception has occurred on any processor and, if possible, force the solve to fail, which will result in the time step being cut.
 
virtual bool solverSystemConverged (const unsigned int solver_sys_num) override
 
virtual unsigned int nNonlinearIterations (const unsigned int nl_sys_num) const override
 
virtual unsigned int nLinearIterations (const unsigned int nl_sys_num) const override
 
virtual Real finalNonlinearResidual (const unsigned int nl_sys_num) const override
 
virtual bool computingPreSMOResidual (const unsigned int nl_sys_num) const override
 Returns true if the problem is in the process of computing it's initial residual.
 
virtual std::string solverTypeString (unsigned int solver_sys_num=0)
 Return solver type as a human readable string.
 
virtual bool startedInitialSetup ()
 Returns true if we are in or beyond the initialSetup stage.
 
virtual void onTimestepBegin () override
 
virtual void onTimestepEnd () override
 
virtual Real & time () const
 
virtual Real & timeOld () const
 
virtual Real & timeOlder () const
 The time two steps back.
 
virtual inttimeStep () const
 
virtual Real & dt () const
 
virtual Real & dtOld () const
 
Real getTimeFromStateArg (const Moose::StateArg &state) const
 Returns the time associated with the requested state.
 
virtual void transient (bool trans)
 
virtual bool isTransient () const override
 
virtual void addTimeIntegrator (const std::string &type, const std::string &name, InputParameters &parameters)
 
virtual void addPredictor (const std::string &type, const std::string &name, InputParameters &parameters)
 
virtual void copySolutionsBackwards ()
 
void skipNextForwardSolutionCopyToOld ()
 Prevents the copy of the solution vector to the old solution vector in each system.
 
virtual void advanceState ()
 Advance all of the state holding vectors / datastructures so that we can move to the next timestep.
 
virtual void restoreSolutions ()
 
virtual void saveOldSolutions ()
 Allocate vectors and save old solutions into them.
 
virtual void restoreOldSolutions ()
 Restore old solutions from the backup vectors and deallocate them.
 
void needSolutionState (unsigned int oldest_needed, Moose::SolutionIterationType iteration_type)
 Declare that we need up to old (1) or older (2) solution states for a given type of iteration.
 
bool hasSolutionState (unsigned int state, Moose::SolutionIterationType iteration_type) const
 Whether we need up to old (1) or older (2) solution states for a given type of iteration.
 
virtual void outputStep (ExecFlagType type)
 Output the current step.
 
virtual void postExecute ()
 Method called at the end of the simulation.
 
void forceOutput ()
 Indicates that the next call to outputStep should be forced.
 
virtual void initPetscOutputAndSomeSolverSettings ()
 Reinitialize PETSc output for proper linear/nonlinear iteration display.
 
Moose::PetscSupport::PetscOptionsgetPetscOptions ()
 Retrieve a writable reference the PETSc options (used by PetscSupport)
 
void logAdd (const std::string &system, const std::string &name, const std::string &type, const InputParameters &params) const
 Output information about the object just added to the problem.
 
virtual void addFunction (const std::string &type, const std::string &name, InputParameters &parameters)
 
virtual bool hasFunction (const std::string &name, const THREAD_ID tid=0)
 
virtual FunctiongetFunction (const std::string &name, const THREAD_ID tid=0)
 
virtual void addKokkosFunction (const std::string &type, const std::string &name, InputParameters &parameters)
 Add a Kokkos function to the problem.
 
virtual bool hasKokkosFunction (const std::string &name) const
 Get whether a Kokkos function exists.
 
virtual Moose::Kokkos::Function getKokkosFunction (const std::string &name)
 Get a Kokkos function in an abstract type.
 
template<typename T >
T & getKokkosFunction (const std::string &name)
 Get a Kokkos function in a concrete type.
 
virtual void addMeshDivision (const std::string &type, const std::string &name, InputParameters &params)
 Add a MeshDivision.
 
MeshDivisiongetMeshDivision (const std::string &name, const THREAD_ID tid=0) const
 Get a MeshDivision.
 
virtual void addConvergence (const std::string &type, const std::string &name, InputParameters &parameters)
 Adds a Convergence object.
 
virtual ConvergencegetConvergence (const std::string &name, const THREAD_ID tid=0) const
 Gets a Convergence object.
 
virtual const std::vector< std::shared_ptr< Convergence > > & getConvergenceObjects (const THREAD_ID tid=0) const
 Gets the Convergence objects.
 
virtual bool hasConvergence (const std::string &name, const THREAD_ID tid=0) const
 Returns true if the problem has a Convergence object of the given name.
 
bool needToAddDefaultNonlinearConvergence () const
 Returns true if the problem needs to add the default nonlinear convergence.
 
bool needToAddDefaultMultiAppFixedPointConvergence () const
 Returns true if the problem needs to add the default fixed point convergence.
 
bool needToAddDefaultSteadyStateConvergence () const
 Returns true if the problem needs to add the default steady-state detection convergence.
 
void setNeedToAddDefaultNonlinearConvergence ()
 Sets _need_to_add_default_nonlinear_convergence to true.
 
void setNeedToAddDefaultMultiAppFixedPointConvergence ()
 Sets _need_to_add_default_multiapp_fixed_point_convergence to true.
 
void setNeedToAddDefaultSteadyStateConvergence ()
 Sets _need_to_add_default_steady_state_convergence to true.
 
bool hasSetMultiAppFixedPointConvergenceName () const
 Returns true if the problem has set the fixed point convergence name.
 
bool hasSetSteadyStateConvergenceName () const
 Returns true if the problem has set the steady-state detection convergence name.
 
virtual void addDefaultNonlinearConvergence (const InputParameters &params)
 Adds the default nonlinear Convergence associated with the problem.
 
virtual bool onlyAllowDefaultNonlinearConvergence () const
 Returns true if an error will result if the user supplies 'nonlinear_convergence'.
 
void addDefaultMultiAppFixedPointConvergence (const InputParameters &params)
 Adds the default fixed point Convergence associated with the problem.
 
void addDefaultSteadyStateConvergence (const InputParameters &params)
 Adds the default steady-state detection Convergence.
 
virtual void addLineSearch (const InputParameters &)
 add a MOOSE line search
 
virtual void lineSearch ()
 execute MOOSE line search
 
LineSearchgetLineSearch () override
 getter for the MOOSE line search
 
virtual void addDistribution (const std::string &type, const std::string &name, InputParameters &parameters)
 The following functions will enable MOOSE to have the capability to import distributions.
 
virtual bool hasDistribution (const std::string &name) const
 
virtual DistributiongetDistribution (const std::string &name)
 
virtual void addSampler (const std::string &type, const std::string &name, InputParameters &parameters)
 The following functions will enable MOOSE to have the capability to import Samplers.
 
virtual SamplergetSampler (const std::string &name, const THREAD_ID tid=0)
 
NonlinearSystemBasegetNonlinearSystemBase (const unsigned int sys_num)
 
const NonlinearSystemBasegetNonlinearSystemBase (const unsigned int sys_num) const
 
void setCurrentNonlinearSystem (const unsigned int nl_sys_num)
 
NonlinearSystemBasecurrentNonlinearSystem ()
 
const NonlinearSystemBasecurrentNonlinearSystem () const
 
virtual const SystemBasesystemBaseNonlinear (const unsigned int sys_num) const override
 Return the nonlinear system object as a base class reference given the system number.
 
virtual SystemBasesystemBaseNonlinear (const unsigned int sys_num) override
 
virtual const SystemBasesystemBaseSolver (const unsigned int sys_num) const override
 Return the solver system object as a base class reference given the system number.
 
virtual SystemBasesystemBaseSolver (const unsigned int sys_num) override
 
virtual const SystemBasesystemBaseAuxiliary () const override
 Return the auxiliary system object as a base class reference.
 
virtual SystemBasesystemBaseAuxiliary () override
 
virtual NonlinearSystemgetNonlinearSystem (const unsigned int sys_num)
 
virtual const SystemBasegetSystemBase (const unsigned int sys_num) const
 Get constant reference to a system in this problem.
 
virtual SystemBasegetSystemBase (const unsigned int sys_num)
 Get non-constant reference to a system in this problem.
 
SystemBasegetSystemBase (const std::string &sys_name)
 Get non-constant reference to a system in this problem.
 
LinearSystemgetLinearSystem (unsigned int sys_num)
 Get non-constant reference to a linear system.
 
const LinearSystemgetLinearSystem (unsigned int sys_num) const
 Get a constant reference to a linear system.
 
SolverSystemgetSolverSystem (unsigned int sys_num)
 Get non-constant reference to a solver system.
 
const SolverSystemgetSolverSystem (unsigned int sys_num) const
 Get a constant reference to a solver system.
 
void setCurrentLinearSystem (unsigned int sys_num)
 Set the current linear system pointer.
 
LinearSystemcurrentLinearSystem ()
 Get a non-constant reference to the current linear system.
 
const LinearSystemcurrentLinearSystem () const
 Get a constant reference to the current linear system.
 
virtual const SystemBasesystemBaseLinear (unsigned int sys_num) const override
 Get a constant base class reference to a linear system.
 
virtual SystemBasesystemBaseLinear (unsigned int sys_num) override
 Get a non-constant base class reference to a linear system.
 
virtual void addVariable (const std::string &var_type, const std::string &var_name, InputParameters &params)
 Canonical method for adding a non-linear variable.
 
virtual void addKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addHDGKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addNodalKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addScalarKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addBoundaryCondition (const std::string &bc_name, const std::string &name, InputParameters &parameters)
 
virtual void addKokkosKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addKokkosNodalKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addKokkosBoundaryCondition (const std::string &bc_name, const std::string &name, InputParameters &parameters)
 
virtual void addKokkosLinearFVKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addKokkosLinearFVBC (const std::string &bc_name, const std::string &name, InputParameters &parameters)
 
virtual void addConstraint (const std::string &c_name, const std::string &name, InputParameters &parameters)
 
virtual void setInputParametersFEProblem (InputParameters &parameters)
 
virtual void addAuxVariable (const std::string &var_type, const std::string &var_name, InputParameters &params)
 Canonical method for adding an auxiliary variable.
 
virtual void addElementalFieldVariable (const std::string &var_type, const std::string &var_name, InputParameters &params)
 Add an elemental field variable for use in the adaptivity system.
 
virtual void addAuxVariable (const std::string &var_name, const libMesh::FEType &type, const std::set< SubdomainID > *const active_subdomains=NULL)
 
virtual void addAuxArrayVariable (const std::string &var_name, const libMesh::FEType &type, unsigned int components, const std::set< SubdomainID > *const active_subdomains=NULL)
 
virtual void addAuxScalarVariable (const std::string &var_name, libMesh::Order order, Real scale_factor=1., const std::set< SubdomainID > *const active_subdomains=NULL)
 
virtual void addAuxKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addAuxScalarKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addKokkosAuxKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
AuxiliarySystemgetAuxiliarySystem ()
 
virtual void addDiracKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addDGKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addFVKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addLinearFVKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addFVBC (const std::string &fv_bc_name, const std::string &name, InputParameters &parameters)
 
virtual void addLinearFVBC (const std::string &fv_bc_name, const std::string &name, InputParameters &parameters)
 
virtual void addFVInterfaceKernel (const std::string &fv_ik_name, const std::string &name, InputParameters &parameters)
 
virtual void addInterfaceKernel (const std::string &kernel_name, const std::string &name, InputParameters &parameters)
 
virtual void addInitialCondition (const std::string &ic_name, const std::string &name, InputParameters &parameters)
 
virtual void addFVInitialCondition (const std::string &ic_name, const std::string &name, InputParameters &parameters)
 Add an initial condition for a finite volume variables.
 
void projectSolution ()
 
unsigned short getCurrentICState ()
 Retrieves the current initial condition state.
 
void projectInitialConditionOnCustomRange (libMesh::ConstElemRange &elem_range, ConstBndNodeRange &bnd_node_range, const std::optional< std::set< VariableName > > &target_vars=std::nullopt)
 Project initial conditions for custom elem_range and bnd_node_range This is needed when elements/boundary nodes are added to a specific subdomain at an intermediate step.
 
void projectFunctionOnCustomRange (ConstElemRange &elem_range, Number(*func)(const Point &, const libMesh::Parameters &, const std::string &, const std::string &), Gradient(*func_grad)(const Point &, const libMesh::Parameters &, const std::string &, const std::string &), const libMesh::Parameters &params, const std::vector< VariableName > &target_vars)
 Project a function onto a range of elements for a given variable.
 
virtual void addMaterial (const std::string &material_name, const std::string &name, InputParameters &parameters)
 
virtual void addMaterialHelper (std::vector< MaterialWarehouse * > warehouse, const std::string &material_name, const std::string &name, InputParameters &parameters)
 
virtual void addInterfaceMaterial (const std::string &material_name, const std::string &name, InputParameters &parameters)
 
virtual void addFunctorMaterial (const std::string &functor_material_name, const std::string &name, InputParameters &parameters)
 
virtual void addKokkosMaterial (const std::string &material_name, const std::string &name, InputParameters &parameters)
 
void prepareMaterials (const std::unordered_set< unsigned int > &consumer_needed_mat_props, const SubdomainID blk_id, const THREAD_ID tid)
 Add the MooseVariables and the material properties that the current materials depend on to the dependency list.
 
void reinitMaterials (SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful=true)
 
void reinitMaterialsFace (SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful=true, const std::deque< MaterialBase * > *reinit_mats=nullptr)
 reinit materials on element faces
 
void reinitMaterialsFaceOnBoundary (const BoundaryID boundary_id, const SubdomainID blk_id, const THREAD_ID tid, const bool swap_stateful=true, const std::deque< MaterialBase * > *const reinit_mats=nullptr)
 reinit materials on element faces on a boundary (internal or external) This specific routine helps us not reinit when don't need to
 
void reinitMaterialsNeighborOnBoundary (const BoundaryID boundary_id, const SubdomainID blk_id, const THREAD_ID tid, const bool swap_stateful=true, const std::deque< MaterialBase * > *const reinit_mats=nullptr)
 reinit materials on neighbor element (usually faces) on a boundary (internal or external) This specific routine helps us not reinit when don't need to
 
void reinitMaterialsNeighbor (SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful=true, const std::deque< MaterialBase * > *reinit_mats=nullptr)
 reinit materials on the neighboring element face
 
void reinitMaterialsBoundary (BoundaryID boundary_id, const THREAD_ID tid, bool swap_stateful=true, const std::deque< MaterialBase * > *reinit_mats=nullptr)
 reinit materials on a boundary
 
void reinitMaterialsInterface (BoundaryID boundary_id, const THREAD_ID tid, bool swap_stateful=true)
 
void prepareKokkosMaterials (const std::unordered_set< unsigned int > &consumer_needed_mat_props)
 
void reinitKokkosMaterials ()
 
virtual void swapBackMaterials (const THREAD_ID tid)
 
virtual void swapBackMaterialsFace (const THREAD_ID tid)
 
virtual void swapBackMaterialsNeighbor (const THREAD_ID tid)
 
void setActiveMaterialProperties (const std::unordered_set< unsigned int > &mat_prop_ids, const THREAD_ID tid)
 Record and set the material properties required by the current computing thread.
 
bool hasActiveMaterialProperties (const THREAD_ID tid) const
 Method to check whether or not a list of active material roperties has been set.
 
void clearActiveMaterialProperties (const THREAD_ID tid)
 Clear the active material properties.
 
template<typename T >
std::vector< std::shared_ptr< T > > addObject (const std::string &type, const std::string &name, InputParameters &parameters, const bool threaded=true, const std::string &var_param_name="variable")
 Method for creating and adding an object to the warehouse.
 
virtual void addPostprocessor (const std::string &pp_name, const std::string &name, InputParameters &parameters)
 
virtual void addVectorPostprocessor (const std::string &pp_name, const std::string &name, InputParameters &parameters)
 
virtual void addReporter (const std::string &type, const std::string &name, InputParameters &parameters)
 Add a Reporter object to the simulation.
 
virtual void addKokkosPostprocessor (const std::string &pp_name, const std::string &name, InputParameters &parameters)
 
virtual void addKokkosVectorPostprocessor (const std::string &pp_name, const std::string &name, InputParameters &parameters)
 
virtual void addKokkosReporter (const std::string &type, const std::string &name, InputParameters &parameters)
 
const ReporterDatagetReporterData () const
 Provides const access the ReporterData object.
 
ReporterDatagetReporterData (ReporterData::WriteKey)
 Provides non-const access the ReporterData object that is used to store reporter values.
 
virtual std::vector< std::shared_ptr< UserObject > > addUserObject (const std::string &user_object_name, const std::string &name, InputParameters &parameters)
 
template<class T >
T & getUserObject (const std::string &name, unsigned int tid=0) const
 Get the user object by its name.
 
const UserObjectgetUserObjectBase (const std::string &name, const THREAD_ID tid=0) const
 Get the user object by its name.
 
bool hasUserObject (const std::string &name) const
 Check if there if a user object of given name.
 
virtual void addKokkosUserObject (const std::string &user_object_name, const std::string &name, InputParameters &parameters)
 
template<class T >
const T & getKokkosUserObject (const std::string &name) const
 Get the Kokkos user object by its name.
 
bool hasKokkosUserObject (const std::string &name) const
 Check if there if a Kokkos user object of given name.
 
void checkUserObjectNameCollision (const std::string &name, const std::string &type) const
 Check for name collision between different user objects.
 
const PositionsgetPositionsObject (const std::string &name) const
 Get the Positions object by its name.
 
virtual void addFVInterpolationMethod (const std::string &method_type, const std::string &name, InputParameters &parameters)
 Add an FV interpolation method.
 
virtual void addFVGradientMethod (const std::string &method_type, const std::string &name, InputParameters &parameters)
 Add an FV gradient method.
 
const FVGradientMethodgetFVGradientMethod (const GradientMethodName &name, const THREAD_ID tid=0) const
 Retrieve an FV gradient method.
 
bool hasFVGradientMethod (const GradientMethodName &name) const
 Check if an FV gradient method with a given name exists.
 
const FVInterpolationMethodgetFVInterpolationMethod (const InterpolationMethodName &name, const THREAD_ID tid=0) const
 Retrieve an FV interpolation method.
 
const FVFaceInterpolationMethodgetFVFaceInterpolationMethod (const InterpolationMethodName &name, const THREAD_ID tid=0) const
 Retrieve a scalar face interpolation method.
 
const FVAdvectedInterpolationMethodgetFVAdvectedInterpolationMethod (const InterpolationMethodName &name, const THREAD_ID tid=0) const
 Retrieve an advected interpolation method.
 
bool hasFVInterpolationMethod (const InterpolationMethodName &name) const
 Check if an FV interpolation method with a given name exists.
 
bool hasPostprocessorValueByName (const PostprocessorName &name) const
 Whether or not a Postprocessor value exists by a given name.
 
const PostprocessorgetPostprocessorObjectByName (const PostprocessorName &object_name, const THREAD_ID tid=0) const
 Return the Postprocessor object registered under the supplied object name.
 
const PostprocessorValuegetPostprocessorValueByName (const PostprocessorName &name, std::size_t t_index=0) const
 Get a read-only reference to the value associated with a Postprocessor that exists.
 
void setPostprocessorValueByName (const PostprocessorName &name, const PostprocessorValue &value, std::size_t t_index=0)
 Set the value of a PostprocessorValue.
 
bool hasPostprocessor (const std::string &name) const
 Deprecated.
 
const VectorPostprocessorValuegetVectorPostprocessorValueByName (const std::string &object_name, const std::string &vector_name, std::size_t t_index=0) const
 Get a read-only reference to the vector value associated with the VectorPostprocessor.
 
void setVectorPostprocessorValueByName (const std::string &object_name, const std::string &vector_name, const VectorPostprocessorValue &value, std::size_t t_index=0)
 Set the value of a VectorPostprocessor vector.
 
const VectorPostprocessorgetVectorPostprocessorObjectByName (const std::string &object_name, const THREAD_ID tid=0) const
 Return the VPP object given the name.
 
virtual void addDamper (const std::string &damper_name, const std::string &name, InputParameters &parameters)
 
void setupDampers ()
 
bool hasDampers ()
 Whether or not this system has dampers.
 
virtual void addIndicator (const std::string &indicator_name, const std::string &name, InputParameters &parameters)
 
virtual void addMarker (const std::string &marker_name, const std::string &name, InputParameters &parameters)
 
virtual void addMultiApp (const std::string &multi_app_name, const std::string &name, InputParameters &parameters)
 Add a MultiApp to the problem.
 
std::shared_ptr< MultiAppgetMultiApp (const std::string &multi_app_name) const
 Get a MultiApp object by name.
 
std::vector< std::shared_ptr< Transfer > > getTransfers (ExecFlagType type, Transfer::DIRECTION direction) const
 Get Transfers by ExecFlagType and direction.
 
std::vector< std::shared_ptr< Transfer > > getTransfers (Transfer::DIRECTION direction) const
 
const ExecuteMooseObjectWarehouse< Transfer > & getMultiAppTransferWarehouse (Transfer::DIRECTION direction) const
 Return the complete warehouse for MultiAppTransfer object for the given direction.
 
void execMultiAppTransfers (ExecFlagType type, Transfer::DIRECTION direction, const MultiAppName &source_app="")
 Execute MultiAppTransfers associated with execution flag and direction.
 
bool execMultiApps (ExecFlagType type, bool auto_advance=true)
 Execute the MultiApps associated with the ExecFlagType.
 
unsigned int numConcurrentMultiApps () const
 
void partitionConcurrentMultiApps ()
 Assign each multiapp that shares an 'execution_order_group' with others a disjoint subset of the ranks so that they can be solved concurrently (at most one child app per rank at a time).
 
void finalizeMultiApps ()
 
void incrementMultiAppTStep (ExecFlagType type)
 Advance the MultiApps t_step (incrementStepOrReject) associated with the ExecFlagType.
 
void advanceMultiApps (ExecFlagType type)
 Deprecated method; use finishMultiAppStep and/or incrementMultiAppTStep depending on your purpose.
 
void finishMultiAppStep (ExecFlagType type, bool recurse_through_multiapp_levels=false)
 Finish the MultiApp time step (endStep, postStep) associated with the ExecFlagType.
 
void backupMultiApps (ExecFlagType type)
 Backup the MultiApps associated with the ExecFlagType.
 
void restoreMultiApps (ExecFlagType type, bool force=false)
 Restore the MultiApps associated with the ExecFlagType.
 
Real computeMultiAppsDT (ExecFlagType type)
 Find the smallest timestep over all MultiApps.
 
virtual void addTransfer (const std::string &transfer_name, const std::string &name, InputParameters &parameters)
 Add a Transfer to the problem.
 
Real computeResidualL2Norm (NonlinearSystemBase &sys)
 Computes the residual of a nonlinear system using whatever is sitting in the current solution vector then returns the L2 norm.
 
Real computeResidualL2Norm (LinearSystem &sys)
 Computes the residual of a linear system using whatever is sitting in the current solution vector then returns the L2 norm.
 
virtual Real computeResidualL2Norm ()
 Computes the residual using whatever is sitting in the current solution vector then returns the L2 norm.
 
virtual void computeResidualSys (libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual)
 This function is called by Libmesh to form a residual.
 
void computeResidual (libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual)
 This function is called by Libmesh to form a residual.
 
virtual void computeResidual (const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, const unsigned int nl_sys_num)
 Form a residual with default tags (nontime, time, residual).
 
void computeResidualAndJacobian (const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, libMesh::SparseMatrix< libMesh::Number > &jacobian)
 Form a residual and Jacobian with default tags.
 
virtual void computeResidualTag (const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, TagID tag)
 Form a residual vector for a given tag.
 
virtual void computeResidualType (const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, TagID tag)
 Form a residual vector for a given tag and "residual" tag.
 
virtual void computeResidualInternal (const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, const std::set< TagID > &tags)
 Form a residual vector for a set of tags.
 
virtual void computeResidualTags (const std::set< TagID > &tags)
 Form multiple residual vectors and each is associated with one tag.
 
virtual void computeJacobianSys (libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian)
 Form a Jacobian matrix.
 
virtual void computeJacobian (const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian, const unsigned int nl_sys_num)
 Form a Jacobian matrix with the default tag (system).
 
virtual void computeJacobianTag (const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian, TagID tag)
 Form a Jacobian matrix for a given tag.
 
virtual void computeJacobianInternal (const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian, const std::set< TagID > &tags)
 Form a Jacobian matrix for multiple tags.
 
virtual void computeJacobianTags (const std::set< TagID > &tags)
 Form multiple matrices, and each is associated with a tag.
 
virtual void computeJacobianBlocks (std::vector< JacobianBlock * > &blocks, const unsigned int nl_sys_num)
 Computes several Jacobian blocks simultaneously, summing their contributions into smaller preconditioning matrices.
 
virtual void computeJacobianBlock (libMesh::SparseMatrix< libMesh::Number > &jacobian, libMesh::System &precond_system, unsigned int ivar, unsigned int jvar)
 Really not a good idea to use this.
 
virtual void computeLinearSystemSys (libMesh::LinearImplicitSystem &sys, libMesh::SparseMatrix< libMesh::Number > &system_matrix, NumericVector< libMesh::Number > &rhs, const bool compute_gradients=true)
 Assemble both the right hand side and the system matrix of a given linear system.
 
void computeLinearSystemTags (const NumericVector< libMesh::Number > &soln, const std::set< TagID > &vector_tags, const std::set< TagID > &matrix_tags, const bool compute_gradients=true)
 Assemble the current linear system given a set of vector and matrix tags.
 
virtual Real computeDamping (const NumericVector< libMesh::Number > &soln, const NumericVector< libMesh::Number > &update)
 
virtual bool shouldUpdateSolution ()
 Check to see whether the problem should update the solution.
 
virtual bool updateSolution (NumericVector< libMesh::Number > &vec_solution, NumericVector< libMesh::Number > &ghosted_solution)
 Update the solution.
 
virtual void predictorCleanup (NumericVector< libMesh::Number > &ghosted_solution)
 Perform cleanup tasks after application of predictor to solution vector.
 
virtual void computeBounds (libMesh::NonlinearImplicitSystem &sys, NumericVector< libMesh::Number > &lower, NumericVector< libMesh::Number > &upper)
 
virtual void computeNearNullSpace (libMesh::NonlinearImplicitSystem &sys, std::vector< NumericVector< libMesh::Number > * > &sp)
 
virtual void computeNullSpace (libMesh::NonlinearImplicitSystem &sys, std::vector< NumericVector< libMesh::Number > * > &sp)
 
virtual void computeTransposeNullSpace (libMesh::NonlinearImplicitSystem &sys, std::vector< NumericVector< libMesh::Number > * > &sp)
 
virtual void computePostCheck (libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &old_soln, NumericVector< libMesh::Number > &search_direction, NumericVector< libMesh::Number > &new_soln, bool &changed_search_direction, bool &changed_new_soln)
 
virtual void computeIndicatorsAndMarkers ()
 
virtual void computeIndicators ()
 
virtual void computeMarkers ()
 
virtual void addResidual (const THREAD_ID tid) override
 
virtual void addResidualNeighbor (const THREAD_ID tid) override
 
virtual void addResidualLower (const THREAD_ID tid) override
 
virtual void addResidualScalar (const THREAD_ID tid=0)
 
virtual void cacheResidual (const THREAD_ID tid) override
 
virtual void cacheResidualNeighbor (const THREAD_ID tid) override
 
virtual void addCachedResidual (const THREAD_ID tid) override
 
virtual void addCachedResidualDirectly (NumericVector< libMesh::Number > &residual, const THREAD_ID tid)
 Allows for all the residual contributions that are currently cached to be added directly into the vector passed in.
 
virtual void setResidual (NumericVector< libMesh::Number > &residual, const THREAD_ID tid) override
 
virtual void setResidualNeighbor (NumericVector< libMesh::Number > &residual, const THREAD_ID tid) override
 
virtual void addJacobian (const THREAD_ID tid) override
 
virtual void addJacobianNeighbor (const THREAD_ID tid) override
 
virtual void addJacobianNeighborLowerD (const THREAD_ID tid) override
 
virtual void addJacobianLowerD (const THREAD_ID tid) override
 
virtual void addJacobianBlockTags (libMesh::SparseMatrix< libMesh::Number > &jacobian, unsigned int ivar, unsigned int jvar, const DofMap &dof_map, std::vector< dof_id_type > &dof_indices, const std::set< TagID > &tags, const THREAD_ID tid)
 
virtual void addJacobianNeighbor (libMesh::SparseMatrix< libMesh::Number > &jacobian, unsigned int ivar, unsigned int jvar, const DofMap &dof_map, std::vector< dof_id_type > &dof_indices, std::vector< dof_id_type > &neighbor_dof_indices, const std::set< TagID > &tags, const THREAD_ID tid) override
 
virtual void addJacobianScalar (const THREAD_ID tid=0)
 
virtual void addJacobianOffDiagScalar (unsigned int ivar, const THREAD_ID tid=0)
 
virtual void cacheJacobian (const THREAD_ID tid) override
 
virtual void cacheJacobianNeighbor (const THREAD_ID tid) override
 
virtual void addCachedJacobian (const THREAD_ID tid) override
 
virtual void prepareShapes (unsigned int var, const THREAD_ID tid) override
 
virtual void prepareFaceShapes (unsigned int var, const THREAD_ID tid) override
 
virtual void prepareNeighborShapes (unsigned int var, const THREAD_ID tid) override
 
virtual void addDisplacedProblem (std::shared_ptr< DisplacedProblem > displaced_problem)
 
virtual std::shared_ptr< const DisplacedProblemgetDisplacedProblem () const
 
virtual std::shared_ptr< DisplacedProblemgetDisplacedProblem ()
 
virtual void updateGeomSearch (GeometricSearchData::GeometricSearchType type=GeometricSearchData::ALL) override
 Update this object's geometric search data as well as the displaced problem's if it exists.
 
virtual void updateMortarMesh ()
 
void createMortarInterface (const std::pair< BoundaryID, BoundaryID > &primary_secondary_boundary_pair, const std::pair< SubdomainID, SubdomainID > &primary_secondary_subdomain_pair, bool on_displaced, bool periodic, const bool debug, const bool correct_edge_dropping, const Real minimum_projection_angle, const Mortar3DSubpatchPlane mortar_3d_subpatch_plane, const MooseEnum &triangulation, const bool triangulate_triangles, const Mortar3DQuadraturePointMapping mortar_3d_qp_mapping=Mortar3DQuadraturePointMapping::NORMAL_PROJECTION)
 
const std::unordered_map< std::pair< BoundaryID, BoundaryID >, MortarInterfaceConfig > & getMortarInterfaces (bool on_displaced) const
 
virtual void possiblyRebuildGeomSearchPatches ()
 
virtual GeometricSearchDatageomSearchData () override
 
void setRestartFile (const std::string &file_name)
 Communicate to the Resurector the name of the restart filer.
 
const MaterialPropertyRegistrygetMaterialPropertyRegistry () const
 
const InitialConditionWarehousegetInitialConditionWarehouse () const
 Return InitialCondition storage.
 
const FVInitialConditionWarehousegetFVInitialConditionWarehouse () const
 Return FVInitialCondition storage.
 
SolverParamssolverParams (unsigned int solver_sys_num=0)
 Get the solver parameters.
 
const SolverParamssolverParams (unsigned int solver_sys_num=0) const
 const version
 
Adaptivityadaptivity ()
 
virtual void initialAdaptMesh ()
 
virtual bool adaptMesh ()
 
unsigned int getNumCyclesCompleted ()
 
bool hasInitialAdaptivity () const
 Return a Boolean indicating whether initial AMR is turned on.
 
bool hasInitialAdaptivity () const
 Return a Boolean indicating whether initial AMR is turned on.
 
void initXFEM (std::shared_ptr< XFEMInterface > xfem)
 Create XFEM controller object.
 
std::shared_ptr< XFEMInterfacegetXFEM ()
 Get a pointer to the XFEM controller object.
 
bool haveXFEM ()
 Find out whether the current analysis is using XFEM.
 
virtual bool updateMeshXFEM ()
 Update the mesh due to changing XFEM cuts.
 
virtual bool allowMeshContractionAfterMeshChanged () const
 Whether meshChanged() should allow the mesh to be contracted (deletes children of coarsened elements and renumbers nodes and elements).
 
virtual void meshChanged (bool intermediate_change, bool contract_mesh, bool clean_refinement_flags)
 Update data after a mesh change.
 
void notifyWhenMeshChanges (MeshChangedInterface *mci)
 Register an object that derives from MeshChangedInterface to be notified when the mesh changes.
 
void notifyWhenMeshDisplaces (MeshDisplacedInterface *mdi)
 Register an object that derives from MeshDisplacedInterface to be notified when the displaced mesh gets updated.
 
void initElementStatefulProps (const libMesh::ConstElemRange &elem_range, const bool threaded)
 Initialize stateful properties for elements in a specific elem_range This is needed when elements/boundary nodes are added to a specific subdomain at an intermediate step.
 
void initKokkosStatefulProps ()
 
virtual void checkProblemIntegrity ()
 Method called to perform a series of sanity checks before a simulation is run.
 
void registerRandomInterface (RandomInterface &random_interface, const std::string &name)
 
void setConstJacobian (bool state)
 Set flag that Jacobian is constant (for optimization purposes)
 
void setKernelCoverageCheck (CoverageCheckMode mode)
 Set flag to indicate whether kernel coverage checks should be performed.
 
void setKernelCoverageCheck (bool flag)
 Set flag to indicate whether kernel coverage checks should be performed.
 
void setMaterialCoverageCheck (CoverageCheckMode mode)
 Set flag to indicate whether material coverage checks should be performed.
 
void setMaterialCoverageCheck (bool flag)
 Set flag to indicate whether material coverage checks should be performed.
 
void setParallelBarrierMessaging (bool flag)
 Toggle parallel barrier messaging (defaults to on).
 
void setVerboseProblem (bool verbose)
 Make the problem be verbose.
 
bool verboseMultiApps () const
 Whether or not to use verbose printing for MultiApps.
 
void parentOutputPositionChanged ()
 Calls parentOutputPositionChanged() on all sub apps.
 
unsigned int subspaceDim (const std::string &prefix) const
 Dimension of the subspace spanned by vectors with a given prefix.
 
const MooseObjectWarehouse< Function > & getFunctionWarehouse ()
 
const MaterialWarehousegetMaterialWarehouse () const
 
const MaterialWarehousegetRegularMaterialsWarehouse () const
 
const MaterialWarehousegetDiscreteMaterialWarehouse () const
 
const MaterialWarehousegetInterfaceMaterialsWarehouse () const
 
const MaterialWarehousegetKokkosMaterialsWarehouse () const
 
std::shared_ptr< MaterialBasegetMaterial (std::string name, Moose::MaterialDataType type, const THREAD_ID tid=0, bool no_warn=false)
 Return a pointer to a MaterialBase object.
 
MaterialDatagetMaterialData (Moose::MaterialDataType type, const THREAD_ID tid=0, const MooseObject *object=nullptr) const
 
MaterialDatagetKokkosMaterialData (Moose::MaterialDataType type, const MooseObject *object=nullptr) const
 
const std::set< const MooseObject * > & getMaterialPropertyStorageConsumers (Moose::MaterialDataType type) const
 
const std::set< const MooseObject * > & getKokkosMaterialPropertyStorageConsumers (Moose::MaterialDataType type) const
 
bool restoreOriginalNonzeroPattern () const
 
bool errorOnJacobianNonzeroReallocation () const
 Will return True if the user wants to get an error when a nonzero is reallocated in the Jacobian by PETSc.
 
void setErrorOnJacobianNonzeroReallocation (bool state)
 
bool preserveMatrixSparsityPattern () const
 Will return True if the executioner in use requires preserving the sparsity pattern of the matrices being formed during the solve.
 
void setPreserveMatrixSparsityPattern (bool preserve)
 Set whether the sparsity pattern of the matrices being formed during the solve (usually the Jacobian) should be preserved.
 
bool ignoreZerosInJacobian () const
 Will return true if zeros in the Jacobian are to be dropped from the sparsity pattern.
 
void setIgnoreZerosInJacobian (bool state)
 Set whether the zeros in the Jacobian should be dropped from the sparsity pattern.
 
bool acceptInvalidSolution () const
 Whether or not to accept the solution based on its invalidity.
 
bool allowInvalidSolution () const
 Whether to accept / allow an invalid solution.
 
bool showInvalidSolutionConsole () const
 Whether or not to print out the invalid solutions summary table in console.
 
bool immediatelyPrintInvalidSolution () const
 Whether or not the solution invalid warnings are printed out immediately.
 
bool hasTimeIntegrator () const
 Returns whether or not this Problem has a TimeIntegrator.
 
virtual void execute (const ExecFlagType &exec_type)
 Convenience function for performing execution of MOOSE systems.
 
virtual void executeAllObjects (const ExecFlagType &exec_type)
 
virtual ExecutorgetExecutor (const std::string &name)
 
virtual void computeUserObjects (const ExecFlagType &type, const Moose::AuxGroup &group)
 Call compute methods on UserObjects.
 
virtual void computeUserObjectByName (const ExecFlagType &type, const Moose::AuxGroup &group, const std::string &name)
 Compute an user object with the given name.
 
void needsPreviousNewtonIteration (bool state)
 Set a flag that indicated that user required values for the previous Newton iterate.
 
bool needsPreviousNewtonIteration () const
 Check to see whether we need to compute the variable values of the previous Newton iterate.
 
void needsPreviousMultiAppFixedPointIterationSolution (bool needed, const unsigned int solver_sys_num)
 Set a flag that indicated that user required values for the previous multiapp fixed point iterate for the solver systems (not auxiliary)
 
bool needsPreviousMultiAppFixedPointIterationSolution (const unsigned int solver_sys_num) const
 Check to see whether we need to compute the variable values of the previous multiapp fixed point iteration for the solver systems (not auxiliary)
 
void needsPreviousMultiAppFixedPointIterationAuxiliary (bool state)
 Set a flag that indicated that user required values for the previous multiapp fixed point iterate for the auxiliary system.
 
bool needsPreviousMultiAppFixedPointIterationAuxiliary () const
 Check to see whether we need to compute the variable values of the previous multiapp fixed point iteration for the auxiliary system.
 
void needsPreviousMultiSystemFixedPointIterationSolution (bool needed, const unsigned int solver_sys_num)
 Set a flag that indicates that user requires values for the previous multi-system fixed point iterate for the solver systems (not auxiliary)
 
bool needsPreviousMultiSystemFixedPointIterationSolution (const unsigned int solver_sys_num) const
 Check to see whether we need to compute the variable values of the previous multi-system fixed point iteration for the solver systems (not auxiliary)
 
void needsPreviousMultiSystemFixedPointIterationAuxiliary (bool state)
 Set a flag that indicates that user requires values for the previous multi-system fixed point iterate for the auxiliary system.
 
bool needsPreviousMultiSystemFixedPointIterationAuxiliary () const
 Check to see whether we need to compute the variable values of the previous multi-system fixed point iteration for the auxiliary system.
 
ExecuteMooseObjectWarehouse< Control > & getControlWarehouse ()
 Reference to the control logic warehouse.
 
void executeControls (const ExecFlagType &exec_type)
 Performs setup and execute calls for Control objects.
 
void executeSamplers (const ExecFlagType &exec_type)
 Performs setup and execute calls for Sampler objects.
 
virtual void updateActiveObjects ()
 Update the active objects in the warehouses.
 
void reportMooseObjectDependency (MooseObject *a, MooseObject *b)
 Register a MOOSE object dependency so we can either order operations properly or report when we cannot.
 
ExecuteMooseObjectWarehouse< MultiApp > & getMultiAppWarehouse ()
 
bool hasJacobian () const
 Returns _has_jacobian.
 
bool constJacobian () const
 Returns _const_jacobian (whether a MOOSE object has specified that the Jacobian is the same as the previous time it was computed)
 
void addOutput (const std::string &, const std::string &, InputParameters &)
 Adds an Output object.
 
TheWarehousetheWarehouse () const
 
void setSNESMFReuseBase (bool reuse, bool set_by_user)
 If or not to reuse the base vector for matrix-free calculation.
 
bool useSNESMFReuseBase ()
 Return a flag that indicates if we are reusing the vector base.
 
void skipExceptionCheck (bool skip_exception_check)
 Set a flag that indicates if we want to skip exception and stop solve.
 
bool isSNESMFReuseBaseSetbyUser ()
 Return a flag to indicate if _snesmf_reuse_base is set by users.
 
bool & petscOptionsInserted ()
 If PETSc options are already inserted.
 
PetscOptions & petscOptionsDatabase ()
 
virtual void setUDotRequested (const bool u_dot_requested)
 Set boolean flag to true to store solution time derivative.
 
virtual void setUDotDotRequested (const bool u_dotdot_requested)
 Set boolean flag to true to store solution second time derivative.
 
virtual void setUDotOldRequested (const bool u_dot_old_requested)
 Set boolean flag to true to store old solution time derivative.
 
virtual void setUDotDotOldRequested (const bool u_dotdot_old_requested)
 Set boolean flag to true to store old solution second time derivative.
 
virtual bool uDotRequested ()
 Get boolean flag to check whether solution time derivative needs to be stored.
 
virtual bool uDotDotRequested ()
 Get boolean flag to check whether solution second time derivative needs to be stored.
 
virtual bool uDotOldRequested ()
 Get boolean flag to check whether old solution time derivative needs to be stored.
 
virtual bool uDotDotOldRequested ()
 Get boolean flag to check whether old solution second time derivative needs to be stored.
 
void haveADObjects (bool have_ad_objects) override
 Method for setting whether we have any ad objects.
 
bool shouldSolve () const
 
const MortarInterfaceWarehousemortarData () const
 Returns the mortar data object.
 
MortarInterfaceWarehousemortarData ()
 
virtual bool hasNeighborCoupling () const
 Whether the simulation has neighbor coupling.
 
virtual bool hasMortarCoupling () const
 Whether the simulation has mortar coupling.
 
void computingNonlinearResid (bool computing_nonlinear_residual) final
 Set whether or not the problem is in the process of computing the nonlinear residual.
 
void setCurrentlyComputingResidual (bool currently_computing_residual) final
 Set whether or not the problem is in the process of computing the residual.
 
void numGridSteps (unsigned int num_grid_steps)
 Set the number of steps in a grid sequences.
 
void uniformRefine ()
 uniformly refine the problem mesh(es).
 
void automaticScaling (bool automatic_scaling) override
 Automatic scaling setter.
 
virtual void reinitElemFaceRef (const Elem *elem, unsigned int side, Real tolerance, const std::vector< Point > *const pts, const std::vector< Real > *const weights=nullptr, const THREAD_ID tid=0) override
 reinitialize FE objects on a given element on a given side at a given set of reference points and then compute variable data.
 
virtual void reinitNeighborFaceRef (const Elem *neighbor_elem, unsigned int neighbor_side, Real tolerance, const std::vector< Point > *const pts, const std::vector< Real > *const weights=nullptr, const THREAD_ID tid=0) override
 reinitialize FE objects on a given neighbor element on a given side at a given set of reference points and then compute variable data.
 
bool fvBCsIntegrityCheck () const
 
bool sideUOInterfaceMatPropIntegrityCheck () const
 
void fvBCsIntegrityCheck (bool fv_bcs_integrity_check)
 
void getFVMatsAndDependencies (SubdomainID block_id, std::vector< std::shared_ptr< MaterialBase > > &face_materials, std::vector< std::shared_ptr< MaterialBase > > &neighbor_materials, std::set< MooseVariableFieldBase * > &variables, const THREAD_ID tid)
 Get the materials and variables potentially needed for FV.
 
void resizeMaterialData (Moose::MaterialDataType data_type, unsigned int nqp, const THREAD_ID tid)
 Resize material data.
 
bool haveDisplaced () const override final
 Whether we have a displaced problem in our simulation.
 
bool hasLinearConvergenceObjects () const
 Whether we have linear convergence objects.
 
void setNonlinearConvergenceNames (const std::vector< ConvergenceName > &convergence_names)
 Sets the nonlinear convergence object name(s) if there is one.
 
void setLinearConvergenceNames (const std::vector< ConvergenceName > &convergence_names)
 Sets the linear convergence object name(s) if there is one.
 
void setMultiAppFixedPointConvergenceName (const ConvergenceName &convergence_name)
 Sets the MultiApp fixed point convergence object name if there is one.
 
void setSteadyStateConvergenceName (const ConvergenceName &convergence_name)
 Sets the steady-state detection convergence object name if there is one.
 
const std::vector< ConvergenceName > & getNonlinearConvergenceNames () const
 Gets the nonlinear system convergence object name(s).
 
const std::vector< ConvergenceName > & getLinearConvergenceNames () const
 Gets the linear convergence object name(s).
 
const ConvergenceName & getMultiAppFixedPointConvergenceName () const
 Gets the MultiApp fixed point convergence object name.
 
const ConvergenceName & getSteadyStateConvergenceName () const
 Gets the steady-state detection convergence object name.
 
void computingScalingJacobian (bool computing_scaling_jacobian)
 Setter for whether we're computing the scaling jacobian.
 
bool computingScalingJacobian () const override final
 Getter for whether we're computing the scaling jacobian.
 
void computingScalingResidual (bool computing_scaling_residual)
 Setter for whether we're computing the scaling residual.
 
bool computingScalingResidual () const override final
 
MooseAppCoordTransformcoordTransform ()
 
virtual std::size_t numNonlinearSystems () const override
 
virtual std::size_t numLinearSystems () const override
 
virtual std::size_t numSolverSystems () const override
 
bool isSolverSystemNonlinear (const unsigned int sys_num)
 Check if the solver system is nonlinear.
 
virtual unsigned int currentNlSysNum () const override
 
virtual unsigned int currentLinearSysNum () const override
 
virtual unsigned int nlSysNum (const NonlinearSystemName &nl_sys_name) const override
 
unsigned int linearSysNum (const LinearSystemName &linear_sys_name) const override
 
unsigned int solverSysNum (const SolverSystemName &solver_sys_name) const override
 
unsigned int systemNumForVariable (const VariableName &variable_name) const
 
bool getFailNextNonlinearConvergenceCheck () const
 Whether it will skip further residual evaluations and fail the next nonlinear convergence check(s)
 
bool getFailNextSystemConvergenceCheck () const
 Whether it will fail the next system convergence check(s), triggering failed step behavior.
 
void setFailNextNonlinearConvergenceCheck ()
 Skip further residual evaluations and fail the next nonlinear convergence check(s)
 
void setFailNextSystemConvergenceCheck ()
 Tell the problem that the system(s) cannot be considered converged next time convergence is checked.
 
void resetFailNextNonlinearConvergenceCheck ()
 Tell the problem that the nonlinear convergence check(s) may proceed as normal.
 
void resetFailNextSystemConvergenceCheck ()
 Tell the problem that the system convergence check(s) may proceed as normal.
 
void setExecutionPrinting (const ExecFlagEnum &print_exec)
 
bool shouldPrintExecution (const THREAD_ID tid) const
 Check whether the problem should output execution orders at this time.
 
void reinitMortarUserObjects (BoundaryID primary_boundary_id, BoundaryID secondary_boundary_id, bool displaced)
 Call reinit on mortar user objects with matching primary boundary ID, secondary boundary ID, and displacement characteristics.
 
virtual const std::vector< VectorTag > & currentResidualVectorTags () const override
 Return the residual vector tags we are currently computing.
 
void setCurrentResidualVectorTags (const std::set< TagID > &vector_tags)
 Set the current residual vector tag data structure based on the passed in tag IDs.
 
void clearCurrentResidualVectorTags ()
 Clear the current residual vector tag data structure.
 
void clearCurrentJacobianMatrixTags ()
 Clear the current Jacobian matrix tag data structure ... if someone creates it.
 
virtual void needFV () override
 marks this problem as including/needing finite volume functionality.
 
virtual bool haveFV () const override
 returns true if this problem includes/needs finite volume functionality.
 
virtual bool hasNonlocalCoupling () const override
 Whether the simulation has active nonlocal coupling which should be accounted for in the Jacobian.
 
bool identifyVariableGroupsInNL () const
 Whether to identify variable groups in nonlinear systems.
 
virtual void setCurrentLowerDElem (const Elem *const lower_d_elem, const THREAD_ID tid) override
 Set the current lower dimensional element.
 
virtual void setCurrentBoundaryID (BoundaryID bid, const THREAD_ID tid) override
 sets the current boundary ID in assembly
 
const std::vector< NonlinearSystemName > & getNonlinearSystemNames () const
 
const std::vector< LinearSystemName > & getLinearSystemNames () const
 
const std::vector< SolverSystemName > & getSolverSystemNames () const
 
virtual const libMesh::CouplingMatrixnonlocalCouplingMatrix (const unsigned i) const override
 
virtual bool checkNonlocalCouplingRequirement () const override
 
virtual Moose::FEBackend feBackend () const
 
void createTagMatrices (CreateTaggedMatrixKey)
 
bool useHashTableMatrixAssembly () const
 
bool hasKokkosObjects () const
 
bool hasKokkosResidualObjects () const
 
void addKokkosMeshInitializationHook (std::function< void()> function)
 Add a function hook that needs to be called after Kokkos mesh initialization.
 
virtual const MooseVariableFieldBasegetVariable (const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type=Moose::VarKindType::VAR_ANY, Moose::VarFieldType expected_var_field_type=Moose::VarFieldType::VAR_FIELD_ANY) const=0
 Returns the variable reference for requested variable which must be of the expected_var_type (Nonlinear vs.
 
virtual MooseVariableFieldBasegetVariable (const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type=Moose::VarKindType::VAR_ANY, Moose::VarFieldType expected_var_field_type=Moose::VarFieldType::VAR_FIELD_ANY)
 
virtual void haveADObjects (bool have_ad_objects)
 Method for setting whether we have any ad objects.
 
bool haveADObjects () const
 Method for reading wehther we have any ad objects.
 
bool computingNonlinearResid () const
 Returns true if the problem is in the process of computing the nonlinear residual.
 
virtual void computingNonlinearResid (const bool computing_nonlinear_residual)
 Set whether or not the problem is in the process of computing the nonlinear residual.
 
const bool & currentlyComputingResidual () const
 Returns true if the problem is in the process of computing the residual.
 
virtual void automaticScaling (bool automatic_scaling)
 Automatic scaling setter.
 
bool automaticScaling () const
 Automatic scaling getter.
 
virtual bool nlConverged (const unsigned int nl_sys_num)
 
virtual bool converged (const unsigned int sys_num)
 Eventually we want to convert this virtual over to taking a solver system number argument.
 
bool defaultGhosting ()
 Whether or not the user has requested default ghosting ot be on.
 
virtual TagID addVectorTag (const TagName &tag_name, const Moose::VectorTagType type=Moose::VECTOR_TAG_RESIDUAL)
 Create a Tag.
 
void addNotZeroedVectorTag (const TagID tag)
 Adds a vector tag to the list of vectors that will not be zeroed when other tagged vectors are.
 
bool vectorTagNotZeroed (const TagID tag) const
 Checks if a vector tag is in the list of vectors that will not be zeroed when other tagged vectors are.
 
virtual const VectorTaggetVectorTag (const TagID tag_id) const
 Get a VectorTag from a TagID.
 
std::vector< VectorTaggetVectorTags (const std::set< TagID > &tag_ids) const
 
virtual const std::vector< VectorTag > & getVectorTags (const Moose::VectorTagType type=Moose::VECTOR_TAG_ANY) const
 Return all vector tags, where a tag is represented by a map from name to ID.
 
virtual TagID getVectorTagID (const TagName &tag_name) const
 Get a TagID from a TagName.
 
virtual TagName vectorTagName (const TagID tag) const
 Retrieve the name associated with a TagID.
 
virtual bool vectorTagExists (const TagID tag_id) const
 Check to see if a particular Tag exists.
 
virtual bool vectorTagExists (const TagName &tag_name) const
 Check to see if a particular Tag exists by using Tag name.
 
virtual unsigned int numVectorTags (const Moose::VectorTagType type=Moose::VECTOR_TAG_ANY) const
 The total number of tags, which can be limited to the tag type.
 
virtual Moose::VectorTagType vectorTagType (const TagID tag_id) const
 
virtual TagID addMatrixTag (TagName tag_name)
 Create a Tag.
 
virtual TagID getMatrixTagID (const TagName &tag_name) const
 Get a TagID from a TagName.
 
virtual TagName matrixTagName (TagID tag)
 Retrieve the name associated with a TagID.
 
virtual bool matrixTagExists (const TagName &tag_name) const
 Check to see if a particular Tag exists.
 
virtual bool matrixTagExists (TagID tag_id) const
 Check to see if a particular Tag exists.
 
virtual unsigned int numMatrixTags () const
 The total number of tags.
 
virtual std::map< TagName, TagID > & getMatrixTags ()
 Return all matrix tags in the system, where a tag is represented by a map from name to ID.
 
virtual bool hasLinearVariable (const std::string &var_name) const
 Whether or not this problem has this linear variable.
 
virtual bool hasAuxiliaryVariable (const std::string &var_name) const
 Whether or not this problem has this auxiliary variable.
 
virtual const std::set< MooseVariableFieldBase * > & getActiveElementalMooseVariables (const THREAD_ID tid) const
 Get the MOOSE variables to be reinited on each element.
 
virtual bool hasActiveElementalMooseVariables (const THREAD_ID tid) const
 Whether or not a list of active elemental moose variables has been set.
 
Moose::CoordinateSystemType getCoordSystem (SubdomainID sid) const
 
unsigned int getAxisymmetricRadialCoord () const
 Returns the desired radial direction for RZ coordinate transformation.
 
virtual DiracKernelInfodiracKernelInfo ()
 
virtual void setResidual (libMesh::NumericVector< libMesh::Number > &residual, const THREAD_ID tid)=0
 
virtual void setResidualNeighbor (libMesh::NumericVector< libMesh::Number > &residual, const THREAD_ID tid)=0
 
virtual void addJacobianNeighbor (libMesh::SparseMatrix< libMesh::Number > &jacobian, unsigned int ivar, unsigned int jvar, const libMesh::DofMap &dof_map, std::vector< dof_id_type > &dof_indices, std::vector< dof_id_type > &neighbor_dof_indices, const std::set< TagID > &tags, const THREAD_ID tid)=0
 
void reinitNodes (const std::vector< dof_id_type > &nodes, const THREAD_ID tid)
 
void reinitNodesNeighbor (const std::vector< dof_id_type > &nodes, const THREAD_ID tid)
 
void reinitNeighborLowerDElem (const Elem *elem, const THREAD_ID tid=0)
 reinitialize a neighboring lower dimensional element
 
void reinitMortarElem (const Elem *elem, const THREAD_ID tid=0)
 Reinit a mortar element to obtain a valid JxW.
 
void reinitGeomSearch ()
 reinitialize this object's geometric search data, e.g.
 
virtual void storeSubdomainMatPropName (SubdomainID block_id, const std::string &name)
 Adds the given material property to a storage map based on block ids.
 
virtual void storeBoundaryMatPropName (BoundaryID boundary_id, const std::string &name)
 Adds the given material property to a storage map based on boundary ids.
 
virtual void storeSubdomainZeroMatProp (SubdomainID block_id, const MaterialPropertyName &name)
 Adds to a map based on block ids of material properties for which a zero value can be returned.
 
virtual void storeBoundaryZeroMatProp (BoundaryID boundary_id, const MaterialPropertyName &name)
 Adds to a map based on boundary ids of material properties for which a zero value can be returned.
 
virtual void storeSubdomainDelayedCheckMatProp (const std::string &requestor, SubdomainID block_id, const std::string &name)
 Adds to a map based on block ids of material properties to validate.
 
virtual void storeBoundaryDelayedCheckMatProp (const std::string &requestor, BoundaryID boundary_id, const std::string &name)
 Adds to a map based on boundary ids of material properties to validate.
 
virtual void checkBlockMatProps ()
 Checks block material properties integrity.
 
virtual void checkBoundaryMatProps ()
 Checks boundary material properties integrity.
 
virtual void markMatPropRequested (const std::string &)
 Helper method for adding a material property name to the _material_property_requested set.
 
virtual bool isMatPropRequested (const std::string &prop_name) const
 Find out if a material property has been requested by any object.
 
void addConsumedPropertyName (const MooseObjectName &obj_name, const std::string &prop_name)
 Helper for tracking the object that is consuming a property for MaterialPropertyDebugOutput.
 
const std::map< MooseObjectName, std::set< std::string > > & getConsumedPropertyMap () const
 Return the map that tracks the object with consumed material properties.
 
virtual std::set< SubdomainIDgetMaterialPropertyBlocks (const std::string &prop_name)
 Get a vector containing the block ids the material property is defined on.
 
virtual std::vector< SubdomainName > getMaterialPropertyBlockNames (const std::string &prop_name)
 Get a vector of block id equivalences that the material property is defined on.
 
virtual bool hasBlockMaterialProperty (SubdomainID block_id, const std::string &prop_name)
 Check if a material property is defined on a block.
 
virtual std::set< BoundaryIDgetMaterialPropertyBoundaryIDs (const std::string &prop_name)
 Get a vector containing the block ids the material property is defined on.
 
virtual std::vector< BoundaryName > getMaterialPropertyBoundaryNames (const std::string &prop_name)
 Get a vector of block id equivalences that the material property is defined on.
 
virtual bool hasBoundaryMaterialProperty (BoundaryID boundary_id, const std::string &prop_name)
 Check if a material property is defined on a block.
 
virtual std::set< dof_id_type > & ghostedElems ()
 Return the list of elements that should have their DoFs ghosted to this processor.
 
const bool & currentlyComputingJacobian () const
 Returns true if the problem is in the process of computing the Jacobian.
 
void setCurrentlyComputingJacobian (const bool currently_computing_jacobian)
 Set whether or not the problem is in the process of computing the Jacobian.
 
const bool & currentlyComputingResidualAndJacobian () const
 Returns true if the problem is in the process of computing the residual and the Jacobian.
 
void setCurrentlyComputingResidualAndJacobian (bool currently_computing_residual_and_jacobian)
 Set whether or not the problem is in the process of computing the Jacobian.
 
virtual bool safeAccessTaggedMatrices () const
 Is it safe to access the tagged matrices.
 
virtual bool safeAccessTaggedVectors () const
 Is it safe to access the tagged vectors.
 
const std::set< TagID > & getActiveScalarVariableCoupleableVectorTags (const THREAD_ID tid) const
 
const std::set< TagID > & getActiveScalarVariableCoupleableMatrixTags (const THREAD_ID tid) const
 
const std::set< TagID > & getActiveFEVariableCoupleableVectorTags (const THREAD_ID tid) const
 
const std::set< TagID > & getActiveFEVariableCoupleableMatrixTags (const THREAD_ID tid) const
 
void addAlgebraicGhostingFunctor (libMesh::GhostingFunctor &algebraic_gf, bool to_mesh=true)
 Add an algebraic ghosting functor to this problem's DofMaps.
 
void addCouplingGhostingFunctor (libMesh::GhostingFunctor &coupling_gf, bool to_mesh=true)
 Add a coupling functor to this problem's DofMaps.
 
void removeAlgebraicGhostingFunctor (libMesh::GhostingFunctor &algebraic_gf)
 Remove an algebraic ghosting functor from this problem's DofMaps.
 
void removeCouplingGhostingFunctor (libMesh::GhostingFunctor &coupling_gf)
 Remove a coupling ghosting functor from this problem's DofMaps.
 
void hasScalingVector (const unsigned int nl_sys_num)
 Tells this problem that the assembly associated with the given nonlinear system number involves a scaling vector.
 
void clearAllDofIndices ()
 Clear dof indices from variables in nl and aux systems.
 
template<typename T >
const Moose::Functor< T > & getFunctor (const std::string &name, const THREAD_ID tid, const std::string &requestor_name, bool requestor_is_ad)
 
bool hasFunctor (const std::string &name, const THREAD_ID tid) const
 checks whether we have a functor corresponding to name on the thread id tid
 
template<typename T >
bool hasFunctorWithType (const std::string &name, const THREAD_ID tid) const
 checks whether we have a functor of type T corresponding to name on the thread id tid
 
template<typename T >
void addFunctor (const std::string &name, const Moose::FunctorBase< T > &functor, const THREAD_ID tid)
 add a functor to the problem functor container
 
template<typename T , typename PolymorphicLambda >
const Moose::FunctorBase< T > & addPiecewiseByBlockLambdaFunctor (const std::string &name, PolymorphicLambda my_lammy, const std::set< ExecFlagType > &clearance_schedule, const MooseMesh &mesh, const std::set< SubdomainID > &block_ids, const THREAD_ID tid)
 Add a functor that has block-wise lambda definitions, e.g.
 
void setFunctorOutput (bool set_output)
 Setter for debug functor output.
 
void setChainControlDataOutput (bool set_output)
 Setter for debug chain control data output.
 
template<typename T >
void registerUnfilledFunctorRequest (T *functor_interface, const std::string &functor_name, const THREAD_ID tid)
 Register an unfulfilled functor request.
 
void reinitFVFace (const THREAD_ID tid, const FaceInfo &fi)
 reinitialize the finite volume assembly data for the provided face and thread
 
void preparePRefinement ()
 Prepare DofMap and Assembly classes with our p-refinement information.
 
bool doingPRefinement () const
 
bool havePRefinement () const
 Query whether p-refinement has been requested at any point during the simulation.
 
void markFamilyPRefinement (const InputParameters &params)
 Mark a variable family for either disabling or enabling p-refinement with valid parameters of a variable.
 
template<typename T >
MooseVariableFEBasegetVariableHelper (const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type, Moose::VarFieldType expected_var_field_type, const std::vector< T > &systems, const SystemBase &aux) const
 
void _setCLIOption ()
 For Internal Use.
 
virtual void terminateSolve ()
 Allow objects to request clean termination of the solve.
 
virtual bool isSolveTerminationRequested () const
 Check of termination has been requested.
 
const ConsoleStreamconsole () const
 Return console handle.
 
virtual bool enabled () const
 Return the enabled status of the object.
 
std::shared_ptr< MooseObjectgetSharedPtr ()
 Get another shared pointer to this object that has the same ownership group.
 
std::shared_ptr< const MooseObjectgetSharedPtr () const
 
bool isKokkosObject () const
 Get whether this object is a Kokkos functor The parameter MooseBase::kokkos_object_param is set by the Kokkos base classes.
 
MooseAppgetMooseApp () const
 Get the MooseApp this class is associated with.
 
const std::string & type () const
 Get the type of this class.
 
const std::string & name () const
 Get the name of the class.
 
std::string typeAndName () const
 Get the class's combined type and name; useful in error handling.
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
MooseObjectName uniqueName () const
 
const InputParametersparameters () const
 Get the parameters of the object.
 
const hit::Node * getHitNode () const
 
bool hasBase () const
 
const std::string & getBase () const
 
template<typename T >
const T & getParam (const std::string &name) const
 Retrieve a parameter for the object.
 
template<typename T1 , typename T2 >
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 Retrieve two parameters and provide pair of parameters for the object.
 
template<typename T >
const T * queryParam (const std::string &name) const
 Query a parameter for the object.
 
template<typename T >
const T & getRenamedParam (const std::string &old_name, const std::string &new_name) const
 Retrieve a renamed parameter for the object.
 
template<typename T >
getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 Verifies that the requested parameter exists and is not NULL and returns it to the caller.
 
bool isParamValid (const std::string &name) const
 Test if the supplied parameter is valid.
 
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 connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 Connect controllable parameter of this action with the controllable parameters of the objects added by this action.
 
template<typename... Args>
void paramError (const std::string &param, Args... args) const
 Emits an error prefixed with the file and line number of the given param (from the input file) along with the full parameter path+name followed by the given args as the message.
 
template<typename... Args>
void paramWarning (const std::string &param, Args... args) const
 Emits a warning prefixed with the file and line number of the given param (from the input file) along with the full parameter path+name followed by the given args as the message.
 
template<typename... Args>
void paramWarning (const std::string &param, Args... args) const
 
template<typename... Args>
void paramInfo (const std::string &param, Args... args) const
 Emits an informational message prefixed with the file and line number of the given param (from the input file) along with the full parameter path+name followed by the given args as the message.
 
std::string messagePrefix (const bool hit_prefix=true) const
 
std::string errorPrefix (const std::string &) const
 Deprecated message prefix; the error type is no longer used.
 
template<typename... Args>
void mooseError (Args &&... args) const
 Emits an error prefixed with object name and type and optionally a file path to the top-level block parameter if available.
 
template<typename... Args>
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
template<typename... Args>
void mooseErrorNonPrefixed (Args &&... args) const
 Emits an error without the prefixing included in mooseError().
 
template<typename... Args>
void mooseWarning (Args &&... args) const
 Emits a warning prefixed with object name and type.
 
template<typename... Args>
void mooseWarning (Args &&... args) const
 
template<typename... Args>
void mooseWarningNonPrefixed (Args &&... args) const
 Emits a warning without the prefixing included in mooseWarning().
 
template<typename... Args>
void mooseWarningNonPrefixed (Args &&... args) const
 
template<typename... Args>
void mooseDeprecated (Args &&... args) const
 Emits a deprecation warning prefixed with the object name and type, and a stack trace.
 
template<typename... Args>
void mooseDeprecated (Args &&... args) const
 
template<typename... Args>
void mooseDeprecatedNoTrace (Args &&... args) const
 Emits a deprecation warning prefixed with the object name and type, and no stack trace.
 
template<typename... Args>
void mooseInfo (Args &&... args) const
 
void callMooseError (std::string msg, const bool with_prefix, const hit::Node *node=nullptr, const bool show_trace=true) const
 External method for calling moose error with added object context.
 
const Parallel::Communicatorcomm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 
std::string getDataFileName (const std::string &param) const
 Deprecated method.
 
std::string getDataFileNameByName (const std::string &relative_path) const
 Deprecated method.
 
std::string getDataFilePath (const std::string &relative_path) const
 Returns the path of a data file for a given relative file path.
 
PerfGraphperfGraph ()
 Get the PerfGraph.
 
const libMesh::ConstElemRangegetEvaluableElementRange ()
 In general, {evaluable elements} >= {local elements} U {algebraic ghosting elements}.
 
const libMesh::ConstElemRangegetNonlinearEvaluableElementRange ()
 
const libMesh::ConstElemRangegetCurrentAlgebraicElementRange ()
 These are the element and nodes that contribute to the jacobian and residual for this local processor.
 
const libMesh::ConstNodeRangegetCurrentAlgebraicNodeRange ()
 
const ConstBndNodeRangegetCurrentAlgebraicBndNodeRange ()
 
void setCurrentAlgebraicElementRange (libMesh::ConstElemRange *range)
 These functions allow setting custom ranges for the algebraic elements, nodes, and boundary nodes that contribute to the jacobian and residual for this local processor.
 
void setCurrentAlgebraicNodeRange (libMesh::ConstNodeRange *range)
 
void setCurrentAlgebraicBndNodeRange (ConstBndNodeRange *range)
 
void allowOutput (bool state)
 Ability to enable/disable all output calls.
 
template<typename T >
void allowOutput (bool state)
 
Moose::Kokkos::Array< Moose::Kokkos::System > & getKokkosSystems ()
 Get the Kokkos System array (always populated when any Kokkos object exists)
 
const Moose::Kokkos::Array< Moose::Kokkos::System > & getKokkosSystems () const
 
Moose::Kokkos::Array< Moose::Kokkos::FESystem > & getKokkosFESystems ()
 Get the Kokkos FESystem array (populated only when FE Kokkos objects exist)
 
const Moose::Kokkos::Array< Moose::Kokkos::FESystem > & getKokkosFESystems () const
 
Moose::Kokkos::SystemgetKokkosSystem (const unsigned int sys_num)
 Get the Kokkos System of a specified number.
 
const Moose::Kokkos::SystemgetKokkosSystem (const unsigned int sys_num) const
 
Moose::Kokkos::FESystemgetKokkosFESystem (const unsigned int sys_num)
 Get the Kokkos FESystem of a specified number.
 
const Moose::Kokkos::FESystemgetKokkosFESystem (const unsigned int sys_num) const
 
bool hasMultiApps () const
 Returns whether or not the current simulation has any multiapps.
 
bool hasMultiApps (ExecFlagType type) const
 
bool hasMultiApp (const std::string &name) const
 
const AutomaticMortarGenerationgetMortarInterface (const std::pair< BoundaryID, BoundaryID > &primary_secondary_boundary_pair, const std::pair< SubdomainID, SubdomainID > &primary_secondary_subdomain_pair, bool on_displaced) const
 Return the undisplaced or displaced mortar generation object associated with the provided boundaries and subdomains.
 
AutomaticMortarGenerationgetMortarInterface (const std::pair< BoundaryID, BoundaryID > &primary_secondary_boundary_pair, const std::pair< SubdomainID, SubdomainID > &primary_secondary_subdomain_pair, bool on_displaced)
 
const MaterialPropertyStoragegetMaterialPropertyStorage ()
 Return a reference to the material property storage.
 
const MaterialPropertyStoragegetBndMaterialPropertyStorage ()
 
const MaterialPropertyStoragegetNeighborMaterialPropertyStorage ()
 
Moose::Kokkos::MaterialPropertyStoragegetKokkosMaterialPropertyStorage ()
 
Moose::Kokkos::MaterialPropertyStoragegetKokkosBndMaterialPropertyStorage ()
 
Moose::Kokkos::MaterialPropertyStoragegetKokkosNeighborMaterialPropertyStorage ()
 
const MooseObjectWarehouse< Indicator > & getIndicatorWarehouse ()
 Return indicator/marker storage.
 
const MooseObjectWarehouse< InternalSideIndicatorBase > & getInternalSideIndicatorWarehouse ()
 
const MooseObjectWarehouse< Marker > & getMarkerWarehouse ()
 
bool needBoundaryMaterialOnSide (BoundaryID bnd_id, const THREAD_ID tid)
 These methods are used to determine whether stateful material properties need to be stored on internal sides.
 
bool needInterfaceMaterialOnSide (BoundaryID bnd_id, const THREAD_ID tid)
 
bool needInternalNeighborSideMaterial (SubdomainID subdomain_id, const THREAD_ID tid)
 
const ExecFlagTypegetCurrentExecuteOnFlag () const
 Return/set the current execution flag.
 
void setCurrentExecuteOnFlag (const ExecFlagType &)
 

Static Public Member Functions

static InputParameters validParams ()
 
static void selectVectorTagsFromSystem (const SystemBase &system, const std::vector< VectorTag > &input_vector_tags, std::set< TagID > &selected_tags)
 Select the vector tags which belong to a specific system.
 
static void selectMatrixTagsFromSystem (const SystemBase &system, const std::map< TagName, TagID > &input_matrix_tags, std::set< TagID > &selected_tags)
 Select the matrix tags which belong to a specific system.
 
static void callMooseError (MooseApp *const app, const InputParameters &params, std::string msg, const bool with_prefix, const hit::Node *node, const bool show_trace=true)
 External method for calling moose error with added object context.
 
template<typename T >
static void objectSetupHelper (const std::vector< T * > &objects, const ExecFlagType &exec_flag)
 Helpers for calling the necessary setup/execute functions for the supplied objects.
 
template<typename T >
static void objectExecuteHelper (const std::vector< T * > &objects)
 

Public Attributes

std::map< std::string, std::vector< dof_id_type > > _var_dof_map
 
 usingCombinedWarningSolutionWarnings
 
const ConsoleStream _console
 An instance of helper class to write streams to the Console objects.
 
std::vector< Real > _real_zero
 Convenience zeros.
 
std::vector< VariableValue_scalar_zero
 
std::vector< VariableValue_zero
 
std::vector< VariablePhiValue_phi_zero
 
std::vector< MooseArray< ADReal > > _ad_zero
 
std::vector< VariableGradient_grad_zero
 
std::vector< MooseArray< ADRealVectorValue > > _ad_grad_zero
 
std::vector< VariablePhiGradient_grad_phi_zero
 
std::vector< VariableSecond_second_zero
 
std::vector< MooseArray< ADRealTensorValue > > _ad_second_zero
 
std::vector< VariablePhiSecond_second_phi_zero
 
std::vector< Point > _point_zero
 
std::vector< VectorVariableValue_vector_zero
 
std::vector< VectorVariableCurl_vector_curl_zero
 

Static Public Attributes

static const std::string type_param = "_type"
 The name of the parameter that contains the object type.
 
static const std::string name_param = "_object_name"
 The name of the parameter that contains the object name.
 
static const std::string unique_name_param = "_unique_name"
 The name of the parameter that contains the unique object name.
 
static const std::string app_param = "_moose_app"
 The name of the parameter that contains the MooseApp.
 
static const std::string moose_base_param = "_moose_base"
 The name of the parameter that contains the moose system base.
 
static const std::string kokkos_object_param = "_kokkos_object"
 The name of the parameter that indicates an object is a Kokkos functor.
 

Protected Member Functions

virtual void meshChanged ()
 Deprecated.
 
void createTagVectors ()
 Create extra tagged vectors and matrices.
 
void createTagSolutions ()
 Create extra tagged solution vectors.
 
virtual void meshDisplaced ()
 Update data after a mesh displaced.
 
void computeSystems (const ExecFlagType &type)
 Do generic system computations.
 
bool duplicateVariableCheck (const std::string &var_name, const libMesh::FEType &type, bool is_aux, const std::set< SubdomainID > *const active_subdomains)
 Helper to check for duplicate variable names across systems or within a single system.
 
void computeUserObjectsInternal (const ExecFlagType &type, TheWarehouse::Query &query)
 
void computeKokkosUserObjectsInternal (const ExecFlagType &type, TheWarehouse::Query &query)
 
void checkDisplacementOrders ()
 Verify that SECOND order mesh uses SECOND order displacements.
 
void checkUserObjects ()
 
void checkDependMaterialsHelper (const std::map< SubdomainID, std::vector< std::shared_ptr< MaterialBase > > > &materials_map)
 Helper method for checking Material object dependency.
 
void checkCoordinateSystems ()
 Verify that there are no element type/coordinate type conflicts.
 
void reinitBecauseOfGhostingOrNewGeomObjects (bool mortar_changed=false)
 Call when it is possible that the needs for ghosted elements has changed.
 
void addObjectParamsHelper (InputParameters &params, const std::string &object_name, const std::string &var_param_name="variable")
 Helper for setting the "_subproblem" and "_sys" parameters in addObject() and in addUserObject().
 
template<typename T >
MooseVariableFieldBasegetVariableHelper (const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type, Moose::VarFieldType expected_var_field_type, const std::vector< T > &nls, const SystemBase &aux) const
 Helper function called by getVariable that handles the logic for checking whether Variables of the requested type are available.
 
bool verifyVectorTags () const
 Verify the integrity of _vector_tags and _typed_vector_tags.
 
template<bool warning>
void flagInvalidSolutionInternal (const InvalidSolutionID invalid_solution_id) const
 Set solution invalid mark for the given solution ID.
 
InvalidSolutionID registerInvalidSolutionInternal (const std::string &message, const bool warning) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level) const
 Call to register a named section for timing.
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level, const std::string &live_message, const bool print_dots=true) const
 Call to register a named section for timing.
 
std::string timedSectionName (const std::string &section_name) const
 
template<typename T , typename... Args>
T & declareRestartableData (const std::string &data_name, Args &&... args)
 Declare a piece of data as "restartable" and initialize it.
 
template<typename T , typename... Args>
ManagedValue< T > declareManagedRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 Declares a piece of "managed" restartable data and initialize it.
 
template<typename T , typename... Args>
const T & getRestartableData (const std::string &data_name) const
 Declare a piece of data as "restartable" and initialize it Similar to declareRestartableData but returns a const reference to the object.
 
template<typename T , typename... Args>
T & declareRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 Declare a piece of data as "restartable" and initialize it.
 
template<typename T , typename... Args>
T & declareRecoverableData (const std::string &data_name, Args &&... args)
 Declare a piece of data as "recoverable" and initialize it.
 
template<typename T , typename... Args>
T & declareRestartableDataWithObjectName (const std::string &data_name, const std::string &object_name, Args &&... args)
 Declare a piece of data as "restartable".
 
template<typename T , typename... Args>
T & declareRestartableDataWithObjectNameWithContext (const std::string &data_name, const std::string &object_name, void *context, Args &&... args)
 Declare a piece of data as "restartable".
 
std::string restartableName (const std::string &data_name) const
 Gets the name of a piece of restartable data given a data name, adding the system name and object name prefix.
 

Protected Attributes

MooseMesh_mesh
 
bool _initialized
 
std::optional< std::vector< ConvergenceName > > _nonlinear_convergence_names
 Nonlinear system(s) convergence name(s)
 
std::optional< std::vector< ConvergenceName > > _linear_convergence_names
 Linear system(s) convergence name(s) (if any)
 
std::optional< ConvergenceName > _multiapp_fixed_point_convergence_name
 MultiApp fixed point convergence name.
 
std::optional< ConvergenceName > _steady_state_convergence_name
 Steady-state detection convergence name.
 
std::set< TagID_fe_vector_tags
 
std::set< TagID_fe_matrix_tags
 
std::set< TagID_linear_vector_tags
 Temporary storage for filtered vector tags for linear systems.
 
std::set< TagID_linear_matrix_tags
 Temporary storage for filtered matrix tags for linear systems.
 
const bool & _solve
 Whether or not to actually solve the nonlinear system.
 
bool _transient
 
Real & _time
 
Real & _time_old
 
Real & _time_older
 
int_t_step
 
Real & _dt
 
Real & _dt_old
 
bool _need_to_add_default_nonlinear_convergence
 Flag that the problem needs to add the default nonlinear convergence.
 
bool _need_to_add_default_multiapp_fixed_point_convergence
 Flag that the problem needs to add the default fixed point convergence.
 
bool _need_to_add_default_steady_state_convergence
 Flag that the problem needs to add the default steady convergence.
 
const std::vector< LinearSystemName > _linear_sys_names
 The linear system names.
 
const std::size_t _num_linear_sys
 The number of linear systems.
 
std::vector< std::shared_ptr< LinearSystem > > _linear_systems
 The vector of linear systems.
 
std::map< LinearSystemName, unsigned int_linear_sys_name_to_num
 Map from linear system name to number.
 
LinearSystem_current_linear_sys
 The current linear system that we are solving.
 
const bool _using_default_nl
 Boolean to check if we have the default nonlinear system.
 
const std::vector< NonlinearSystemName > _nl_sys_names
 The nonlinear system names.
 
const std::size_t _num_nl_sys
 The number of nonlinear systems.
 
std::vector< std::shared_ptr< NonlinearSystemBase > > _nl
 The nonlinear systems.
 
std::map< NonlinearSystemName, unsigned int_nl_sys_name_to_num
 Map from nonlinear system name to number.
 
NonlinearSystemBase_current_nl_sys
 The current nonlinear system that we are solving.
 
SolverSystem_current_solver_sys
 The current solver system.
 
std::vector< std::shared_ptr< SolverSystem > > _solver_systems
 Combined container to base pointer of every solver system.
 
std::map< SolverVariableName, unsigned int_solver_var_to_sys_num
 Map connecting variable names with their respective solver systems.
 
std::map< SolverSystemName, unsigned int_solver_sys_name_to_num
 Map connecting solver system names with their respective systems.
 
std::vector< SolverSystemName > _solver_sys_names
 The union of nonlinear and linear system names.
 
std::shared_ptr< AuxiliarySystem_aux
 The auxiliary system.
 
Moose::CouplingType _coupling
 Type of variable coupling.
 
std::vector< std::unique_ptr< libMesh::CouplingMatrix > > _cm
 Coupling matrix for variables.
 
Moose::Kokkos::Array< Moose::Kokkos::System_kokkos_systems
 System array - sparsely populated (only slots for systems needing a Kokkos::System)
 
Moose::Kokkos::Array< Moose::Kokkos::FESystem_kokkos_fe_systems
 FESystem array - sparsely populated (only slots for systems needing a Kokkos::FESystem)
 
std::map< std::string, unsigned int_subspace_dim
 Dimension of the subspace spanned by the vectors with a given prefix.
 
std::vector< std::vector< std::unique_ptr< Assembly > > > _assembly
 The Assembly objects.
 
Moose::Kokkos::Assembly _kokkos_assembly
 
MooseObjectWarehouse< MeshDivision_mesh_divisions
 Warehouse to store mesh divisions NOTE: this could probably be moved to the MooseMesh instead of the Problem Time (and people's uses) will tell where this fits best.
 
MooseObjectWarehouse< Function_functions
 functions
 
MooseObjectWarehouse< Moose::FunctionBase_kokkos_functions
 
MooseObjectWarehouse< Convergence_convergences
 convergence warehouse
 
MooseObjectWarehouse< KernelBase_nonlocal_kernels
 nonlocal kernels
 
MooseObjectWarehouse< IntegratedBCBase_nonlocal_integrated_bcs
 nonlocal integrated_bcs
 
MaterialPropertyRegistry _material_prop_registry
 
MaterialPropertyStorage_material_props
 
MaterialPropertyStorage_bnd_material_props
 
MaterialPropertyStorage_neighbor_material_props
 
Moose::Kokkos::MaterialPropertyStorage_kokkos_material_props
 
Moose::Kokkos::MaterialPropertyStorage_kokkos_bnd_material_props
 
Moose::Kokkos::MaterialPropertyStorage_kokkos_neighbor_material_props
 
MooseObjectWarehouse< Marker_markers
 
ReporterData _reporter_data
 
ExecuteMooseObjectWarehouse< MultiApp_multi_apps
 MultiApp Warehouse.
 
ExecuteMooseObjectWarehouse< TransientMultiApp_transient_multi_apps
 Storage for TransientMultiApps (only needed for calling 'computeDT')
 
ExecuteMooseObjectWarehouse< Transfer_transfers
 Normal Transfers.
 
ExecuteMooseObjectWarehouse< Transfer_to_multi_app_transfers
 Transfers executed just before MultiApps to transfer data to them.
 
ExecuteMooseObjectWarehouse< Transfer_from_multi_app_transfers
 Transfers executed just after MultiApps to transfer data from them.
 
ExecuteMooseObjectWarehouse< Transfer_between_multi_app_transfers
 Transfers executed just before MultiApps to transfer data between them.
 
const unsigned int _num_concurrent_multiapps
 Number of concurrent applications being solved at the same time.
 
std::map< std::string, std::unique_ptr< RandomData > > _random_data_objects
 A map of objects that consume random numbers.
 
std::vector< std::unordered_map< SubdomainID, bool > > _block_mat_side_cache
 Cache for calculating materials on side.
 
std::vector< std::unordered_map< BoundaryID, bool > > _bnd_mat_side_cache
 Cache for calculating materials on side.
 
std::vector< std::unordered_map< BoundaryID, bool > > _interface_mat_side_cache
 Cache for calculating materials on interface.
 
std::vector< MeshChangedInterface * > _notify_when_mesh_changes
 Objects to be notified when the mesh changes.
 
std::vector< MeshDisplacedInterface * > _notify_when_mesh_displaces
 Objects to be notified when the mesh displaces.
 
Adaptivity _adaptivity
 
unsigned int _cycles_completed
 
std::shared_ptr< XFEMInterface_xfem
 Pointer to XFEM controller.
 
MooseMesh_displaced_mesh
 
std::shared_ptr< DisplacedProblem_displaced_problem
 
GeometricSearchData _geometric_search_data
 
std::unique_ptr< MortarInterfaceWarehouse_mortar_data
 
bool _reinit_displaced_elem
 Whether to call DisplacedProblem::reinitElem when this->reinitElem is called.
 
bool _reinit_displaced_face
 Whether to call DisplacedProblem::reinitElemFace when this->reinitElemFace is called.
 
bool _reinit_displaced_neighbor
 Whether to call DisplacedProblem::reinitNeighbor when this->reinitNeighbor is called.
 
bool _input_file_saved
 whether input file has been written
 
bool _has_dampers
 Whether or not this system has any Dampers associated with it.
 
bool _has_constraints
 Whether or not this system has any Constraints.
 
bool _snesmf_reuse_base
 If or not to resuse the base vector for matrix-free calculation.
 
bool _skip_exception_check
 If or not skip 'exception and stop solve'.
 
bool _snesmf_reuse_base_set_by_user
 If or not _snesmf_reuse_base is set by user.
 
bool _has_initialized_stateful
 Whether nor not stateful materials have been initialized.
 
bool _const_jacobian
 true if the Jacobian is constant
 
bool _has_jacobian
 Indicates if the Jacobian was computed.
 
bool _needs_old_newton_iter
 Indicates that we need to compute variable values for previous Newton iteration.
 
bool _previous_nl_solution_required
 Indicates we need to save the previous NL iteration variable values.
 
std::vector< bool > _previous_multiapp_fp_nl_solution_required
 Indicates we need to save the previous multiapp fixed-point iteration solver variable values.
 
bool _previous_multiapp_fp_aux_solution_required
 Indicates we need to save the previous multiapp fixed-point iteration auxiliary variable values.
 
std::vector< bool > _previous_multisystem_fp_nl_solution_required
 Indicates we need to save the previous multi-system fixed-point iteration solver variable values.
 
bool _previous_multisystem_fp_aux_solution_required
 Indicates we need to save the previous multi-system fixed-point iteration auxiliary variable values.
 
bool _has_nonlocal_coupling
 Indicates if nonlocal coupling is required/exists.
 
bool _calculate_jacobian_in_uo
 
std::vector< std::vector< const MooseVariableFEBase * > > _uo_jacobian_moose_vars
 
std::vector< unsigned char > _has_active_material_properties
 Whether there are active material properties on each thread.
 
std::vector< SolverParams_solver_params
 
CoverageCheckMode _kernel_coverage_check
 Determines whether and which subdomains are to be checked to ensure that they have an active kernel.
 
std::vector< SubdomainName > _kernel_coverage_blocks
 
const bool _boundary_restricted_node_integrity_check
 whether to perform checking of boundary restricted nodal object variable dependencies, e.g.
 
const bool _boundary_restricted_elem_integrity_check
 whether to perform checking of boundary restricted elemental object variable dependencies, e.g.
 
const bool _side_uo_interface_mat_prop_integrity_check
 Whether to check that side user objects do not consume interface material properties.
 
CoverageCheckMode _material_coverage_check
 Determines whether and which subdomains are to be checked to ensure that they have an active material.
 
std::vector< SubdomainName > _material_coverage_blocks
 
bool _fv_bcs_integrity_check
 Whether to check overlapping Dirichlet and Flux BCs and/or multiple DirichletBCs per sideset.
 
const bool _fv_face_integrity_check
 Whether to check FV boundary and interface objects against the faces on which they execute.
 
const bool _material_dependency_check
 Determines whether a check to verify material dependencies on every subdomain.
 
const bool _uo_aux_state_check
 Whether or not checking the state of uo/aux evaluation.
 
bool _check_residual_for_nans
 Whether to check the residual for NaN or Inf values.
 
unsigned int _max_qps
 Maximum number of quadrature points used in the problem.
 
libMesh::Order _max_scalar_order
 Maximum scalar variable order.
 
bool _has_time_integrator
 Indicates whether or not this executioner has a time integrator (during setup)
 
bool _has_exception
 Whether or not an exception has occurred.
 
bool _parallel_barrier_messaging
 Whether or not information about how many transfers have completed is printed.
 
MooseEnum _verbose_setup
 Whether or not to be verbose during setup.
 
bool _verbose_multiapps
 Whether or not to be verbose with multiapps.
 
bool _verbose_restore
 Whether or not to be verbose on solution restoration post a failed time step.
 
std::string _exception_message
 The error message to go with an exception.
 
ExecFlagType _current_execute_on_flag
 Current execute_on flag.
 
ExecuteMooseObjectWarehouse< Control_control_warehouse
 The control logic warehouse.
 
Moose::PetscSupport::PetscOptions _petsc_options
 PETSc option storage.
 
PetscOptions _petsc_option_data_base
 
bool _is_petsc_options_inserted
 If or not PETSc options have been added to database.
 
std::shared_ptr< LineSearch_line_search
 
std::unique_ptr< libMesh::ConstElemRange_evaluable_local_elem_range
 
std::unique_ptr< libMesh::ConstElemRange_nl_evaluable_local_elem_range
 
std::unique_ptr< libMesh::ConstElemRange_aux_evaluable_local_elem_range
 
std::unique_ptr< libMesh::ConstElemRange_current_algebraic_elem_range
 
std::unique_ptr< libMesh::ConstNodeRange_current_algebraic_node_range
 
std::unique_ptr< ConstBndNodeRange_current_algebraic_bnd_node_range
 
bool _using_ad_mat_props
 Automatic differentiaion (AD) flag which indicates whether any consumer has requested an AD material property or whether any suppier has declared an AD material property.
 
unsigned short _current_ic_state
 
const bool _use_hash_table_matrix_assembly
 Whether to assemble matrices using hash tables instead of preallocating matrix memory.
 
std::map< TagName, TagID_matrix_tag_name_to_tag_id
 The currently declared tags.
 
std::map< TagID, TagName > _matrix_tag_id_to_tag_name
 Reverse map.
 
Factory_factory
 The Factory for building objects.
 
DiracKernelInfo _dirac_kernel_info
 
std::map< SubdomainID, std::set< std::string > > _map_block_material_props
 Map of material properties (block_id -> list of properties)
 
std::map< BoundaryID, std::set< std::string > > _map_boundary_material_props
 Map for boundary material properties (boundary_id -> list of properties)
 
std::map< SubdomainID, std::set< MaterialPropertyName > > _zero_block_material_props
 Set of properties returned as zero properties.
 
std::map< BoundaryID, std::set< MaterialPropertyName > > _zero_boundary_material_props
 
std::set< std::string > _material_property_requested
 set containing all material property names that have been requested by getMaterialProperty*
 
std::vector< std::set< MooseVariableFieldBase * > > _active_elemental_moose_variables
 This is the set of MooseVariableFieldBase that will actually get reinited by a call to reinit(elem)
 
std::vector< unsigned int_has_active_elemental_moose_variables
 Whether or not there is currently a list of active elemental moose variables.
 
std::vector< std::set< TagID > > _active_fe_var_coupleable_matrix_tags
 
std::vector< std::set< TagID > > _active_fe_var_coupleable_vector_tags
 
std::vector< std::set< TagID > > _active_sc_var_coupleable_matrix_tags
 
std::vector< std::set< TagID > > _active_sc_var_coupleable_vector_tags
 
bool _default_ghosting
 Whether or not to use default libMesh coupling.
 
std::set< dof_id_type > _ghosted_elems
 Elements that should have Dofs ghosted to the local processor.
 
bool _currently_computing_jacobian
 Flag to determine whether the problem is currently computing Jacobian.
 
bool _currently_computing_residual_and_jacobian
 Flag to determine whether the problem is currently computing the residual and Jacobian.
 
bool _computing_nonlinear_residual
 Whether the non-linear residual is being evaluated.
 
bool _currently_computing_residual
 Whether the residual is being evaluated.
 
bool _safe_access_tagged_matrices
 Is it safe to retrieve data from tagged matrices.
 
bool _safe_access_tagged_vectors
 Is it safe to retrieve data from tagged vectors.
 
bool _have_ad_objects
 AD flag indicating whether any AD objects have been added.
 
std::unordered_set< TagID_not_zeroed_tagged_vectors
 the list of vector tags that will not be zeroed when all other tags are
 
bool _cli_option_found
 True if the CLI option is found.
 
bool _color_output
 True if we're going to attempt to write color output.
 
bool _termination_requested
 True if termination of the solve has been requested.
 
const bool & _enabled
 Reference to the "enable" InputParameters, used by Controls for toggling on/off MooseObjects.
 
MooseApp_app
 The MOOSE application this is associated with.
 
ActionFactory_action_factory
 Builds Actions.
 
const std::string & _type
 The type of this class.
 
const std::string & _name
 The name of this class.
 
const InputParameters_pars
 The object's parameters.
 
const Parallel::Communicator_communicator
 
MooseApp_pg_moose_app
 The MooseApp that owns the PerfGraph.
 
const std::string _prefix
 A prefix to use for all sections.
 
MooseApp_restartable_app
 Reference to the application.
 
const std::string _restartable_system_name
 The system name this object is in.
 
const THREAD_ID _restartable_tid
 The thread ID for this object.
 
const bool _restartable_read_only
 Flag for toggling read only status (see ReporterData)
 
InitialConditionWarehouse _ics
 
FVInitialConditionWarehouse _fv_ics
 
ScalarInitialConditionWarehouse _scalar_ics
 
MaterialWarehouse _materials
 
MaterialWarehouse _interface_materials
 
MaterialWarehouse _discrete_materials
 
MaterialWarehouse _all_materials
 
MaterialWarehouse _kokkos_materials
 
MooseObjectWarehouse< Indicator_indicators
 
MooseObjectWarehouse< InternalSideIndicatorBase_internal_side_indicators
 
std::map< SubdomainID, std::multimap< std::string, std::string > > _map_block_material_props_check
 Data structures of the requested material properties.
 
std::map< BoundaryID, std::multimap< std::string, std::string > > _map_boundary_material_props_check
 

Private Types

enum class  TrueFunctorIs { UNSET , NONAD , AD }
 

Private Member Functions

void setResidualObjectParamsAndLog (const std::string &ro_name, const std::string &name, InputParameters &parameters, const unsigned int nl_sys_num, const std::string &base_name, bool &reinit_displaced)
 Set the subproblem and system parameters for residual objects and log their addition.
 
void setAuxKernelParamsAndLog (const std::string &ak_name, const std::string &name, InputParameters &parameters, const std::string &base_name)
 Set the subproblem and system parameters for auxiliary kernels and log their addition.
 
TheWarehouse::Query getUOQuery (const std::string &system, const ExecFlagType &type, const Moose::AuxGroup &group) const
 
void getUOExecutionGroups (TheWarehouse::Query &query, std::set< int > &execution_groups) const
 
void handleException (const std::string &calling_method)
 Handle exceptions.
 
std::vector< MortarUserObject * > getMortarUserObjects (BoundaryID primary_boundary_id, BoundaryID secondary_boundary_id, bool displaced, const std::vector< MortarUserObject * > &mortar_uo_superset)
 Helper for getting mortar objects corresponding to primary boundary ID, secondary boundary ID, and displaced parameters, given some initial set.
 
std::vector< MortarUserObject * > getMortarUserObjects (BoundaryID primary_boundary_id, BoundaryID secondary_boundary_id, bool displaced)
 Helper for getting mortar objects corresponding to primary boundary ID, secondary boundary ID, and displaced parameters from the entire active mortar user object set.
 
virtual std::pair< bool, unsigned intdetermineSolverSystem (const std::string &var_name, bool error_if_not_found=false) const override
 Determine what solver system the provided variable name lies in.
 
void checkICRestartError (const std::string &ic_name, const std::string &name, const VariableName &var_name)
 Checks if the variable of the initial condition is getting restarted and errors for specific cases.
 
void addAnyRedistributers ()
 
void updateMaxQps ()
 
void joinAndFinalize (TheWarehouse::Query query, bool isgen=false)
 
void kokkosJoinAndFinalize (const std::vector< Moose::Kokkos::UserObject * > &userobjs)
 
virtual void resetState ()
 Reset state of this object in preparation for the next evaluation.
 
void cloneAlgebraicGhostingFunctor (libMesh::GhostingFunctor &algebraic_gf, bool to_mesh=true)
 Creates (n_sys - 1) clones of the provided algebraic ghosting functor (corresponding to the nonlinear system algebraic ghosting functor), initializes the clone with the appropriate DofMap, and then adds the clone to said DofMap.
 
void cloneCouplingGhostingFunctor (libMesh::GhostingFunctor &coupling_gf, bool to_mesh=true)
 Creates (n_sys - 1) clones of the provided coupling ghosting functor (corresponding to the nonlinear system coupling ghosting functor), initializes the clone with the appropriate DofMap, and then adds the clone to said DofMap.
 
void showFunctors () const
 Lists all functors in the problem.
 
void showFunctorRequestors () const
 Lists all functors and all the objects that requested them.
 
RestartableDataValueregisterRestartableDataOnApp (std::unique_ptr< RestartableDataValue > data, THREAD_ID tid) const
 Helper function for actually registering the restartable data.
 
void registerRestartableNameWithFilterOnApp (const std::string &name, Moose::RESTARTABLE_FILTER filter)
 Helper function for actually registering the restartable data.
 
template<typename T , typename... Args>
RestartableData< T > & declareRestartableDataHelper (const std::string &data_name, void *context, Args &&... args) const
 Helper function for declaring restartable data.
 
std::string restrictionSubdomainCheckName (SubdomainID check_id)
 Helper functions for checking MaterialProperties.
 
std::string restrictionBoundaryCheckName (BoundaryID check_id)
 

Static Private Member Functions

static SolverParams makeLinearSolverParams ()
 Make basic solver params for linear solves.
 
static const hit::Node * getHitNode (const InputParameters &params)
 Internal method for getting a hit node (if available) given a set of parameters.
 
static std::string messagePrefix (const InputParameters &params, const bool hit_prefix)
 Internal method for getting the message prefix for an object (object type, name, etc).
 

Private Attributes

Restartable::ManagedValue< RestartableEquationSystems_req
 The EquationSystems object, wrapped for restart.
 
bool _error_on_jacobian_nonzero_reallocation
 Whether to error when the Jacobian is re-allocated, usually because the sparsity pattern changed.
 
const bool _restore_original_nonzero_pattern
 Whether we should restore the original nonzero pattern for every Jacobian evaluation.
 
bool _ignore_zeros_in_jacobian
 Whether to ignore zeros in the Jacobian, thereby leading to a reduced sparsity pattern.
 
bool _preserve_matrix_sparsity_pattern
 Whether to preserve the system matrix / Jacobian sparsity pattern, using 0-valued entries usually.
 
const bool _force_restart
 
const bool _allow_ics_during_restart
 
const bool _skip_nl_system_check
 
bool _fail_next_system_convergence_check
 
const bool _allow_invalid_solution
 
const bool _show_invalid_solution_console
 
const bool & _immediately_print_invalid_solution
 
bool _started_initial_setup
 At or beyond initialSteup stage.
 
bool _has_internal_edge_residual_objects
 Whether the problem has dgkernels or interface kernels.
 
bool _u_dot_requested
 Whether solution time derivative needs to be stored.
 
bool _u_dotdot_requested
 Whether solution second time derivative needs to be stored.
 
bool _u_dot_old_requested
 Whether old solution time derivative needs to be stored.
 
bool _u_dotdot_old_requested
 Whether old solution second time derivative needs to be stored.
 
bool _has_mortar
 Whether the simulation requires mortar coupling.
 
unsigned int _num_grid_steps
 Number of steps in a grid sequence.
 
bool _trust_user_coupling_matrix = false
 Whether to trust the user coupling matrix no matter what.
 
bool _computing_scaling_jacobian = false
 Flag used to indicate whether we are computing the scaling Jacobian.
 
bool _computing_scaling_residual = false
 Flag used to indicate whether we are computing the scaling Residual.
 
bool _checking_uo_aux_state = false
 Flag used to indicate whether we are doing the uo/aux state check in execute.
 
ExecFlagEnum _print_execution_on
 When to print the execution of loops.
 
const bool _identify_variable_groups_in_nl
 Whether to identify variable groups in nonlinear systems. This affects dof ordering.
 
std::vector< VectorTag_current_residual_vector_tags
 A data member to store the residual vector tag(s) passed into computeResidualTag(s).
 
bool _have_fv = false
 Whether we are performing some calculations with finite volume discretizations.
 
const bool _regard_general_exceptions_as_errors
 If we catch an exception during residual/Jacobian evaluaton for which we don't have specific handling, immediately error instead of allowing the time step to be cut.
 
std::vector< libMesh::CouplingMatrix_nonlocal_cm
 nonlocal coupling matrix
 
bool _requires_nonlocal_coupling
 nonlocal coupling requirement flag
 
bool _has_kokkos_objects = false
 Whether we have any Kokkos objects.
 
bool _has_kokkos_residual_objects = false
 Whether we have any Kokkos residual objects.
 
std::vector< std::function< void()> > _kokkos_mesh_initialization_hooks
 Container holding hooks for functions that need to be called after Kokkos mesh initialization.
 
std::vector< std::multimap< std::string, std::tuple< TrueFunctorIs, std::unique_ptr< Moose::FunctorEnvelopeBase >, std::unique_ptr< Moose::FunctorEnvelopeBase > > > > _functors
 A container holding pointers to all the functors in our problem.
 
std::vector< std::map< std::string, std::unique_ptr< Moose::FunctorAbstract > > > _pbblf_functors
 Container to hold PiecewiseByBlockLambdaFunctors.
 
std::map< std::string, std::set< std::string > > _functor_to_requestors
 The requestors of functors where the key is the prop name and the value is a set of names of requestors.
 
std::vector< std::multimap< std::string, std::pair< bool, bool > > > _functor_to_request_info
 A multimap (for each thread) from unfilled functor requests to whether the requests were for AD functors and whether the requestor was an AD object.
 
bool _show_functors
 Whether to output a list of the functors used and requested (currently only at initialSetup)
 
bool _show_chain_control_data
 Whether to output a list of all the chain control data.
 
std::vector< VectorTag_vector_tags
 The declared vector tags.
 
std::vector< std::vector< VectorTag > > _typed_vector_tags
 The vector tags associated with each VectorTagType This is kept separate from _vector_tags for quick access into typed vector tags in places where we don't want to build a new vector every call (like in residual evaluation)
 
std::map< TagName, TagID_vector_tags_name_map
 Map of vector tag TagName to TagID.
 
std::map< MooseObjectName, std::set< std::string > > _consumed_material_properties
 
std::unordered_map< libMesh::GhostingFunctor *, std::vector< std::shared_ptr< libMesh::GhostingFunctor > > > _root_alg_gf_to_sys_clones
 A map from a root algebraic ghosting functor, e.g.
 
std::unordered_map< libMesh::GhostingFunctor *, std::vector< std::shared_ptr< libMesh::GhostingFunctor > > > _root_coupling_gf_to_sys_clones
 A map from a root coupling ghosting functor, e.g.
 
bool _have_p_refinement
 Whether p-refinement has been requested at any point during the simulation.
 
std::unordered_map< FEFamily, bool > _family_for_p_refinement
 Indicate whether a family is disabled for p-refinement.
 
const ParallelParamObject_parent
 
const MooseBase_si_moose_base
 The MooseBase that owns this interface.
 
const FEProblemBase_si_problem
 A pointer to FEProblem base.
 
const RestartableDataMapName _metaname
 Restartable metadata name.
 
std::string _restartable_name
 The name of the object.
 

Static Private Attributes

static const std::unordered_set< FEFamily > _default_families_without_p_refinement
 The set of variable families by default disable p-refinement.
 

Friends

class AuxiliarySystem
 
class NonlinearSystemBase
 
class MooseEigenSystem
 
class Resurrector
 
class Restartable
 
class DisplacedProblem
 
void Moose::PetscSupport::setSinglePetscOption (const std::string &name, const std::string &value, FEProblemBase *const problem)
 

Detailed Description

Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.

Definition at line 158 of file FEProblemBase.h.

Member Typedef Documentation

◆ DataFileParameterType

using DataFileInterface::DataFileParameterType = DataFileName
inherited

The parameter type this interface expects for a data file name.

Definition at line 27 of file DataFileInterface.h.

Member Enumeration Documentation

◆ CoverageCheckMode

◆ TrueFunctorIs

enum class SubProblem::TrueFunctorIs
strongprivateinherited
Enumerator
UNSET 
NONAD 
AD 

Definition at line 1144 of file SubProblem.h.

Constructor & Destructor Documentation

◆ FEProblemBase()

FEProblemBase::FEProblemBase ( const InputParameters parameters)

Definition at line 422 of file FEProblemBase.C.

424 Restartable(this, "FEProblemBase"),
425 _mesh(*getCheckedPointerParam<MooseMesh *>("mesh")),
426 _req(declareManagedRestartableDataWithContext<RestartableEquationSystems>(
427 "equation_systems", nullptr, _mesh)),
428 _initialized(false),
429 _solve(getParam<bool>("solve")),
430 _transient(false),
431 _time(declareRestartableData<Real>("time")),
432 _time_old(declareRestartableData<Real>("time_old")),
433 _time_older(declareRestartableData<Real>("time_older")),
434 _t_step(declareRecoverableData<int>("t_step")),
435 _dt(declareRestartableData<Real>("dt")),
436 _dt_old(declareRestartableData<Real>("dt_old")),
440 _linear_sys_names(getParam<std::vector<LinearSystemName>>("linear_sys_names")),
443 _current_linear_sys(nullptr),
444 _using_default_nl(!isParamSetByUser("nl_sys_names")),
446 ? getParam<std::vector<NonlinearSystemName>>("nl_sys_names")
447 : std::vector<NonlinearSystemName>()),
449 _nl(_num_nl_sys, nullptr),
450 _current_nl_sys(nullptr),
452 _aux(nullptr),
454#ifdef MOOSE_KOKKOS_ENABLED
455 _kokkos_assembly(*this),
456#endif
457 _mesh_divisions(/*threaded=*/true),
459 "material_props", &_mesh, _material_prop_registry, *this)),
461 "bnd_material_props", &_mesh, _material_prop_registry, *this)),
463 "neighbor_material_props", &_mesh, _material_prop_registry, *this)),
464#ifdef MOOSE_KOKKOS_ENABLED
467 "kokkos_material_props", &_mesh, _material_prop_registry, *this)),
470 "kokkos_bnd_material_props", &_mesh, _material_prop_registry, *this)),
473 "kokkos_neighbor_material_props", &_mesh, _material_prop_registry, *this)),
474#endif
476 _multi_apps(_app.getExecuteOnEnum()),
477 _transient_multi_apps(_app.getExecuteOnEnum()),
478 _transfers(_app.getExecuteOnEnum(), /*threaded=*/false),
479 _to_multi_app_transfers(_app.getExecuteOnEnum(), /*threaded=*/false),
480 _from_multi_app_transfers(_app.getExecuteOnEnum(), /*threaded=*/false),
481 _between_multi_app_transfers(_app.getExecuteOnEnum(), /*threaded=*/false),
482 _num_concurrent_multiapps(getParam<unsigned int>("num_concurrent_multiapps")),
483#ifdef LIBMESH_ENABLE_AMR
484 _adaptivity(*this),
486#endif
487 _displaced_mesh(nullptr),
489 _mortar_data(std::make_unique<MortarInterfaceWarehouse>(*this)),
493 _input_file_saved(false),
494 _has_dampers(false),
495 _has_constraints(false),
496 _snesmf_reuse_base(true),
500 _const_jacobian(false),
501 _has_jacobian(false),
503 _previous_nl_solution_required(getParam<bool>("previous_nl_solution_required")),
511 getParam<MooseEnum>("kernel_coverage_check").getEnum<CoverageCheckMode>()),
512 _kernel_coverage_blocks(getParam<std::vector<SubdomainName>>("kernel_coverage_block_list")),
514 getParam<bool>("boundary_restricted_node_integrity_check")),
516 getParam<bool>("boundary_restricted_elem_integrity_check")),
518 getParam<bool>("side_uo_interface_mat_prop_integrity_check")),
520 getParam<MooseEnum>("material_coverage_check").getEnum<CoverageCheckMode>()),
521 _material_coverage_blocks(getParam<std::vector<SubdomainName>>("material_coverage_block_list")),
522 _fv_bcs_integrity_check(getParam<bool>("fv_bcs_integrity_check")),
523 _fv_face_integrity_check(getParam<bool>("fv_face_integrity_check")),
524 _material_dependency_check(getParam<bool>("material_dependency_check")),
525 _uo_aux_state_check(getParam<bool>("check_uo_aux_state")),
526#ifndef NDEBUG
528#endif
529 _max_qps(std::numeric_limits<unsigned int>::max()),
532 _has_exception(false),
533 _parallel_barrier_messaging(getParam<bool>("parallel_barrier_messaging")),
534 _verbose_setup(getParam<MooseEnum>("verbose_setup")),
535 _verbose_multiapps(getParam<bool>("verbose_multiapps")),
536 _verbose_restore(getParam<bool>("verbose_restore")),
538 _control_warehouse(_app.getExecuteOnEnum(), /*threaded=*/false),
540 _line_search(nullptr),
541 _using_ad_mat_props(false),
543 _use_hash_table_matrix_assembly(getParam<bool>("use_hash_table_matrix_assembly")),
545 isParamValid("error_on_jacobian_nonzero_reallocation")
546 ? getParam<bool>("error_on_jacobian_nonzero_reallocation")
548 _restore_original_nonzero_pattern(isParamValid("restore_original_nonzero_pattern")
549 ? getParam<bool>("restore_original_nonzero_pattern")
551 _ignore_zeros_in_jacobian(getParam<bool>("ignore_zeros_in_jacobian")),
553 _force_restart(getParam<bool>("force_restart")),
554 _allow_ics_during_restart(getParam<bool>("allow_initial_conditions_with_restart")),
555 _skip_nl_system_check(getParam<bool>("skip_nl_system_check")),
557 _allow_invalid_solution(getParam<bool>("allow_invalid_solution")),
558 _show_invalid_solution_console(getParam<bool>("show_invalid_solution_console")),
559 _immediately_print_invalid_solution(getParam<bool>("immediately_print_invalid_solution")),
562 _u_dot_requested(false),
563 _u_dotdot_requested(false),
566 _has_mortar(false),
569 _identify_variable_groups_in_nl(getParam<bool>("identify_variable_groups_in_nl")),
570 _regard_general_exceptions_as_errors(getParam<bool>("regard_general_exceptions_as_errors")),
572{
573 auto checkCoverageCheckConflict =
574 [this](const std::string & coverage_check,
575 const CoverageCheckMode & coverage_check_mode,
576 const std::vector<SubdomainName> & coverage_blocks) -> void
577 {
578 if (coverage_check_mode != CoverageCheckMode::FALSE &&
579 coverage_check_mode != CoverageCheckMode::OFF)
580 if (coverage_blocks.size() > 1)
581 if (std::find(coverage_blocks.begin(), coverage_blocks.end(), "ANY_BLOCK_ID") !=
582 coverage_blocks.end())
583 paramError(coverage_check,
584 "The list of blocks used for ",
585 coverage_check,
586 " cannot contain 'ANY_BLOCK_ID' along with other blocks. ");
587 };
588
589 checkCoverageCheckConflict(
590 "kernel_coverage_check", _kernel_coverage_check, _kernel_coverage_blocks);
591 checkCoverageCheckConflict(
592 "material_coverage_check", _material_coverage_check, _material_coverage_blocks);
593
594 // Initialize static do_derivatives member. We initialize this to true so that all the
595 // default AD things that we setup early in the simulation actually get their derivative
596 // vectors initalized. We will toggle this to false when doing residual evaluations
597 ADReal::do_derivatives = true;
598
599 // Disable refinement/coarsening in EquationSystems::reinit because we already do this ourselves
601
603 // Default constructor fine for nonlinear because it will be populated later by framework
604 // executioner/solve object parameters
606 for (const auto i : index_range(_nl_sys_names))
607 {
608 const auto & name = _nl_sys_names[i];
611 _solver_sys_names.push_back(name);
612 }
613
614 for (const auto i : index_range(_linear_sys_names))
615 {
616 const auto & name = _linear_sys_names[i];
619 _solver_sys_names.push_back(name);
620 // Unlike for nonlinear these are basically dummy parameters
622 }
623
625 _cm.resize(numSolverSystems());
626
627 _time = 0.0;
628 _time_old = 0.0;
629 _time_older = 0.0;
630 _t_step = 0;
631 _dt = 0;
632 _dt_old = _dt;
633
634 unsigned int n_threads = libMesh::n_threads();
635
636 _real_zero.resize(n_threads, 0.);
637 _scalar_zero.resize(n_threads);
638 _zero.resize(n_threads);
639 _phi_zero.resize(n_threads);
640 _ad_zero.resize(n_threads);
641 _grad_zero.resize(n_threads);
642 _ad_grad_zero.resize(n_threads);
643 _grad_phi_zero.resize(n_threads);
644 _second_zero.resize(n_threads);
645 _ad_second_zero.resize(n_threads);
646 _second_phi_zero.resize(n_threads);
647 _point_zero.resize(n_threads);
648 _vector_zero.resize(n_threads);
649 _vector_curl_zero.resize(n_threads);
650 _uo_jacobian_moose_vars.resize(n_threads);
651
652 _has_active_material_properties.resize(n_threads, 0);
653
654 _block_mat_side_cache.resize(n_threads);
655 _bnd_mat_side_cache.resize(n_threads);
656 _interface_mat_side_cache.resize(n_threads);
657
658 es().parameters.set<FEProblemBase *>("_fe_problem_base") = this;
659
660 if (isParamValid("restart_file_base"))
661 {
662 std::string restart_file_base = getParam<FileNameNoExtension>("restart_file_base");
663
664 // This check reverts to old behavior of providing "restart_file_base=" to mean
665 // don't restart... BISON currently relies on this. It could probably be removed.
666 // The new MooseUtils::convertLatestCheckpoint will error out if a checkpoint file
667 // is not found, which I think makes sense. Which means, without this, if you
668 // set "restart_file_base=", you'll get a "No checkpoint file found" error
669 if (restart_file_base.size())
670 {
671 restart_file_base = MooseUtils::convertLatestCheckpoint(restart_file_base);
672 setRestartFile(restart_file_base);
673 }
674 }
675
676 // // Generally speaking, the mesh is prepared for use, and consequently remote elements are deleted
677 // // well before our Problem(s) are constructed. Historically, in MooseMesh we have a bunch of
678 // // needs_prepare type flags that make it so we never call prepare_for_use (and consequently
679 // // delete_remote_elements) again. So the below line, historically, has had no impact. HOWEVER:
680 // // I've added some code in SetupMeshCompleteAction for deleting remote elements post
681 // // EquationSystems::init. If I execute that code without default ghosting, then I get > 40 MOOSE
682 // // test failures, so we clearly have some simulations that are not yet covered properly by
683 // // relationship managers. Until that is resolved, I am going to retain default geometric ghosting
684 // if (!_default_ghosting)
685 // _mesh.getMesh().remove_ghosting_functor(_mesh.getMesh().default_ghosting());
686
687#if !PETSC_RELEASE_LESS_THAN(3, 12, 0)
688 // Main app should hold the default database to handle system petsc options
689 if (!_app.isUltimateMaster())
690 LibmeshPetscCall(PetscOptionsCreate(&_petsc_option_data_base));
691#endif
692
693 if (!_solve)
694 {
695 // If we are not solving, we do not care about seeing unused petsc options
696 Moose::PetscSupport::setSinglePetscOption("-options_left", "0");
697 // We don't want petscSetOptions being called in solve and clearing the option that was just set
699 }
700}
const ExecFlagType EXEC_NONE
Definition Moose.C:30
void ErrorVector unsigned int
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
bool _previous_nl_solution_required
Indicates we need to save the previous NL iteration variable values.
std::shared_ptr< AuxiliarySystem > _aux
The auxiliary system.
std::vector< SubdomainName > _material_coverage_blocks
std::vector< VariablePhiSecond > _second_phi_zero
LinearSystem * _current_linear_sys
The current linear system that we are solving.
std::vector< VariablePhiGradient > _grad_phi_zero
const bool _using_default_nl
Boolean to check if we have the default nonlinear system.
ExecuteMooseObjectWarehouse< Transfer > _between_multi_app_transfers
Transfers executed just before MultiApps to transfer data between them.
std::vector< MooseArray< ADRealVectorValue > > _ad_grad_zero
const bool _allow_invalid_solution
const bool _skip_nl_system_check
std::vector< std::unordered_map< SubdomainID, bool > > _block_mat_side_cache
Cache for calculating materials on side.
std::vector< SolverParams > _solver_params
bool _verbose_multiapps
Whether or not to be verbose with multiapps.
const bool & _solve
Whether or not to actually solve the nonlinear system.
bool _parallel_barrier_messaging
Whether or not information about how many transfers have completed is printed.
const bool _identify_variable_groups_in_nl
Whether to identify variable groups in nonlinear systems. This affects dof ordering.
std::unique_ptr< MortarInterfaceWarehouse > _mortar_data
bool _has_dampers
Whether or not this system has any Dampers associated with it.
Moose::Kokkos::MaterialPropertyStorage & _kokkos_neighbor_material_props
ReporterData _reporter_data
std::vector< VariableGradient > _grad_zero
virtual libMesh::EquationSystems & es() override
ExecuteMooseObjectWarehouse< MultiApp > _multi_apps
MultiApp Warehouse.
std::vector< bool > _previous_multisystem_fp_nl_solution_required
Indicates we need to save the previous multi-system fixed-point iteration solver variable values.
bool _need_to_add_default_nonlinear_convergence
Flag that the problem needs to add the default nonlinear convergence.
const bool _boundary_restricted_node_integrity_check
whether to perform checking of boundary restricted nodal object variable dependencies,...
std::shared_ptr< LineSearch > _line_search
std::vector< VariableSecond > _second_zero
MaterialPropertyStorage & _material_props
virtual std::size_t numSolverSystems() const override
bool _needs_old_newton_iter
Indicates that we need to compute variable values for previous Newton iteration.
bool _reinit_displaced_neighbor
Whether to call DisplacedProblem::reinitNeighbor when this->reinitNeighbor is called.
std::vector< libMesh::CouplingMatrix > _nonlocal_cm
nonlocal coupling matrix
MaterialPropertyStorage & _neighbor_material_props
MooseMesh & _mesh
std::vector< std::shared_ptr< LinearSystem > > _linear_systems
The vector of linear systems.
ExecuteMooseObjectWarehouse< Transfer > _to_multi_app_transfers
Transfers executed just before MultiApps to transfer data to them.
ExecuteMooseObjectWarehouse< Transfer > _transfers
Normal Transfers.
void setRestartFile(const std::string &file_name)
Communicate to the Resurector the name of the restart filer.
friend class Restartable
std::map< NonlinearSystemName, unsigned int > _nl_sys_name_to_num
Map from nonlinear system name to number.
std::vector< std::unique_ptr< libMesh::CouplingMatrix > > _cm
Coupling matrix for variables.
std::vector< VectorVariableValue > _vector_zero
ExecuteMooseObjectWarehouse< Control > _control_warehouse
The control logic warehouse.
bool _preserve_matrix_sparsity_pattern
Whether to preserve the system matrix / Jacobian sparsity pattern, using 0-valued entries usually.
bool _snesmf_reuse_base_set_by_user
If or not _snesmf_reuse_base is set by user.
std::vector< VariablePhiValue > _phi_zero
libMesh::Order _max_scalar_order
Maximum scalar variable order.
CoverageCheckMode _kernel_coverage_check
Determines whether and which subdomains are to be checked to ensure that they have an active kernel.
GeometricSearchData _geometric_search_data
ExecFlagType _current_execute_on_flag
Current execute_on flag.
ExecuteMooseObjectWarehouse< TransientMultiApp > _transient_multi_apps
Storage for TransientMultiApps (only needed for calling 'computeDT')
Moose::Kokkos::MaterialPropertyStorage & _kokkos_bnd_material_props
const bool _use_hash_table_matrix_assembly
Whether to assemble matrices using hash tables instead of preallocating matrix memory.
bool _ignore_zeros_in_jacobian
Whether to ignore zeros in the Jacobian, thereby leading to a reduced sparsity pattern.
unsigned int _num_grid_steps
Number of steps in a grid sequence.
bool _need_to_add_default_multiapp_fixed_point_convergence
Flag that the problem needs to add the default fixed point convergence.
std::map< SolverSystemName, unsigned int > _solver_sys_name_to_num
Map connecting solver system names with their respective systems.
bool _has_nonlocal_coupling
Indicates if nonlocal coupling is required/exists.
Restartable::ManagedValue< RestartableEquationSystems > _req
The EquationSystems object, wrapped for restart.
const bool _force_restart
const bool _material_dependency_check
Determines whether a check to verify material dependencies on every subdomain.
const bool _regard_general_exceptions_as_errors
If we catch an exception during residual/Jacobian evaluaton for which we don't have specific handling...
const std::vector< LinearSystemName > _linear_sys_names
The linear system names.
bool _skip_exception_check
If or not skip 'exception and stop solve'.
unsigned short _current_ic_state
std::map< LinearSystemName, unsigned int > _linear_sys_name_to_num
Map from linear system name to number.
const std::size_t _num_linear_sys
The number of linear systems.
bool _u_dotdot_old_requested
Whether old solution second time derivative needs to be stored.
Moose::Kokkos::MaterialPropertyStorage & _kokkos_material_props
const bool _side_uo_interface_mat_prop_integrity_check
Whether to check that side user objects do not consume interface material properties.
bool _requires_nonlocal_coupling
nonlocal coupling requirement flag
const bool _restore_original_nonzero_pattern
Whether we should restore the original nonzero pattern for every Jacobian evaluation.
bool _fail_next_system_convergence_check
bool _reinit_displaced_elem
Whether to call DisplacedProblem::reinitElem when this->reinitElem is called.
std::vector< VariableValue > _scalar_zero
bool _fv_bcs_integrity_check
Whether to check overlapping Dirichlet and Flux BCs and/or multiple DirichletBCs per sideset.
bool _const_jacobian
true if the Jacobian is constant
bool _has_internal_edge_residual_objects
Whether the problem has dgkernels or interface kernels.
bool _error_on_jacobian_nonzero_reallocation
Whether to error when the Jacobian is re-allocated, usually because the sparsity pattern changed.
bool _u_dot_requested
Whether solution time derivative needs to be stored.
MaterialPropertyStorage & _bnd_material_props
unsigned int _max_qps
Maximum number of quadrature points used in the problem.
PetscOptions _petsc_option_data_base
bool _has_time_integrator
Indicates whether or not this executioner has a time integrator (during setup)
bool _input_file_saved
whether input file has been written
bool _previous_multiapp_fp_aux_solution_required
Indicates we need to save the previous multiapp fixed-point iteration auxiliary variable values.
std::vector< std::unordered_map< BoundaryID, bool > > _interface_mat_side_cache
Cache for calculating materials on interface.
MooseObjectWarehouse< MeshDivision > _mesh_divisions
Warehouse to store mesh divisions NOTE: this could probably be moved to the MooseMesh instead of the ...
Moose::Kokkos::Assembly _kokkos_assembly
MooseEnum _verbose_setup
Whether or not to be verbose during setup.
const bool _boundary_restricted_elem_integrity_check
whether to perform checking of boundary restricted elemental object variable dependencies,...
std::vector< std::unordered_map< BoundaryID, bool > > _bnd_mat_side_cache
Cache for calculating materials on side.
NonlinearSystemBase * _current_nl_sys
The current nonlinear system that we are solving.
const bool _uo_aux_state_check
Whether or not checking the state of uo/aux evaluation.
bool _started_initial_setup
At or beyond initialSteup stage.
Adaptivity _adaptivity
std::vector< SolverSystemName > _solver_sys_names
The union of nonlinear and linear system names.
bool _verbose_restore
Whether or not to be verbose on solution restoration post a failed time step.
const std::size_t _num_nl_sys
The number of nonlinear systems.
std::vector< VectorVariableCurl > _vector_curl_zero
bool _has_mortar
Whether the simulation requires mortar coupling.
std::vector< bool > _previous_multiapp_fp_nl_solution_required
Indicates we need to save the previous multiapp fixed-point iteration solver variable values.
const unsigned int _num_concurrent_multiapps
Number of concurrent applications being solved at the same time.
bool _need_to_add_default_steady_state_convergence
Flag that the problem needs to add the default steady convergence.
bool _calculate_jacobian_in_uo
bool _reinit_displaced_face
Whether to call DisplacedProblem::reinitElemFace when this->reinitElemFace is called.
bool _has_initialized_stateful
Whether nor not stateful materials have been initialized.
bool _has_constraints
Whether or not this system has any Constraints.
std::vector< std::shared_ptr< NonlinearSystemBase > > _nl
The nonlinear systems.
bool _snesmf_reuse_base
If or not to resuse the base vector for matrix-free calculation.
bool errorOnJacobianNonzeroReallocation() const
Will return True if the user wants to get an error when a nonzero is reallocated in the Jacobian by P...
bool _has_jacobian
Indicates if the Jacobian was computed.
std::vector< std::vector< const MooseVariableFEBase * > > _uo_jacobian_moose_vars
std::vector< unsigned char > _has_active_material_properties
Whether there are active material properties on each thread.
Moose::CouplingType _coupling
Type of variable coupling.
bool _has_exception
Whether or not an exception has occurred.
std::vector< Real > _real_zero
Convenience zeros.
const bool & _immediately_print_invalid_solution
bool _u_dot_old_requested
Whether old solution time derivative needs to be stored.
std::vector< MooseArray< ADRealTensorValue > > _ad_second_zero
bool _using_ad_mat_props
Automatic differentiaion (AD) flag which indicates whether any consumer has requested an AD material ...
static SolverParams makeLinearSolverParams()
Make basic solver params for linear solves.
unsigned int _cycles_completed
ExecFlagEnum _print_execution_on
When to print the execution of loops.
std::vector< Point > _point_zero
std::vector< MooseArray< ADReal > > _ad_zero
CoverageCheckMode _material_coverage_check
Determines whether and which subdomains are to be checked to ensure that they have an active material...
bool _u_dotdot_requested
Whether solution second time derivative needs to be stored.
bool _previous_multisystem_fp_aux_solution_required
Indicates we need to save the previous multi-system fixed-point iteration auxiliary variable values.
std::vector< VariableValue > _zero
std::vector< std::shared_ptr< SolverSystem > > _solver_systems
Combined container to base pointer of every solver system.
bool _is_petsc_options_inserted
If or not PETSc options have been added to database.
bool _check_residual_for_nans
Whether to check the residual for NaN or Inf values.
const std::vector< NonlinearSystemName > _nl_sys_names
The nonlinear system names.
const bool _fv_face_integrity_check
Whether to check FV boundary and interface objects against the faces on which they execute.
MooseMesh * _displaced_mesh
ExecuteMooseObjectWarehouse< Transfer > _from_multi_app_transfers
Transfers executed just after MultiApps to transfer data from them.
std::vector< SubdomainName > _kernel_coverage_blocks
MaterialPropertyRegistry _material_prop_registry
const bool _show_invalid_solution_console
const bool _allow_ics_during_restart
Stores the stateful material properties computed by materials.
bool isUltimateMaster() const
Whether or not this app is the ultimate master app.
Definition MooseApp.h:866
const InputParameters & parameters() const
Get the parameters of the object.
Definition MooseBase.h:131
const std::string & name() const
Get the name of the class.
Definition MooseBase.h:103
void paramError(const std::string &param, Args... args) const
Emits an error prefixed with the file and line number of the given param (from the input file) along ...
Definition MooseBase.h:457
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.
Definition MooseBase.h:205
const T & getParam(const std::string &name) const
Retrieve a parameter for the object.
Definition MooseBase.h:406
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
Definition MooseBase.h:199
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
Definition MooseEnum.h:55
MooseApp & _app
The MOOSE application this is associated with.
Definition MooseBase.h:375
T & declareRestartableDataWithContext(const std::string &data_name, void *context, Args &&... args)
Declare a piece of data as "restartable" and initialize it.
Generic class for solving transient nonlinear problems.
Definition SubProblem.h:79
T & set(const std::string &)
auto max(const L &left, const R &right)
std::string convertLatestCheckpoint(std::string orig)
Definition MooseUtils.C:168
void setSinglePetscOption(const std::string &name, const std::string &value="", FEProblemBase *const problem=nullptr)
A wrapper function for dealing with different versions of PetscOptionsSetValue.
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
@ COUPLING_DIAG
Definition MooseTypes.h:786
auto index_range(const T &sizable)
unsigned int n_threads()

◆ ~FEProblemBase()

FEProblemBase::~FEProblemBase ( )
virtual

Definition at line 859 of file FEProblemBase.C.

860{
861 // Flush the Console stream, the underlying call to Console::mooseConsole
862 // relies on a call to Output::checkInterval that has references to
863 // _time, etc. If it is not flushed here memory problems arise if you have
864 // an unflushed stream and start destructing things.
865 _console << std::flush;
866
867 unsigned int n_threads = libMesh::n_threads();
868 for (unsigned int i = 0; i < n_threads; i++)
869 {
870 _zero[i].release();
871 _phi_zero[i].release();
872 _scalar_zero[i].release();
873 _grad_zero[i].release();
874 _grad_phi_zero[i].release();
875 _second_zero[i].release();
876 _second_phi_zero[i].release();
877 _vector_zero[i].release();
878 _vector_curl_zero[i].release();
879 _ad_zero[i].release();
880 _ad_grad_zero[i].release();
881 _ad_second_zero[i].release();
882 }
883
884#if !PETSC_RELEASE_LESS_THAN(3, 12, 0)
885 if (!_app.isUltimateMaster())
886 {
887 auto ierr = PetscOptionsDestroy(&_petsc_option_data_base);
888 // Don't throw on destruction
889 CHKERRABORT(this->comm().get(), ierr);
890 }
891#endif
892}
const ConsoleStream _console
An instance of helper class to write streams to the Console objects.
const Parallel::Communicator & comm() const
const Elem & get(const ElemType type_in)

Member Function Documentation

◆ _setCLIOption()

void Problem::_setCLIOption ( )
inlineinherited

For Internal Use.

Definition at line 32 of file Problem.h.

32{ _cli_option_found = true; }
bool _cli_option_found
True if the CLI option is found.
Definition Problem.h:52

◆ acceptInvalidSolution()

bool FEProblemBase::acceptInvalidSolution ( ) const

Whether or not to accept the solution based on its invalidity.

If this returns false, it means that an invalid solution was encountered (an error) that was not allowed.

Definition at line 4147 of file FEProblemBase.C.

4148{
4149 return allowInvalidSolution() || // invalid solutions are always allowed
4150 !_app.solutionInvalidity().hasInvalidSolutionError(); // if not allowed, check for errors
4151}
bool allowInvalidSolution() const
Whether to accept / allow an invalid solution.
SolutionInvalidity & solutionInvalidity()
Get the SolutionInvalidity for this app.
Definition MooseApp.h:185
bool hasInvalidSolutionError() const
Whether or not an invalid solution was encountered that was an error.

Referenced by SolverSystem::checkInvalidSolution(), and NonlinearSystem::converged().

◆ adaptivity()

Adaptivity & FEProblemBase::adaptivity ( )
inline

Definition at line 2154 of file FEProblemBase.h.

2154{ return _adaptivity; }

Referenced by Eigenvalue::execute(), SteadyBase::execute(), and initialAdaptMesh().

◆ adaptMesh()

bool FEProblemBase::adaptMesh ( )
virtual
Returns
Whether or not the mesh was changed

Reimplemented in DumpObjectsProblem.

Definition at line 8893 of file FEProblemBase.C.

8894{
8895 // reset cycle counter
8897
8899 return false;
8900
8901 TIME_SECTION("adaptMesh", 3, "Adapting Mesh");
8902
8903 unsigned int cycles_per_step = _adaptivity.getCyclesPerStep();
8904
8905 bool mesh_changed = false;
8906
8907 for (unsigned int i = 0; i < cycles_per_step; ++i)
8908 {
8909 if (!_mesh.interiorLowerDBlocks().empty() || !_mesh.boundaryLowerDBlocks().empty())
8910 mooseError("HFEM does not support mesh adaptivity currently.");
8911
8912 // Markers were already computed once by Executioner
8913 if (_adaptivity.getRecomputeMarkersFlag() && i > 0)
8915
8916 bool mesh_changed_this_step;
8917 mesh_changed_this_step = _adaptivity.adaptMesh();
8918
8919 if (mesh_changed_this_step)
8920 {
8921 mesh_changed = true;
8922
8924 /*intermediate_change=*/true, /*contract_mesh=*/true, /*clean_refinement_flags=*/true);
8926 }
8927 else
8928 {
8929 // If the mesh didn't change, we still need to update the displaced mesh
8930 // to undo the undisplacement performed in Adaptivity::adaptMesh
8932 _displaced_problem->updateMesh();
8933
8934 _console << "Mesh unchanged, skipping remaining steps..." << std::endl;
8935 break;
8936 }
8937
8938 // Show adaptivity progress
8939 _console << std::flush;
8940 }
8941
8942 // We're done with all intermediate changes; now get systems ready
8943 // for real if necessary.
8944 if (mesh_changed)
8945 es().reinit_systems();
8946
8947 // Execute multi-apps that need to run after adaptivity, but before the next timestep.
8949
8950 return mesh_changed;
8951}
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
const ExecFlagType EXEC_POST_ADAPTIVITY
Definition Moose.C:61
unsigned int getCyclesPerStep() const
Pull out the number of cycles_per_step previously set through the AdaptivityAction.
Definition Adaptivity.h:126
bool getRecomputeMarkersFlag() const
Pull out the _recompute_markers_during_cycles flag previously set through the AdaptivityAction.
Definition Adaptivity.h:139
bool adaptMesh(std::string marker_name=std::string())
Adapts the mesh based on the error estimator used.
Definition Adaptivity.C:145
bool isAdaptivityDue()
Query if an adaptivity step should be performed at the current time / time step.
Definition Adaptivity.C:428
bool execMultiApps(ExecFlagType type, bool auto_advance=true)
Execute the MultiApps associated with the ExecFlagType.
std::shared_ptr< DisplacedProblem > _displaced_problem
virtual void computeMarkers()
virtual void meshChanged()
Deprecated.
const std::set< SubdomainID > & interiorLowerDBlocks() const
Definition MooseMesh.h:1550
const std::set< SubdomainID > & boundaryLowerDBlocks() const
Definition MooseMesh.h:1554
virtual void reinit_systems()

Referenced by Eigenvalue::execute(), SteadyBase::execute(), and TransientBase::incrementStepOrReject().

◆ addAlgebraicGhostingFunctor()

void SubProblem::addAlgebraicGhostingFunctor ( libMesh::GhostingFunctor algebraic_gf,
bool  to_mesh = true 
)
inherited

Add an algebraic ghosting functor to this problem's DofMaps.

Definition at line 1038 of file SubProblem.C.

1039{
1040 EquationSystems & eq = es();
1041 const auto n_sys = eq.n_systems();
1042 if (!n_sys)
1043 return;
1044
1045 eq.get_system(0).get_dof_map().add_algebraic_ghosting_functor(algebraic_gf, to_mesh);
1046 cloneAlgebraicGhostingFunctor(algebraic_gf, to_mesh);
1047}
void cloneAlgebraicGhostingFunctor(libMesh::GhostingFunctor &algebraic_gf, bool to_mesh=true)
Creates (n_sys - 1) clones of the provided algebraic ghosting functor (corresponding to the nonlinear...
virtual libMesh::EquationSystems & es()=0

◆ addAnyRedistributers()

void FEProblemBase::addAnyRedistributers ( )
private

Definition at line 6775 of file FEProblemBase.C.

6776{
6777#ifdef LIBMESH_ENABLE_AMR
6778 if ((_adaptivity.isOn() || _num_grid_steps) &&
6781 {
6782 // Even on a serialized Mesh, we don't keep our material
6783 // properties serialized, so we'll rely on the callback to
6784 // redistribute() to redistribute properties at the same time
6785 // libMesh is redistributing elements.
6786 auto add_redistributer = [this](MooseMesh & mesh,
6787 const std::string & redistributer_name,
6788 const bool use_displaced_mesh)
6789 {
6791 redistribute_params.set<MooseApp *>(MooseBase::app_param) = &_app;
6792 redistribute_params.set<std::string>("for_whom") = this->name();
6793 redistribute_params.set<MooseMesh *>("mesh") = &mesh;
6794 redistribute_params.set<Moose::RelationshipManagerType>("rm_type") =
6796 redistribute_params.set<bool>("use_displaced_mesh") = use_displaced_mesh;
6797 redistribute_params.setHitNode(*parameters().getHitNode(), {});
6798
6799 std::shared_ptr<RedistributeProperties> redistributer =
6801 "RedistributeProperties", redistributer_name, redistribute_params);
6802
6805
6807 redistributer->addMaterialPropertyStorage(_bnd_material_props);
6808
6810 redistributer->addMaterialPropertyStorage(_neighbor_material_props);
6811
6812 mesh.getMesh().add_ghosting_functor(redistributer);
6813 };
6814
6815 add_redistributer(_mesh, "mesh_property_redistributer", false);
6817 add_redistributer(_displaced_problem->mesh(), "displaced_mesh_property_redistributer", true);
6818 }
6819#endif // LIBMESH_ENABLE_AMR
6820}
bool isOn()
Is adaptivity on?
Definition Adaptivity.h:193
virtual MooseMesh & mesh() override
std::shared_ptr< MooseObject > create(const std::string &obj_name, const std::string &name, const InputParameters &parameters, THREAD_ID tid=0, bool print_deprecated=true)
Definition Factory.C:142
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
void setHitNode(const std::string &param, const hit::Node &node, const SetParamHitNodeKey)
Sets the hit node associated with the parameter param to node.
const hit::Node * getHitNode(const std::string &param) const
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
Base class for MOOSE-based applications.
Definition MooseApp.h:110
static const std::string app_param
The name of the parameter that contains the MooseApp.
Definition MooseBase.h:59
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
Definition MooseMesh.h:95
MeshBase & getMesh()
Accessor for the underlying libMesh Mesh object.
Definition MooseMesh.C:3512
RedistributeProperties is used for its redistribute() callback, which ensures that any stateful prope...
static InputParameters validParams()
void addMaterialPropertyStorage(MaterialPropertyStorage &mat_props)
Pushes the given pair ( mat_data , mat_props ) onto our list of _materials data to redistribute each ...
Factory & _factory
The Factory for building objects.
RelationshipManagerType
Main types of Relationship Managers.

◆ addAuxArrayVariable()

void FEProblemBase::addAuxArrayVariable ( const std::string &  var_name,
const libMesh::FEType type,
unsigned int  components,
const std::set< SubdomainID > *const  active_subdomains = NULL 
)
virtual

Definition at line 3472 of file FEProblemBase.C.

3476{
3477 parallel_object_only();
3478
3479 mooseDeprecated("Please use the addAuxVariable(var_type, var_name, params) API instead");
3480
3481 if (duplicateVariableCheck(var_name, type, /* is_aux = */ true, active_subdomains))
3482 return;
3483
3484 InputParameters params = _factory.getValidParams("ArrayMooseVariable");
3485 params.set<FEProblemBase *>("_fe_problem_base") = this;
3487 params.set<MooseEnum>("order") = type.order.get_order();
3488 params.set<MooseEnum>("family") = Moose::stringify(type.family);
3489 params.set<unsigned int>("components") = components;
3490
3491 if (active_subdomains)
3492 for (const SubdomainID & id : *active_subdomains)
3493 params.set<std::vector<SubdomainName>>("block").push_back(Moose::stringify(id));
3494
3495 logAdd("Variable", var_name, "ArrayMooseVariable", params);
3496 _aux->addVariable("ArrayMooseVariable", var_name, params);
3498 _displaced_problem->addAuxVariable("ArrayMooseVariable", var_name, params);
3499
3500 markFamilyPRefinement(params);
3502 _displaced_problem->markFamilyPRefinement(params);
3503}
subdomain_id_type SubdomainID
void mooseDeprecated(Args &&... args)
Emit a deprecated code/feature message with the given stringified, concatenated args.
Definition MooseError.h:363
void logAdd(const std::string &system, const std::string &name, const std::string &type, const InputParameters &params) const
Output information about the object just added to the problem.
bool duplicateVariableCheck(const std::string &var_name, const libMesh::FEType &type, bool is_aux, const std::set< SubdomainID > *const active_subdomains)
Helper to check for duplicate variable names across systems or within a single system.
InputParameters getValidParams(const std::string &name) const
Get valid parameters for the object.
Definition Factory.C:68
const std::string & type() const
Get the type of this class.
Definition MooseBase.h:93
void markFamilyPRefinement(const InputParameters &params)
Mark a variable family for either disabling or enabling p-refinement with valid parameters of a varia...
std::string stringify(const T &t)
conversion to string
Definition Conversion.h:64
VarKindType
Framework-wide stuff.
Definition MooseTypes.h:769
@ VAR_AUXILIARY
Definition MooseTypes.h:771
std::string stringify(MOOSEIOType type)
Definition NEML2Utils.C:18

◆ addAuxKernel()

void FEProblemBase::addAuxKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Reimplemented in MFEMProblem.

Definition at line 3540 of file FEProblemBase.C.

3543{
3544 parallel_object_only();
3545
3546 setAuxKernelParamsAndLog(kernel_name, name, parameters, "AuxKernel");
3547
3548 _aux->addKernel(kernel_name, name, parameters);
3549}
void setAuxKernelParamsAndLog(const std::string &ak_name, const std::string &name, InputParameters &parameters, const std::string &base_name)
Set the subproblem and system parameters for auxiliary kernels and log their addition.

◆ addAuxScalarKernel()

void FEProblemBase::addAuxScalarKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 3552 of file FEProblemBase.C.

3555{
3556 parallel_object_only();
3557
3558 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
3559 {
3560 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
3561 parameters.set<SystemBase *>("_sys") = &_displaced_problem->auxSys();
3562 }
3563 else
3564 {
3565 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
3566 {
3567 // We allow AuxScalarKernels to request that they use_displaced_mesh,
3568 // but then be overridden when no displacements variables are
3569 // provided in the Mesh block. If that happened, update the value
3570 // of use_displaced_mesh appropriately for this AuxScalarKernel.
3571 if (parameters.have_parameter<bool>("use_displaced_mesh"))
3572 parameters.set<bool>("use_displaced_mesh") = false;
3573 }
3574
3575 parameters.set<SubProblem *>("_subproblem") = this;
3576 parameters.set<SystemBase *>("_sys") = _aux.get();
3577 }
3578
3579 logAdd("AuxScalarKernel", name, kernel_name, parameters);
3580 _aux->addScalarKernel(kernel_name, name, parameters);
3581}
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
Combine two vector parameters into a single vector of pairs.
bool have_parameter(std::string_view name) const
A wrapper around the Parameters base class method.
Base class for a system (of equations)
Definition SystemBase.h:87

◆ addAuxScalarVariable()

void FEProblemBase::addAuxScalarVariable ( const std::string &  var_name,
libMesh::Order  order,
Real  scale_factor = 1.,
const std::set< SubdomainID > *const  active_subdomains = NULL 
)
virtual

Definition at line 3506 of file FEProblemBase.C.

3510{
3511 parallel_object_only();
3512
3513 mooseDeprecated("Please use the addAuxVariable(var_type, var_name, params) API instead");
3514
3515 if (order > _max_scalar_order)
3516 _max_scalar_order = order;
3517
3518 FEType type(order, SCALAR);
3519 if (duplicateVariableCheck(var_name, type, /* is_aux = */ true, active_subdomains))
3520 return;
3521
3522 InputParameters params = _factory.getValidParams("MooseVariableScalar");
3523 params.set<FEProblemBase *>("_fe_problem_base") = this;
3525
3526 params.set<MooseEnum>("order") = type.order.get_order();
3527 params.set<MooseEnum>("family") = "SCALAR";
3528 params.set<std::vector<Real>>("scaling") = std::vector<Real>{1};
3529 if (active_subdomains)
3530 for (const SubdomainID & id : *active_subdomains)
3531 params.set<std::vector<SubdomainName>>("block").push_back(Moose::stringify(id));
3532
3533 logAdd("ScalarVariable", var_name, "MooseVariableScalar", params);
3534 _aux->addVariable("MooseVariableScalar", var_name, params);
3536 _displaced_problem->addAuxVariable("MooseVariableScalar", var_name, params);
3537}

◆ addAuxVariable() [1/2]

virtual void FEProblemBase::addAuxVariable ( const std::string &  var_name,
const libMesh::FEType type,
const std::set< SubdomainID > *const  active_subdomains = NULL 
)
virtual

Reimplemented in DumpObjectsProblem.

◆ addAuxVariable() [2/2]

void FEProblemBase::addAuxVariable ( const std::string &  var_type,
const std::string &  var_name,
InputParameters params 
)
virtual

Canonical method for adding an auxiliary variable.

Parameters
var_typethe type of the variable, e.g. MooseVariableScalar
var_namethe variable name, e.g. 'u'
paramsthe InputParameters from which to construct the variable

Reimplemented in MFEMProblem, and DumpObjectsProblem.

Definition at line 3389 of file FEProblemBase.C.

3392{
3393 parallel_object_only();
3394
3395 const auto order = Utility::string_to_enum<Order>(params.get<MooseEnum>("order"));
3396 const auto family = Utility::string_to_enum<FEFamily>(params.get<MooseEnum>("family"));
3397 const auto fe_type = FEType(order, family);
3398
3399 const auto active_subdomains_vector =
3400 _mesh.getSubdomainIDs(params.get<std::vector<SubdomainName>>("block"));
3401 const std::set<SubdomainID> active_subdomains(active_subdomains_vector.begin(),
3402 active_subdomains_vector.end());
3403
3404 if (duplicateVariableCheck(var_name, fe_type, /* is_aux = */ true, &active_subdomains))
3405 return;
3406
3407 params.set<FEProblemBase *>("_fe_problem_base") = this;
3409
3410 logAdd("AuxVariable", var_name, var_type, params);
3411 _aux->addVariable(var_type, var_name, params);
3413 // MooseObjects need to be unique so change the name here
3414 _displaced_problem->addAuxVariable(var_type, var_name, params);
3415
3416 markFamilyPRefinement(params);
3418 _displaced_problem->markFamilyPRefinement(params);
3419}
std::vector< SubdomainID > getSubdomainIDs(const std::vector< SubdomainName > &subdomain_names) const
Get the associated subdomainIDs for the subdomain names that are passed in.
Definition MooseMesh.C:1684

Referenced by addElementalFieldVariable(), and AddAuxVariableAction::init().

◆ addBoundaryCondition()

void FEProblemBase::addBoundaryCondition ( const std::string &  bc_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Reimplemented in MFEMProblem.

Definition at line 3318 of file FEProblemBase.C.

3321{
3322 parallel_object_only();
3323
3324 const auto nl_sys_num = determineSolverSystem(parameters.varName("variable", name), true).second;
3325 if (!isSolverSystemNonlinear(nl_sys_num))
3326 mooseError(
3327 "You are trying to add a BoundaryCondition to a linear variable/system, which is not "
3328 "supported at the moment!");
3329
3331 bc_name, name, parameters, nl_sys_num, "BoundaryCondition", _reinit_displaced_face);
3332 _nl[nl_sys_num]->addBoundaryCondition(bc_name, name, parameters);
3333}
bool isSolverSystemNonlinear(const unsigned int sys_num)
Check if the solver system is nonlinear.
void setResidualObjectParamsAndLog(const std::string &ro_name, const std::string &name, InputParameters &parameters, const unsigned int nl_sys_num, const std::string &base_name, bool &reinit_displaced)
Set the subproblem and system parameters for residual objects and log their addition.
virtual std::pair< bool, unsigned int > determineSolverSystem(const std::string &var_name, bool error_if_not_found=false) const override
Determine what solver system the provided variable name lies in.
std::string varName(const std::string &var_param_name, const std::string &moose_object_with_var_param_name) const
Determine the actual variable name from the given variable \emph parameter name.

Referenced by DiffusionCG::addBoundaryConditionsFromComponents(), and DiffusionCG::addFEBCs().

◆ addCachedJacobian()

void FEProblemBase::addCachedJacobian ( const THREAD_ID  tid)
overridevirtual

◆ addCachedResidual()

void FEProblemBase::addCachedResidual ( const THREAD_ID  tid)
overridevirtual

◆ addCachedResidualDirectly()

void FEProblemBase::addCachedResidualDirectly ( NumericVector< libMesh::Number > &  residual,
const THREAD_ID  tid 
)
virtual

Allows for all the residual contributions that are currently cached to be added directly into the vector passed in.

Parameters
residualThe vector to add the cached contributions to.
tidThe thread id.

Definition at line 2099 of file FEProblemBase.C.

2100{
2102 _assembly[tid][_current_nl_sys->number()]->addCachedResidualDirectly(
2104
2106 _assembly[tid][_current_nl_sys->number()]->addCachedResidualDirectly(
2108
2109 std::vector<VectorTag> extra_residual_vector_tags;
2110 extra_residual_vector_tags.reserve(currentResidualVectorTags().size());
2111 const auto time_tag = _current_nl_sys->timeVectorTag();
2112 const auto non_time_tag = _current_nl_sys->nonTimeVectorTag();
2113 for (const auto & vector_tag : currentResidualVectorTags())
2114 if (vector_tag._id != time_tag && vector_tag._id != non_time_tag)
2115 extra_residual_vector_tags.push_back(vector_tag);
2116
2117 // Flush extra vector tag caches (e.g. from extra_vector_tags on NodalConstraints)
2118 // to their respective system vectors after the standard TIME/NONTIME caches above.
2119 // Without this, NodalConstraint contributions to extra vector tags are silently
2120 // discarded by the blanket clearCachedResiduals.
2121 _assembly[tid][_current_nl_sys->number()]->addCachedResiduals(Assembly::GlobalDataKey{},
2122 extra_residual_vector_tags);
2123
2124 // We do this because by adding the cached residual directly, we cannot ensure that all of the
2125 // cached residuals are emptied after only the two add calls above
2126 _assembly[tid][_current_nl_sys->number()]->clearCachedResiduals(Assembly::GlobalDataKey{});
2127
2129 _displaced_problem->addCachedResidualDirectly(residual, tid);
2130}
if(!dmm->_nl) SETERRQ(PETSC_COMM_WORLD
Key structure for APIs manipulating global vectors/matrices.
Definition Assembly.h:836
virtual const std::vector< VectorTag > & currentResidualVectorTags() const override
Return the residual vector tags we are currently computing.
std::vector< std::vector< std::unique_ptr< Assembly > > > _assembly
The Assembly objects.
TagID timeVectorTag() const override
Ideally, we should not need this API.
TagID nonTimeVectorTag() const override
virtual const VectorTag & getVectorTag(const TagID tag_id) const
Get a VectorTag from a TagID.
Definition SubProblem.C:160
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition SystemBase.C:923
unsigned int number() const
Gets the number of this system.

Referenced by NonlinearSystemBase::constraintResiduals(), and NonlinearSystemBase::enforceNodalConstraintsResidual().

◆ addConstraint()

void FEProblemBase::addConstraint ( const std::string &  c_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 3336 of file FEProblemBase.C.

3339{
3340 parallel_object_only();
3341
3342 _has_constraints = true;
3343
3344 auto determine_var_param_name = [&parameters, this]()
3345 {
3346 if (parameters.isParamValid("variable"))
3347 return "variable";
3348 else
3349 {
3350 // must be a mortar constraint
3351 const bool has_secondary_var = parameters.isParamValid("secondary_variable");
3352 const bool has_primary_var = parameters.isParamValid("primary_variable");
3353 if (!has_secondary_var && !has_primary_var)
3354 mooseError(
3355 "Either a 'secondary_variable' or 'primary_variable' parameter must be supplied for '",
3357 "'");
3358 return has_secondary_var ? "secondary_variable" : "primary_variable";
3359 }
3360 };
3361
3362 const auto nl_sys_num =
3363 determineSolverSystem(parameters.varName(determine_var_param_name(), name), true).second;
3364 if (!isSolverSystemNonlinear(nl_sys_num))
3365 mooseError("You are trying to add a Constraint to a linear variable/system, which is not "
3366 "supported at the moment!");
3367
3368 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
3369 {
3370 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
3371 parameters.set<SystemBase *>("_sys") = &_displaced_problem->solverSys(nl_sys_num);
3373 }
3374 else
3375 {
3376 // It might _want_ to use a displaced mesh... but we're not so set it to false
3377 if (parameters.have_parameter<bool>("use_displaced_mesh"))
3378 parameters.set<bool>("use_displaced_mesh") = false;
3379
3380 parameters.set<SubProblem *>("_subproblem") = this;
3381 parameters.set<SystemBase *>("_sys") = _nl[nl_sys_num].get();
3382 }
3383
3384 logAdd("Constraint", name, c_name, parameters);
3385 _nl[nl_sys_num]->addConstraint(c_name, name, parameters);
3386}
const std::string & getObjectName() const
bool isParamValid(const std::string &name) const
This method returns parameters that have been initialized in one fashion or another,...

◆ addConsumedPropertyName()

void SubProblem::addConsumedPropertyName ( const MooseObjectName obj_name,
const std::string &  prop_name 
)
inherited

Helper for tracking the object that is consuming a property for MaterialPropertyDebugOutput.

Definition at line 735 of file SubProblem.C.

736{
737 _consumed_material_properties[obj_name].insert(prop_name);
738}
std::map< MooseObjectName, std::set< std::string > > _consumed_material_properties

Referenced by MaterialPropertyInterface::addConsumedPropertyName().

◆ addConvergence()

void FEProblemBase::addConvergence ( const std::string &  type,
const std::string &  name,
InputParameters parameters 
)
virtual

Adds a Convergence object.

Definition at line 2723 of file FEProblemBase.C.

2726{
2727 parallel_object_only();
2728
2729 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); tid++)
2730 {
2731 std::shared_ptr<Convergence> conv = _factory.create<Convergence>(type, name, parameters, tid);
2732 _convergences.addObject(conv, tid);
2733 }
2734}
unsigned int THREAD_ID
Definition MooseTypes.h:237
Base class for convergence criteria.
Definition Convergence.h:26
MooseObjectWarehouse< Convergence > _convergences
convergence warehouse
virtual void addObject(std::shared_ptr< T > object, THREAD_ID tid=0, bool recurse=true) override
Adds an object to the storage structure.

Referenced by addDefaultMultiAppFixedPointConvergence(), addDefaultNonlinearConvergence(), ReferenceResidualProblem::addDefaultNonlinearConvergence(), and addDefaultSteadyStateConvergence().

◆ addCouplingGhostingFunctor()

void SubProblem::addCouplingGhostingFunctor ( libMesh::GhostingFunctor coupling_gf,
bool  to_mesh = true 
)
inherited

Add a coupling functor to this problem's DofMaps.

Definition at line 1071 of file SubProblem.C.

1072{
1073 const auto num_nl_sys = numNonlinearSystems();
1074 if (!num_nl_sys)
1075 return;
1076
1077 systemBaseNonlinear(0).system().get_dof_map().add_coupling_functor(coupling_gf, to_mesh);
1078 cloneCouplingGhostingFunctor(coupling_gf, to_mesh);
1079}
virtual std::size_t numNonlinearSystems() const =0
virtual const SystemBase & systemBaseNonlinear(const unsigned int sys_num) const =0
Return the nonlinear system object as a base class reference given the system number.
void cloneCouplingGhostingFunctor(libMesh::GhostingFunctor &coupling_gf, bool to_mesh=true)
Creates (n_sys - 1) clones of the provided coupling ghosting functor (corresponding to the nonlinear ...
virtual libMesh::System & system()=0
Get the reference to the libMesh system.
void add_coupling_functor(GhostingFunctor &coupling_functor, bool to_mesh=true)
const DofMap & get_dof_map() const

◆ addDamper()

void FEProblemBase::addDamper ( const std::string &  damper_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 5805 of file FEProblemBase.C.

5808{
5809 parallel_object_only();
5810
5811 const auto nl_sys_num =
5812 parameters.isParamValid("variable")
5813 ? determineSolverSystem(parameters.varName("variable", name), true).second
5814 : (unsigned int)0;
5815
5816 if (!isSolverSystemNonlinear(nl_sys_num))
5817 mooseError("You are trying to add a DGKernel to a linear variable/system, which is not "
5818 "supported at the moment!");
5819
5820 parameters.set<SubProblem *>("_subproblem") = this;
5821 parameters.set<SystemBase *>("_sys") = _nl[nl_sys_num].get();
5822
5823 _has_dampers = true;
5824 logAdd("Damper", name, damper_name, parameters);
5825 _nl[nl_sys_num]->addDamper(damper_name, name, parameters);
5826}

◆ addDefaultMultiAppFixedPointConvergence()

void FEProblemBase::addDefaultMultiAppFixedPointConvergence ( const InputParameters params)

Adds the default fixed point Convergence associated with the problem.

This is called if the user does not supply 'multiapp_fixed_point_convergence'.

Parameters
[in]paramsParameters to apply to Convergence parameters

Definition at line 2749 of file FEProblemBase.C.

2750{
2751 const std::string class_name = "DefaultMultiAppFixedPointConvergence";
2752 InputParameters params = _factory.getValidParams(class_name);
2753 params.applyParameters(params_to_apply);
2754 params.applyParameters(parameters());
2755 params.set<bool>("added_as_default") = true;
2757}
virtual void addConvergence(const std::string &type, const std::string &name, InputParameters &parameters)
Adds a Convergence object.
const ConvergenceName & getMultiAppFixedPointConvergenceName() const
Gets the MultiApp fixed point convergence object name.
void applyParameters(const InputParameters &common, const std::vector< std::string > &exclude={}, const bool allow_private=false)
Method for applying common parameters.

◆ addDefaultNonlinearConvergence()

void FEProblemBase::addDefaultNonlinearConvergence ( const InputParameters params)
virtual

Adds the default nonlinear Convergence associated with the problem.

This is called if the user does not supply 'nonlinear_convergence'.

Parameters
[in]paramsParameters to apply to Convergence parameters

Reimplemented in ReferenceResidualProblem.

Definition at line 2737 of file FEProblemBase.C.

2738{
2739 const std::string class_name = "DefaultNonlinearConvergence";
2740 InputParameters params = _factory.getValidParams(class_name);
2741 params.applyParameters(params_to_apply);
2742 params.applyParameters(parameters());
2743 params.set<bool>("added_as_default") = true;
2744 for (const auto & conv_name : getNonlinearConvergenceNames())
2745 addConvergence(class_name, conv_name, params);
2746}
const std::vector< ConvergenceName > & getNonlinearConvergenceNames() const
Gets the nonlinear system convergence object name(s).

◆ addDefaultSteadyStateConvergence()

void FEProblemBase::addDefaultSteadyStateConvergence ( const InputParameters params)

Adds the default steady-state detection Convergence.

This is called if the user does not supply 'steady_state_convergence'.

Parameters
[in]paramsParameters to apply to Convergence parameters

Definition at line 2760 of file FEProblemBase.C.

2761{
2762 const std::string class_name = "DefaultSteadyStateConvergence";
2763 InputParameters params = _factory.getValidParams(class_name);
2764 params.applyParameters(params_to_apply);
2765 params.applyParameters(parameters());
2766 params.set<bool>("added_as_default") = true;
2767 addConvergence(class_name, getSteadyStateConvergenceName(), params);
2768}
const ConvergenceName & getSteadyStateConvergenceName() const
Gets the steady-state detection convergence object name.

◆ addDGKernel()

void FEProblemBase::addDGKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 3624 of file FEProblemBase.C.

3627{
3628 parallel_object_only();
3629
3630 const auto nl_sys_num = determineSolverSystem(parameters.varName("variable", name), true).second;
3631 if (!isSolverSystemNonlinear(nl_sys_num))
3632 mooseError("You are trying to add a DGKernel to a linear variable/system, which is not "
3633 "supported at the moment!");
3634
3635 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
3636 {
3637 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
3638 parameters.set<SystemBase *>("_sys") = &_displaced_problem->solverSys(nl_sys_num);
3640 }
3641 else
3642 {
3643 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
3644 {
3645 // We allow DGKernels to request that they use_displaced_mesh,
3646 // but then be overridden when no displacements variables are
3647 // provided in the Mesh block. If that happened, update the value
3648 // of use_displaced_mesh appropriately for this DGKernel.
3649 if (parameters.have_parameter<bool>("use_displaced_mesh"))
3650 parameters.set<bool>("use_displaced_mesh") = false;
3651 }
3652
3653 parameters.set<SubProblem *>("_subproblem") = this;
3654 parameters.set<SystemBase *>("_sys") = _nl[nl_sys_num].get();
3655 }
3656
3657 logAdd("DGKernel", name, dg_kernel_name, parameters);
3658 _nl[nl_sys_num]->addDGKernel(dg_kernel_name, name, parameters);
3659
3661}

◆ addDiracKernel()

void FEProblemBase::addDiracKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 3584 of file FEProblemBase.C.

3587{
3588 parallel_object_only();
3589
3590 const auto nl_sys_num = determineSolverSystem(parameters.varName("variable", name), true).second;
3591 if (!isSolverSystemNonlinear(nl_sys_num))
3592 mooseError("You are trying to add a DiracKernel to a linear variable/system, which is not "
3593 "supported at the moment!");
3594
3595 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
3596 {
3597 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
3598 parameters.set<SystemBase *>("_sys") = &_displaced_problem->solverSys(nl_sys_num);
3600 }
3601 else
3602 {
3603 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
3604 {
3605 // We allow DiracKernels to request that they use_displaced_mesh,
3606 // but then be overridden when no displacements variables are
3607 // provided in the Mesh block. If that happened, update the value
3608 // of use_displaced_mesh appropriately for this DiracKernel.
3609 if (parameters.have_parameter<bool>("use_displaced_mesh"))
3610 parameters.set<bool>("use_displaced_mesh") = false;
3611 }
3612
3613 parameters.set<SubProblem *>("_subproblem") = this;
3614 parameters.set<SystemBase *>("_sys") = _nl[nl_sys_num].get();
3615 }
3616
3617 logAdd("DiracKernel", name, kernel_name, parameters);
3618 _nl[nl_sys_num]->addDiracKernel(kernel_name, name, parameters);
3619}

◆ addDisplacedProblem()

void FEProblemBase::addDisplacedProblem ( std::shared_ptr< DisplacedProblem displaced_problem)
virtual

Definition at line 8692 of file FEProblemBase.C.

8693{
8694 parallel_object_only();
8695
8698}
std::shared_ptr< DisplacedProblem > displaced_problem

◆ addDistribution()

void FEProblemBase::addDistribution ( const std::string &  type,
const std::string &  name,
InputParameters parameters 
)
virtual

The following functions will enable MOOSE to have the capability to import distributions.

Definition at line 2896 of file FEProblemBase.C.

2899{
2900 parameters.set<std::string>("type") = type;
2901 addObject<Distribution>(type, name, parameters, /* threaded = */ false);
2902}

◆ addElementalFieldVariable()

void FEProblemBase::addElementalFieldVariable ( const std::string &  var_type,
const std::string &  var_name,
InputParameters params 
)
virtual

Add an elemental field variable for use in the adaptivity system.

Reimplemented in MFEMProblem.

Definition at line 3422 of file FEProblemBase.C.

3425{
3426 addAuxVariable(var_type, var_name, params);
3427}
virtual void addAuxVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
Canonical method for adding an auxiliary variable.

Referenced by AddElementalFieldAction::init().

◆ addFunction()

void FEProblemBase::addFunction ( const std::string &  type,
const std::string &  name,
InputParameters parameters 
)
virtual

Reimplemented in MFEMProblem.

Definition at line 2697 of file FEProblemBase.C.

2700{
2701 parallel_object_only();
2702
2703 parameters.set<SubProblem *>("_subproblem") = this;
2704
2705 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); tid++)
2706 {
2707 std::shared_ptr<Function> func = _factory.create<Function>(type, name, parameters, tid);
2708 logAdd("Function", name, type, parameters);
2709 _functions.addObject(func, tid);
2710
2711 if (auto * const functor = dynamic_cast<Moose::FunctorBase<Real> *>(func.get()))
2712 {
2713 this->addFunctor(name, *functor, tid);
2715 _displaced_problem->addFunctor(name, *functor, tid);
2716 }
2717 else
2718 mooseError("Unrecognized function functor type");
2719 }
2720}
MooseObjectWarehouse< Function > _functions
functions
Base class for function objects.
Definition Function.h:30
Base class template for functor objects.
void addFunctor(const std::string &name, const Moose::FunctorBase< T > &functor, const THREAD_ID tid)
add a functor to the problem functor container

Referenced by MFEMProblem::addFunction(), and getFunction().

◆ addFunctor()

template<typename T >
void SubProblem::addFunctor ( const std::string &  name,
const Moose::FunctorBase< T > &  functor,
const THREAD_ID  tid 
)
inherited

add a functor to the problem functor container

Definition at line 1393 of file SubProblem.h.

1396{
1397 constexpr bool added_functor_is_ad =
1398 !std::is_same<T, typename MetaPhysicL::RawType<T>::value_type>::value;
1399
1400 mooseAssert(tid < _functors.size(), "Too large a thread ID");
1401
1402 auto & functor_to_request_info = _functor_to_request_info[tid];
1403 auto & functors = _functors[tid];
1404 auto it = functors.find("wraps_" + name);
1405 if (it != functors.end())
1406 {
1407 // We have this functor already. If it's a null functor, we want to replace it with the valid
1408 // functor we have now. If it's not then we'll add a new entry into the multimap and then we'll
1409 // error later if a user requests a functor because their request is ambiguous. This is the
1410 // reason that the functors container is a multimap: for nice error messages
1411 auto * const existing_wrapper_base =
1412 added_functor_is_ad ? std::get<2>(it->second).get() : std::get<1>(it->second).get();
1413 auto * const existing_wrapper = dynamic_cast<Moose::Functor<T> *>(existing_wrapper_base);
1414 if (existing_wrapper && existing_wrapper->template wrapsType<Moose::NullFunctor<T>>())
1415 {
1416 // Sanity check
1417 auto [request_info_it, request_info_end_it] = functor_to_request_info.equal_range(name);
1418 if (request_info_it == request_info_end_it)
1419 mooseError("We are wrapping a NullFunctor but we don't have any unfilled functor request "
1420 "info. This doesn't make sense.");
1421
1422 // Check for valid requests
1423 while (request_info_it != request_info_end_it)
1424 {
1425 auto & [requested_functor_is_ad, requestor_is_ad] = request_info_it->second;
1426 if (!requested_functor_is_ad && requestor_is_ad && added_functor_is_ad)
1427 mooseError("We are requesting a non-AD functor '" + name +
1428 "' from an AD object, but the true functor is AD. This means we could be "
1429 "dropping important derivatives. We will not allow this");
1430 // We're going to eventually check whether we've fulfilled all functor requests and our
1431 // check will be that the multimap is empty. This request is fulfilled, so erase it from the
1432 // map now
1433 request_info_it = functor_to_request_info.erase(request_info_it);
1434 }
1435
1436 // Ok we didn't have the functor before, so we will add it now
1437 std::get<0>(it->second) =
1439 existing_wrapper->assign(functor);
1440 // Finally we create the non-AD or AD complement of the just added functor
1441 if constexpr (added_functor_is_ad)
1442 {
1443 typedef typename MetaPhysicL::RawType<T>::value_type NonADType;
1444 auto * const existing_non_ad_wrapper_base = std::get<1>(it->second).get();
1445 auto * const existing_non_ad_wrapper =
1446 dynamic_cast<Moose::Functor<NonADType> *>(existing_non_ad_wrapper_base);
1447 mooseAssert(existing_non_ad_wrapper->template wrapsType<Moose::NullFunctor<NonADType>>(),
1448 "Both members of pair should have been wrapping a NullFunctor");
1449 existing_non_ad_wrapper->assign(
1450 std::make_unique<Moose::RawValueFunctor<NonADType>>(functor));
1451 }
1452 else
1453 {
1454 typedef typename Moose::ADType<T>::type ADType;
1455 auto * const existing_ad_wrapper_base = std::get<2>(it->second).get();
1456 auto * const existing_ad_wrapper =
1457 dynamic_cast<Moose::Functor<ADType> *>(existing_ad_wrapper_base);
1458 mooseAssert(existing_ad_wrapper->template wrapsType<Moose::NullFunctor<ADType>>(),
1459 "Both members of pair should have been wrapping a NullFunctor");
1460 existing_ad_wrapper->assign(std::make_unique<Moose::ADWrapperFunctor<ADType>>(functor));
1461 }
1462 return;
1463 }
1464 else if (!existing_wrapper)
1465 {
1466 // Functor was emplaced but the cast failed. This could be a double definition with
1467 // different types, or it could be a request with one type then a definition with another
1468 // type. Either way it is going to error later, but it is cleaner to catch it now
1469 mooseError("Functor '",
1470 name,
1471 "' is being added with return type '",
1472 MooseUtils::prettyCppType<T>(),
1473 "' but it has already been defined or requested with return type '",
1474 existing_wrapper_base->returnType(),
1475 "'.");
1476 }
1477 }
1478
1479 // We are a new functor, create the opposite ADType one and store it with other functors
1480 if constexpr (added_functor_is_ad)
1481 {
1482 typedef typename MetaPhysicL::RawType<T>::value_type NonADType;
1483 auto new_non_ad_wrapper = std::make_unique<Moose::Functor<NonADType>>(
1484 std::make_unique<Moose::RawValueFunctor<NonADType>>(functor));
1485 auto new_ad_wrapper = std::make_unique<Moose::Functor<T>>(functor);
1486 _functors[tid].emplace("wraps_" + name,
1487 std::make_tuple(SubProblem::TrueFunctorIs::AD,
1488 std::move(new_non_ad_wrapper),
1489 std::move(new_ad_wrapper)));
1490 }
1491 else
1492 {
1493 typedef typename Moose::ADType<T>::type ADType;
1494 auto new_non_ad_wrapper = std::make_unique<Moose::Functor<T>>((functor));
1495 auto new_ad_wrapper = std::make_unique<Moose::Functor<ADType>>(
1496 std::make_unique<Moose::ADWrapperFunctor<ADType>>(functor));
1497 _functors[tid].emplace("wraps_" + name,
1498 std::make_tuple(SubProblem::TrueFunctorIs::NONAD,
1499 std::move(new_non_ad_wrapper),
1500 std::move(new_ad_wrapper)));
1501 }
1502}
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...
Definition MooseBase.h:271
Wraps non-AD functors such that they can be used in objects that have requested the functor as AD.
This is a wrapper that forwards calls to the implementation, which can be switched out at any time wi...
A functor that serves as a placeholder during the simulation setup phase if a functor consumer reques...
std::vector< std::multimap< std::string, std::tuple< TrueFunctorIs, std::unique_ptr< Moose::FunctorEnvelopeBase >, std::unique_ptr< Moose::FunctorEnvelopeBase > > > > _functors
A container holding pointers to all the functors in our problem.
std::vector< std::multimap< std::string, std::pair< bool, bool > > > _functor_to_request_info
A multimap (for each thread) from unfilled functor requests to whether the requests were for AD funct...

Referenced by addFunction(), SubProblem::addPiecewiseByBlockLambdaFunctor(), and addUserObject().

◆ addFunctorMaterial()

void FEProblemBase::addFunctorMaterial ( const std::string &  functor_material_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Reimplemented in MFEMProblem.

Definition at line 4154 of file FEProblemBase.C.

4157{
4158 parallel_object_only();
4159
4160 auto add_functor_materials = [&](const auto & parameters, const auto & name)
4161 {
4162 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); tid++)
4163 {
4164 // Create the general Block/Boundary MaterialBase object
4165 std::shared_ptr<MaterialBase> material =
4166 _factory.create<MaterialBase>(functor_material_name, name, parameters, tid);
4167 logAdd("FunctorMaterial", name, functor_material_name, parameters);
4168 _all_materials.addObject(material, tid);
4169 _materials.addObject(material, tid);
4170 }
4171 };
4172
4173 parameters.set<SubProblem *>("_subproblem") = this;
4174 add_functor_materials(parameters, name);
4176 {
4177 auto disp_params = parameters;
4178 disp_params.set<SubProblem *>("_subproblem") = _displaced_problem.get();
4179 add_functor_materials(disp_params, name + "_displaced");
4180 }
4181}
MaterialWarehouse _materials
MaterialWarehouse _all_materials
MaterialBases compute MaterialProperties.

◆ addFVBC()

void FEProblemBase::addFVBC ( const std::string &  fv_bc_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 3678 of file FEProblemBase.C.

3681{
3682 addObject<FVBoundaryCondition>(fv_bc_name, name, parameters);
3683}

Referenced by DiffusionFV::addFVBCs().

◆ addFVGradientMethod()

void FEProblemBase::addFVGradientMethod ( const std::string &  method_type,
const std::string &  name,
InputParameters parameters 
)
virtual

Add an FV gradient method.

Parameters
method_typeThe type of the method.
nameThe name of the method.
parametersThe input parameters of the method.

Definition at line 4798 of file FEProblemBase.C.

4801{
4802 parallel_object_only();
4803
4805
4806 for (const auto tid : make_range(libMesh::n_threads()))
4807 {
4808 auto method = _factory.create<FVGradientMethod>(method_type, name, parameters, tid);
4809 logAdd("FVGradientMethod", name, method_type, parameters);
4810 theWarehouse().add(method);
4811 }
4812}
void addObjectParamsHelper(InputParameters &params, const std::string &object_name, const std::string &var_param_name="variable")
Helper for setting the "_subproblem" and "_sys" parameters in addObject() and in addUserObject().
TheWarehouse & theWarehouse() const
Base class for linear finite-volume cell-gradient methods.
void add(std::shared_ptr< MooseObject > obj)
add adds a new object to the warehouse and stores attributes/metadata about it for running queries/fi...
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
IntRange< T > make_range(T beg, T end)

◆ addFVInitialCondition()

void FEProblemBase::addFVInitialCondition ( const std::string &  ic_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Add an initial condition for a finite volume variables.

Parameters
ic_nameThe name of the boundary condition object
nameThe user-defined name from the input file
parametersThe input parameters for construction

Definition at line 3847 of file FEProblemBase.C.

3850{
3851 parallel_object_only();
3852
3853 // before we start to mess with the initial condition, we need to check parameters for errors.
3855 const std::string & var_name = parameters.get<VariableName>("variable");
3856
3857 // Forbid initial conditions on a restarted problem, as they would override the restart
3858 checkICRestartError(ic_name, name, var_name);
3859
3860 parameters.set<SubProblem *>("_subproblem") = this;
3861
3862 // field IC
3863 if (hasVariable(var_name))
3864 {
3865 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); ++tid)
3866 {
3867 auto & var = getVariable(
3869 parameters.set<SystemBase *>("_sys") = &var.sys();
3870 std::shared_ptr<FVInitialConditionBase> ic;
3871 if (var.isFV())
3872 ic = _factory.create<FVInitialCondition>(ic_name, name, parameters, tid);
3873 else
3874 mooseError(
3875 "Your variable for an FVInitialCondition needs to be an a finite volume variable!");
3876 _fv_ics.addObject(ic, tid);
3877 }
3878 }
3879 else
3880 mooseError("Variable '",
3881 var_name,
3882 "' requested in finite volume initial condition '",
3883 name,
3884 "' does not exist.");
3885}
virtual const MooseVariableFieldBase & getVariable(const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type=Moose::VarKindType::VAR_ANY, Moose::VarFieldType expected_var_field_type=Moose::VarFieldType::VAR_FIELD_ANY) const override
Returns the variable reference for requested variable which must be of the expected_var_type (Nonline...
virtual bool hasVariable(const std::string &var_name) const override
Whether or not this problem has the variable.
FVInitialConditionWarehouse _fv_ics
void checkICRestartError(const std::string &ic_name, const std::string &name, const VariableName &var_name)
Checks if the variable of the initial condition is getting restarted and errors for specific cases.
This is a template class that implements the workhorse compute and computeNodal methods.
void addObject(std::shared_ptr< FVInitialConditionBase > object, THREAD_ID tid, bool recurse=true)
Add object to the warehouse.
void checkParams(const std::string &parsing_syntax)
This function checks parameters stored in the object to make sure they are in the correct state as th...
@ VAR_FIELD_ANY
Definition MooseTypes.h:781
@ VAR_ANY
Definition MooseTypes.h:772

◆ addFVInterfaceKernel()

void FEProblemBase::addFVInterfaceKernel ( const std::string &  fv_ik_name,
const std::string &  name,
InputParameters parameters 
)
virtual

We assume that variable1 and variable2 can live on different systems, in this case the user needs to create two interface kernels with flipped variables and parameters

Definition at line 3686 of file FEProblemBase.C.

3689{
3692 addObject<FVInterfaceKernel>(
3693 fv_ik_name, name, parameters, /*threaded=*/true, /*variable_param_name=*/"variable1");
3694}

◆ addFVInterpolationMethod()

void FEProblemBase::addFVInterpolationMethod ( const std::string &  method_type,
const std::string &  name,
InputParameters parameters 
)
virtual

Add an FV interpolation method.

Parameters
method_typeThe type of the method.
nameThe name of the method.
parametersThe input parameters of the method.

Definition at line 4781 of file FEProblemBase.C.

4784{
4785 parallel_object_only();
4786
4788
4789 for (const auto tid : make_range(libMesh::n_threads()))
4790 {
4791 auto method = _factory.create<FVInterpolationMethod>(method_type, name, parameters, tid);
4792 logAdd("FVInterpolationMethod", name, method_type, parameters);
4793 theWarehouse().add(method);
4794 }
4795}
Registered base class for linear FV interpolation objects.

◆ addFVKernel()

void FEProblemBase::addFVKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 3664 of file FEProblemBase.C.

3667{
3668 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
3669 // FVElementalKernels are computed in the historically finite element threaded loops. They rely
3670 // on Assembly data like _current_elem. When we call reinit on the FEProblemBase we will only
3671 // reinit the DisplacedProblem and its associated Assembly objects if we mark this boolean as
3672 // true
3674 addObject<FVKernel>(fv_kernel_name, name, parameters);
3675}

Referenced by DiffusionFV::addFVKernels().

◆ addGhostedBoundary()

void FEProblemBase::addGhostedBoundary ( BoundaryID  boundary_id)
overridevirtual

Will make sure that all necessary elements from boundary_id are ghosted to this processor.

Implements SubProblem.

Definition at line 2316 of file FEProblemBase.C.

2317{
2318 _mesh.addGhostedBoundary(boundary_id);
2320 _displaced_mesh->addGhostedBoundary(boundary_id);
2321}
void addGhostedBoundary(BoundaryID boundary_id)
This will add the boundary ids to be ghosted to this processor.
Definition MooseMesh.C:3293

Referenced by DisplacedProblem::addGhostedBoundary().

◆ addGhostedElem()

void FEProblemBase::addGhostedElem ( dof_id_type  elem_id)
overridevirtual

Will make sure that all dofs connected to elem_id are ghosted to this processor.

Implements SubProblem.

Definition at line 2309 of file FEProblemBase.C.

2310{
2311 if (_mesh.elemPtr(elem_id)->processor_id() != processor_id())
2312 _ghosted_elems.insert(elem_id);
2313}
virtual Elem * elemPtr(const dof_id_type i)
Definition MooseMesh.C:3177
std::set< dof_id_type > _ghosted_elems
Elements that should have Dofs ghosted to the local processor.
processor_id_type processor_id() const

Referenced by DisplacedProblem::addGhostedElem(), and NodalPatchRecovery::NodalPatchRecovery().

◆ addHDGKernel()

void FEProblemBase::addHDGKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 3232 of file FEProblemBase.C.

3235{
3236 parallel_object_only();
3237 const auto nl_sys_num = determineSolverSystem(parameters.varName("variable", name), true).second;
3238 if (!isSolverSystemNonlinear(nl_sys_num))
3239 mooseError("You are trying to add a HDGKernel to a linear variable/system, which is not "
3240 "supported at the moment!");
3242 kernel_name, name, parameters, nl_sys_num, "HDGKernel", _reinit_displaced_elem);
3243
3244 _nl[nl_sys_num]->addHDGKernel(kernel_name, name, parameters);
3245}

◆ addIndicator()

void FEProblemBase::addIndicator ( const std::string &  indicator_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Reimplemented in MFEMProblem.

Definition at line 5836 of file FEProblemBase.C.

5839{
5840 parallel_object_only();
5841
5842 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
5843 {
5844 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
5845 parameters.set<SystemBase *>("_sys") = &_displaced_problem->auxSys();
5847 }
5848 else
5849 {
5850 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
5851 {
5852 // We allow Indicators to request that they use_displaced_mesh,
5853 // but then be overridden when no displacements variables are
5854 // provided in the Mesh block. If that happened, update the value
5855 // of use_displaced_mesh appropriately for this Indicator.
5856 if (parameters.have_parameter<bool>("use_displaced_mesh"))
5857 parameters.set<bool>("use_displaced_mesh") = false;
5858 }
5859
5860 parameters.set<SubProblem *>("_subproblem") = this;
5861 parameters.set<SystemBase *>("_sys") = _aux.get();
5862 }
5863
5864 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); tid++)
5865 {
5866 std::shared_ptr<Indicator> indicator =
5867 _factory.create<Indicator>(indicator_name, name, parameters, tid);
5868 logAdd("Indicator", name, indicator_name, parameters);
5869 std::shared_ptr<InternalSideIndicatorBase> isi =
5870 std::dynamic_pointer_cast<InternalSideIndicatorBase>(indicator);
5871 if (isi)
5873 else
5874 _indicators.addObject(indicator, tid);
5875 }
5876}
MooseObjectWarehouse< Indicator > _indicators
MooseObjectWarehouse< InternalSideIndicatorBase > _internal_side_indicators

◆ addInitialCondition()

void FEProblemBase::addInitialCondition ( const std::string &  ic_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Reimplemented in MFEMProblem.

Definition at line 3787 of file FEProblemBase.C.

3790{
3791 parallel_object_only();
3792
3793 // before we start to mess with the initial condition, we need to check parameters for errors.
3795 const std::string & var_name = parameters.get<VariableName>("variable");
3796
3797 // Forbid initial conditions on a restarted problem, as they would override the restart
3798 checkICRestartError(ic_name, name, var_name);
3799
3800 parameters.set<SubProblem *>("_subproblem") = this;
3801
3802 // field IC
3803 if (hasVariable(var_name))
3804 {
3805 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); ++tid)
3806 {
3809 parameters.set<SystemBase *>("_sys") = &var.sys();
3810 std::shared_ptr<InitialConditionBase> ic;
3811 if (dynamic_cast<MooseVariable *>(&var))
3812 ic = _factory.create<InitialCondition>(ic_name, name, parameters, tid);
3813 else if (dynamic_cast<VectorMooseVariable *>(&var))
3815 else if (dynamic_cast<ArrayMooseVariable *>(&var))
3816 ic = _factory.create<ArrayInitialCondition>(ic_name, name, parameters, tid);
3817 else if (dynamic_cast<MooseVariableFVReal *>(&var))
3818 ic = _factory.create<InitialCondition>(ic_name, name, parameters, tid);
3819 else if (dynamic_cast<MooseLinearVariableFVReal *>(&var))
3820 ic = _factory.create<InitialCondition>(ic_name, name, parameters, tid);
3821 else
3822 mooseError("Your FE variable in initial condition ",
3823 name,
3824 " must be either of scalar or vector type");
3825 logAdd("IC", name, ic_name, parameters);
3826 _ics.addObject(ic, tid);
3827 }
3828 }
3829
3830 // scalar IC
3831 else if (hasScalarVariable(var_name))
3832 {
3833 MooseVariableScalar & var = getScalarVariable(0, var_name);
3834 parameters.set<SystemBase *>("_sys") = &var.sys();
3835 std::shared_ptr<ScalarInitialCondition> ic =
3837 logAdd("ScalarIC", name, ic_name, parameters);
3839 }
3840
3841 else
3842 mooseError(
3843 "Variable '", var_name, "' requested in initial condition '", name, "' does not exist.");
3844}
ScalarInitialConditionWarehouse _scalar_ics
virtual bool hasScalarVariable(const std::string &var_name) const override
Returns a Boolean indicating whether any system contains a variable with the name provided.
virtual MooseVariableScalar & getScalarVariable(const THREAD_ID tid, const std::string &var_name) override
Returns the scalar variable reference from whichever system contains it.
InitialConditionWarehouse _ics
This is a template class that implements the workhorse compute and computeNodal methods.
void addObject(std::shared_ptr< InitialConditionBase > object, THREAD_ID tid, bool recurse=true)
Add object to the warehouse.
virtual void addObject(std::shared_ptr< T > object, THREAD_ID tid=0, bool recurse=true)
Adds an object to the storage structure.
SystemBase & sys()
Get the system this variable is part of.
This class provides an interface for common operations on field variables of both FE and FV types wit...
Class for scalar variables (they are different).
InitialConditions are objects that set the initial value of variables.

Referenced by DiffusionPhysicsBase::addInitialConditions(), and DiffusionPhysicsBase::addInitialConditionsFromComponents().

◆ addInterfaceKernel()

void FEProblemBase::addInterfaceKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 3715 of file FEProblemBase.C.

3718{
3719 parallel_object_only();
3720
3721 const auto nl_sys_num = determineSolverSystem(parameters.varName("variable", name), true).second;
3722 if (!isSolverSystemNonlinear(nl_sys_num))
3723 mooseError("You are trying to add a InterfaceKernel to a linear variable/system, which is not "
3724 "supported at the moment!");
3725
3726 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
3727 {
3728 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
3729 parameters.set<SystemBase *>("_sys") = &_displaced_problem->solverSys(nl_sys_num);
3731 }
3732 else
3733 {
3734 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
3735 {
3736 // We allow InterfaceKernels to request that they use_displaced_mesh,
3737 // but then be overridden when no displacements variables are
3738 // provided in the Mesh block. If that happened, update the value
3739 // of use_displaced_mesh appropriately for this InterfaceKernel.
3740 if (parameters.have_parameter<bool>("use_displaced_mesh"))
3741 parameters.set<bool>("use_displaced_mesh") = false;
3742 }
3743
3744 parameters.set<SubProblem *>("_subproblem") = this;
3745 parameters.set<SystemBase *>("_sys") = _nl[nl_sys_num].get();
3746 }
3747
3748 logAdd("InterfaceKernel", name, interface_kernel_name, parameters);
3749 _nl[nl_sys_num]->addInterfaceKernel(interface_kernel_name, name, parameters);
3750
3752}

◆ addInterfaceMaterial()

void FEProblemBase::addInterfaceMaterial ( const std::string &  material_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 4192 of file FEProblemBase.C.

4195{
4197}
virtual void addMaterialHelper(std::vector< MaterialWarehouse * > warehouse, const std::string &material_name, const std::string &name, InputParameters &parameters)
MaterialWarehouse _interface_materials

◆ addJacobian()

void FEProblemBase::addJacobian ( const THREAD_ID  tid)
overridevirtual

Implements SubProblem.

Definition at line 2153 of file FEProblemBase.C.

2154{
2157 _assembly[tid][_current_nl_sys->number()]->addJacobianNonlocal(Assembly::GlobalDataKey{});
2159 {
2160 _displaced_problem->addJacobian(tid);
2162 _displaced_problem->addJacobianNonlocal(tid);
2163 }
2164}

Referenced by ComputeDiracThread::postElement().

◆ addJacobianBlockTags()

void FEProblemBase::addJacobianBlockTags ( libMesh::SparseMatrix< libMesh::Number > &  jacobian,
unsigned int  ivar,
unsigned int  jvar,
const DofMap &  dof_map,
std::vector< dof_id_type > &  dof_indices,
const std::set< TagID > &  tags,
const THREAD_ID  tid 
)
virtual

Definition at line 2228 of file FEProblemBase.C.

2235{
2236 _assembly[tid][_current_nl_sys->number()]->addJacobianBlockTags(
2237 jacobian, ivar, jvar, dof_map, dof_indices, Assembly::GlobalDataKey{}, tags);
2238
2240 if (_nonlocal_cm[_current_nl_sys->number()](ivar, jvar) != 0)
2241 {
2243 _assembly[tid][_current_nl_sys->number()]->addJacobianBlockNonlocalTags(
2244 jacobian,
2245 ivar,
2246 jvar,
2247 dof_map,
2248 dof_indices,
2249 jv.allDofIndices(),
2251 tags);
2252 }
2253
2255 {
2256 _displaced_problem->addJacobianBlockTags(jacobian, ivar, jvar, dof_map, dof_indices, tags, tid);
2258 if (_nonlocal_cm[_current_nl_sys->number()](ivar, jvar) != 0)
2259 {
2261 _displaced_problem->addJacobianBlockNonlocal(
2262 jacobian, ivar, jvar, dof_map, dof_indices, jv.allDofIndices(), tags, tid);
2263 }
2264 }
2265}
const std::vector< dof_id_type > & allDofIndices() const
Get all global dofindices for the variable.
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition SystemBase.C:89

Referenced by ComputeJacobianBlocksThread::postElement().

◆ addJacobianLowerD()

void FEProblemBase::addJacobianLowerD ( const THREAD_ID  tid)
overridevirtual

Implements SubProblem.

Definition at line 2183 of file FEProblemBase.C.

2184{
2185 _assembly[tid][_current_nl_sys->number()]->addJacobianLowerD(Assembly::GlobalDataKey{});
2187 _displaced_problem->addJacobianLowerD(tid);
2188}

Referenced by ComputeJacobianThread::accumulateLower(), and ComputeResidualAndJacobianThread::accumulateLower().

◆ addJacobianNeighbor() [1/3]

void FEProblemBase::addJacobianNeighbor ( const THREAD_ID  tid)
overridevirtual

◆ addJacobianNeighbor() [2/3]

virtual void FEProblemBase::addJacobianNeighbor ( libMesh::SparseMatrix< libMesh::Number > &  jacobian,
unsigned int  ivar,
unsigned int  jvar,
const DofMap &  dof_map,
std::vector< dof_id_type > &  dof_indices,
std::vector< dof_id_type > &  neighbor_dof_indices,
const std::set< TagID > &  tags,
const THREAD_ID  tid 
)
overridevirtual

◆ addJacobianNeighbor() [3/3]

virtual void SubProblem::addJacobianNeighbor ( libMesh::SparseMatrix< libMesh::Number > &  jacobian,
unsigned int  ivar,
unsigned int  jvar,
const libMesh::DofMap dof_map,
std::vector< dof_id_type > &  dof_indices,
std::vector< dof_id_type > &  neighbor_dof_indices,
const std::set< TagID > &  tags,
const THREAD_ID  tid 
)
pure virtualinherited

◆ addJacobianNeighborLowerD()

void FEProblemBase::addJacobianNeighborLowerD ( const THREAD_ID  tid)
overridevirtual

Implements SubProblem.

Definition at line 2175 of file FEProblemBase.C.

2176{
2177 _assembly[tid][_current_nl_sys->number()]->addJacobianNeighborLowerD(Assembly::GlobalDataKey{});
2179 _displaced_problem->addJacobianNeighborLowerD(tid);
2180}

Referenced by ComputeJacobianThread::accumulateNeighborLower(), and ComputeResidualAndJacobianThread::accumulateNeighborLower().

◆ addJacobianOffDiagScalar()

void FEProblemBase::addJacobianOffDiagScalar ( unsigned int  ivar,
const THREAD_ID  tid = 0 
)
virtual

Definition at line 2197 of file FEProblemBase.C.

2198{
2199 _assembly[tid][_current_nl_sys->number()]->addJacobianOffDiagScalar(ivar,
2201}

Referenced by NonlinearSystemBase::computeScalarKernelsJacobians().

◆ addJacobianScalar()

void FEProblemBase::addJacobianScalar ( const THREAD_ID  tid = 0)
virtual

Definition at line 2191 of file FEProblemBase.C.

2192{
2193 _assembly[tid][_current_nl_sys->number()]->addJacobianScalar(Assembly::GlobalDataKey{});
2194}

Referenced by NonlinearSystemBase::computeScalarKernelsJacobians().

◆ addKernel()

void FEProblemBase::addKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Reimplemented in MFEMProblem.

Definition at line 3216 of file FEProblemBase.C.

3219{
3220 parallel_object_only();
3221 const auto nl_sys_num = determineSolverSystem(parameters.varName("variable", name), true).second;
3222 if (!isSolverSystemNonlinear(nl_sys_num))
3223 mooseError("You are trying to add a Kernel to a linear variable/system, which is not "
3224 "supported at the moment!");
3226 kernel_name, name, parameters, nl_sys_num, "Kernel", _reinit_displaced_elem);
3227
3228 _nl[nl_sys_num]->addKernel(kernel_name, name, parameters);
3229}

Referenced by DiffusionCG::addFEKernels().

◆ addKokkosAuxKernel()

virtual void FEProblemBase::addKokkosAuxKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

◆ addKokkosBoundaryCondition()

virtual void FEProblemBase::addKokkosBoundaryCondition ( const std::string &  bc_name,
const std::string &  name,
InputParameters parameters 
)
virtual

◆ addKokkosFunction()

virtual void FEProblemBase::addKokkosFunction ( const std::string &  type,
const std::string &  name,
InputParameters parameters 
)
virtual

Add a Kokkos function to the problem.

Parameters
typeThe Kokkos function type
nameThe Kokkos function name
parametersThe Kokkos function input parameters

Referenced by getKokkosFunction().

◆ addKokkosKernel()

virtual void FEProblemBase::addKokkosKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

◆ addKokkosLinearFVBC()

virtual void FEProblemBase::addKokkosLinearFVBC ( const std::string &  bc_name,
const std::string &  name,
InputParameters parameters 
)
virtual

◆ addKokkosLinearFVKernel()

virtual void FEProblemBase::addKokkosLinearFVKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

◆ addKokkosMaterial()

virtual void FEProblemBase::addKokkosMaterial ( const std::string &  material_name,
const std::string &  name,
InputParameters parameters 
)
virtual

◆ addKokkosMeshInitializationHook()

void FEProblemBase::addKokkosMeshInitializationHook ( std::function< void()>  function)
inline

Add a function hook that needs to be called after Kokkos mesh initialization.

Parameters
functionThe function to be called

Definition at line 3063 of file FEProblemBase.h.

3064 {
3065 _kokkos_mesh_initialization_hooks.push_back(function);
3066 }
std::vector< std::function< void()> > _kokkos_mesh_initialization_hooks
Container holding hooks for functions that need to be called after Kokkos mesh initialization.

Referenced by BlockRestrictable::initializeBlockRestrictable(), and BoundaryRestrictable::initializeBoundaryRestrictable().

◆ addKokkosNodalKernel()

virtual void FEProblemBase::addKokkosNodalKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

◆ addKokkosPostprocessor()

virtual void FEProblemBase::addKokkosPostprocessor ( const std::string &  pp_name,
const std::string &  name,
InputParameters parameters 
)
virtual

◆ addKokkosReporter()

virtual void FEProblemBase::addKokkosReporter ( const std::string &  type,
const std::string &  name,
InputParameters parameters 
)
virtual

◆ addKokkosUserObject()

virtual void FEProblemBase::addKokkosUserObject ( const std::string &  user_object_name,
const std::string &  name,
InputParameters parameters 
)
virtual

◆ addKokkosVectorPostprocessor()

virtual void FEProblemBase::addKokkosVectorPostprocessor ( const std::string &  pp_name,
const std::string &  name,
InputParameters parameters 
)
virtual

◆ addLinearFVBC()

void FEProblemBase::addLinearFVBC ( const std::string &  fv_bc_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 3705 of file FEProblemBase.C.

3708{
3709 addObject<LinearFVBoundaryCondition>(bc_name, name, parameters);
3710}

◆ addLinearFVKernel()

void FEProblemBase::addLinearFVKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 3697 of file FEProblemBase.C.

3700{
3701 addObject<LinearFVKernel>(kernel_name, name, parameters);
3702}

◆ addLineSearch()

virtual void FEProblemBase::addLineSearch ( const InputParameters )
inlinevirtual

add a MOOSE line search

Reimplemented in DumpObjectsProblem, and FEProblem.

Definition at line 821 of file FEProblemBase.h.

822 {
823 mooseError("Line search not implemented for this problem type yet.");
824 }

Referenced by FEProblemSolve::FEProblemSolve().

◆ addMarker()

void FEProblemBase::addMarker ( const std::string &  marker_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Reimplemented in MFEMProblem.

Definition at line 5879 of file FEProblemBase.C.

5882{
5883 parallel_object_only();
5884
5885 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
5886 {
5887 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
5888 parameters.set<SystemBase *>("_sys") = &_displaced_problem->auxSys();
5890 }
5891 else
5892 {
5893 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
5894 {
5895 // We allow Markers to request that they use_displaced_mesh,
5896 // but then be overridden when no displacements variables are
5897 // provided in the Mesh block. If that happened, update the value
5898 // of use_displaced_mesh appropriately for this Marker.
5899 if (parameters.have_parameter<bool>("use_displaced_mesh"))
5900 parameters.set<bool>("use_displaced_mesh") = false;
5901 }
5902
5903 parameters.set<SubProblem *>("_subproblem") = this;
5904 parameters.set<SystemBase *>("_sys") = _aux.get();
5905 }
5906
5907 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); tid++)
5908 {
5909 std::shared_ptr<Marker> marker = _factory.create<Marker>(marker_name, name, parameters, tid);
5910 logAdd("Marker", name, marker_name, parameters);
5911 _markers.addObject(marker, tid);
5912 }
5913}
MooseObjectWarehouse< Marker > _markers

◆ addMaterial()

void FEProblemBase::addMaterial ( const std::string &  material_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Reimplemented in MFEMProblem.

Definition at line 4184 of file FEProblemBase.C.

4187{
4189}

Referenced by ComponentMaterialPropertyInterface::addMaterials().

◆ addMaterialHelper()

void FEProblemBase::addMaterialHelper ( std::vector< MaterialWarehouse * >  warehouse,
const std::string &  material_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 4200 of file FEProblemBase.C.

4204{
4205 parallel_object_only();
4206
4207 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
4208 {
4209 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
4211 }
4212 else
4213 {
4214 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
4215 {
4216 // We allow Materials to request that they use_displaced_mesh,
4217 // but then be overridden when no displacements variables are
4218 // provided in the Mesh block. If that happened, update the value
4219 // of use_displaced_mesh appropriately for this Material.
4220 if (parameters.have_parameter<bool>("use_displaced_mesh"))
4221 parameters.set<bool>("use_displaced_mesh") = false;
4222 }
4223
4224 parameters.set<SubProblem *>("_subproblem") = this;
4225 }
4226
4227 unsigned int n_threads = libMesh::n_threads();
4228
4229#ifdef MOOSE_KOKKOS_ENABLED
4231 n_threads = 1;
4232#endif
4233
4234 for (THREAD_ID tid = 0; tid < n_threads; tid++)
4235 {
4236 // Create the general Block/Boundary MaterialBase object
4237 std::shared_ptr<MaterialBase> material =
4238 _factory.create<MaterialBase>(mat_name, name, parameters, tid);
4239 logAdd("Material", name, mat_name, parameters);
4240 bool discrete = !material->getParam<bool>("compute");
4241
4242 // If the object is boundary restricted or if it is a functor material we do not create the
4243 // neighbor and face objects
4244 if (material->boundaryRestricted() || dynamic_cast<FunctorMaterial *>(material.get()))
4245 {
4246 _all_materials.addObject(material, tid);
4247 if (discrete)
4248 _discrete_materials.addObject(material, tid);
4249 else
4250 for (auto && warehouse : warehouses)
4251 warehouse->addObject(material, tid);
4252 }
4253
4254 // Non-boundary restricted require face and neighbor objects
4255 else
4256 {
4257 // TODO: we only need to do this if we have needs for face materials (e.g.
4258 // FV, DG, etc.) - but currently we always do it. Figure out how to fix
4259 // this.
4260
4261 // The name of the object being created, this is changed multiple times as objects are
4262 // created below
4263 std::string object_name;
4264
4265 // Create a copy of the supplied parameters to the setting for "_material_data_type" isn't
4266 // used from a previous tid loop
4267 InputParameters current_parameters = parameters;
4268
4269 // face material
4270 current_parameters.set<Moose::MaterialDataType>("_material_data_type") =
4272 object_name = name + "_face";
4273 std::shared_ptr<MaterialBase> face_material =
4274 _factory.create<MaterialBase>(mat_name, object_name, current_parameters, tid);
4275
4276 // neighbor material
4277 current_parameters.set<Moose::MaterialDataType>("_material_data_type") =
4279 current_parameters.set<bool>("_neighbor") = true;
4280 object_name = name + "_neighbor";
4281 std::shared_ptr<MaterialBase> neighbor_material =
4282 _factory.create<MaterialBase>(mat_name, object_name, current_parameters, tid);
4283
4284 // Store the material objects
4285 _all_materials.addObjects(material, neighbor_material, face_material, tid);
4286
4287 if (discrete)
4288 _discrete_materials.addObjects(material, neighbor_material, face_material, tid);
4289 else
4290 for (auto && warehouse : warehouses)
4291 warehouse->addObjects(material, neighbor_material, face_material, tid);
4292
4293 // Names of all controllable parameters for this Material object
4294 const std::string & base = parameters.getBase();
4295 MooseObjectParameterName name(MooseObjectName(base, material->name()), "*");
4296 const auto param_names =
4298
4299 // Connect parameters of the primary Material object to those on the face and neighbor
4300 // objects
4301 for (const auto & p_name : param_names)
4302 {
4303 MooseObjectParameterName primary_name(MooseObjectName(base, material->name()),
4304 p_name.parameter());
4305 MooseObjectParameterName face_name(MooseObjectName(base, face_material->name()),
4306 p_name.parameter());
4307 MooseObjectParameterName neighbor_name(MooseObjectName(base, neighbor_material->name()),
4308 p_name.parameter());
4310 primary_name, face_name, false);
4312 primary_name, neighbor_name, false);
4313 }
4314 }
4315 }
4316}
MaterialWarehouse _discrete_materials
std::vector< std::shared_ptr< T > > addObject(const std::string &type, const std::string &name, InputParameters &parameters, const bool threaded=true, const std::string &var_param_name="variable")
Method for creating and adding an object to the warehouse.
FunctorMaterials compute functor material properties.
std::vector< MooseObjectParameterName > getControllableParameterNames(const MooseObjectParameterName &input) const
Return a vector of parameters names matching the supplied name.
void addControllableParameterConnection(const MooseObjectParameterName &primary, const MooseObjectParameterName &secondary, bool error_on_empty=true)
Method for linking control parameters of different names.
bool isKokkosObject() const
Returns whether this InputParameters belongs to a Kokkos object Checks whether MooseBase::kokkos_obje...
const std::string & getBase() const
void addObjects(std::shared_ptr< MaterialBase > block, std::shared_ptr< MaterialBase > neighbor, std::shared_ptr< MaterialBase > face, THREAD_ID tid=0)
A special method unique to this class for adding Block, Neighbor, and Face material objects.
InputParameterWarehouse & getInputParameterWarehouse()
Get the InputParameterWarehouse for MooseObjects.
Definition MooseApp.C:2872
A class for storing the names of MooseObject by tag and object name.
A class for storing an input parameter name.
MaterialDataType
MaterialData types.
Definition MooseTypes.h:746
@ NEIGHBOR_MATERIAL_DATA
Definition MooseTypes.h:750
@ FACE_MATERIAL_DATA
Definition MooseTypes.h:749

Referenced by addInterfaceMaterial(), and addMaterial().

◆ addMatrixTag()

TagID SubProblem::addMatrixTag ( TagName  tag_name)
virtualinherited

Create a Tag.

Tags can be associated with Vectors and Matrices and allow objects (such as Kernels) to arbitrarily contribute values to any set of vectors/matrics

Note: If the tag is already present then this will simply return the TagID of that Tag

Parameters
tag_nameThe name of the tag to create, the TagID will get automatically generated

Reimplemented in DisplacedProblem.

Definition at line 310 of file SubProblem.C.

311{
312 auto tag_name_upper = MooseUtils::toUpper(tag_name);
313 auto existing_tag = _matrix_tag_name_to_tag_id.find(tag_name_upper);
314 if (existing_tag == _matrix_tag_name_to_tag_id.end())
315 {
316 auto tag_id = _matrix_tag_name_to_tag_id.size();
317
318 _matrix_tag_name_to_tag_id[tag_name_upper] = tag_id;
319
320 _matrix_tag_id_to_tag_name[tag_id] = tag_name_upper;
321 }
322
323 return _matrix_tag_name_to_tag_id.at(tag_name_upper);
324}
std::map< TagID, TagName > _matrix_tag_id_to_tag_name
Reverse map.
std::map< TagName, TagID > _matrix_tag_name_to_tag_id
The currently declared tags.
std::string toUpper(std::string name)
Convert supplied string to upper case.

Referenced by DisplacedProblem::addMatrixTag(), createTagMatrices(), LinearSystem::LinearSystem(), NonlinearEigenSystem::NonlinearEigenSystem(), and NonlinearSystemBase::NonlinearSystemBase().

◆ addMeshDivision()

void FEProblemBase::addMeshDivision ( const std::string &  type,
const std::string &  name,
InputParameters params 
)
virtual

Add a MeshDivision.

Definition at line 2851 of file FEProblemBase.C.

2854{
2855 parallel_object_only();
2856 parameters.set<FEProblemBase *>("_fe_problem_base") = this;
2857 parameters.set<SubProblem *>("_subproblem") = this;
2858 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); tid++)
2859 {
2860 std::shared_ptr<MeshDivision> func = _factory.create<MeshDivision>(type, name, parameters, tid);
2861 _mesh_divisions.addObject(func, tid);
2862 }
2863}
Base class for MeshDivision objects.

◆ addMultiApp()

void FEProblemBase::addMultiApp ( const std::string &  multi_app_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Add a MultiApp to the problem.

Definition at line 5916 of file FEProblemBase.C.

5919{
5920 parallel_object_only();
5921
5922 parameters.set<MPI_Comm>("_mpi_comm") = _communicator.get();
5923
5924 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
5925 {
5926 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
5927 parameters.set<SystemBase *>("_sys") = &_displaced_problem->auxSys();
5929 }
5930 else
5931 {
5932 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
5933 {
5934 // We allow MultiApps to request that they use_displaced_mesh,
5935 // but then be overridden when no displacements variables are
5936 // provided in the Mesh block. If that happened, update the value
5937 // of use_displaced_mesh appropriately for this MultiApp.
5938 if (parameters.have_parameter<bool>("use_displaced_mesh"))
5939 parameters.set<bool>("use_displaced_mesh") = false;
5940 }
5941
5942 parameters.set<SubProblem *>("_subproblem") = this;
5943 parameters.set<SystemBase *>("_sys") = _aux.get();
5944 }
5945
5946 std::shared_ptr<MultiApp> multi_app = _factory.create<MultiApp>(multi_app_name, name, parameters);
5947 logAdd("MultiApp", name, multi_app_name, parameters);
5948 multi_app->possiblyCreateChildApplications();
5949
5950 _multi_apps.addObject(multi_app);
5951
5952 // Store TransientMultiApp objects in another container, this is needed for calling computeDT
5953 std::shared_ptr<TransientMultiApp> trans_multi_app =
5954 std::dynamic_pointer_cast<TransientMultiApp>(multi_app);
5955 if (trans_multi_app)
5956 _transient_multi_apps.addObject(trans_multi_app);
5957}
void addObject(std::shared_ptr< T > object, THREAD_ID tid=0, bool recurse=true) override
Adds an object to the storage structure.
A MultiApp represents one or more MOOSE applications that are running simultaneously.
Definition MultiApp.h:116
const Parallel::Communicator & _communicator

◆ addNodalKernel()

void FEProblemBase::addNodalKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 3248 of file FEProblemBase.C.

3251{
3252 parallel_object_only();
3253
3254 const auto nl_sys_num = determineSolverSystem(parameters.varName("variable", name), true).second;
3255 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
3256 {
3257 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
3258 parameters.set<SystemBase *>("_sys") = &_displaced_problem->solverSys(nl_sys_num);
3260 }
3261 else
3262 {
3263 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
3264 {
3265 // We allow NodalKernels to request that they use_displaced_mesh,
3266 // but then be overridden when no displacements variables are
3267 // provided in the Mesh block. If that happened, update the value
3268 // of use_displaced_mesh appropriately for this NodalKernel.
3269 if (parameters.have_parameter<bool>("use_displaced_mesh"))
3270 parameters.set<bool>("use_displaced_mesh") = false;
3271 }
3272
3273 parameters.set<SubProblem *>("_subproblem") = this;
3274 parameters.set<SystemBase *>("_sys") = _nl[nl_sys_num].get();
3275 }
3276 logAdd("NodalKernel", name, kernel_name, parameters);
3277 _nl[nl_sys_num]->addNodalKernel(kernel_name, name, parameters);
3278}

◆ addNotZeroedVectorTag()

void SubProblem::addNotZeroedVectorTag ( const TagID  tag)
inherited

Adds a vector tag to the list of vectors that will not be zeroed when other tagged vectors are.

Parameters
tagthe TagID of the vector that will be manually managed

Definition at line 148 of file SubProblem.C.

149{
150 _not_zeroed_tagged_vectors.insert(tag);
151}
std::unordered_set< TagID > _not_zeroed_tagged_vectors
the list of vector tags that will not be zeroed when all other tags are

Referenced by createTagVectors().

◆ addObject()

template<typename T >
std::vector< std::shared_ptr< T > > FEProblemBase::addObject ( const std::string &  type,
const std::string &  name,
InputParameters parameters,
const bool  threaded = true,
const std::string &  var_param_name = "variable" 
)

Method for creating and adding an object to the warehouse.

Template Parameters
TThe base object type (registered in the Factory)
Parameters
typeString type of the object (registered in the Factory)
nameName for the object to be created
parametersInputParameters for the object
threadedWhether or not to create n_threads copies of the object
var_param_nameThe name of the parameter on the object which holds the primary variable.
Returns
A vector of shared_ptrs to the added objects

Definition at line 3794 of file FEProblemBase.h.

3799{
3800 parallel_object_only();
3801
3802 logAdd(MooseUtils::prettyCppType<T>(), name, type, parameters);
3803 // Add the _subproblem and _sys parameters depending on use_displaced_mesh
3804 addObjectParamsHelper(parameters, name, var_param_name);
3805
3806 const auto n_threads = threaded ? libMesh::n_threads() : 1;
3807 std::vector<std::shared_ptr<T>> objects(n_threads);
3808 for (THREAD_ID tid = 0; tid < n_threads; ++tid)
3809 {
3810 std::shared_ptr<T> obj = _factory.create<T>(type, name, parameters, tid);
3811 theWarehouse().add(obj);
3812 objects[tid] = std::move(obj);
3813 }
3814
3815 return objects;
3816}

◆ addObjectParamsHelper()

void FEProblemBase::addObjectParamsHelper ( InputParameters params,
const std::string &  object_name,
const std::string &  var_param_name = "variable" 
)
protected

Helper for setting the "_subproblem" and "_sys" parameters in addObject() and in addUserObject().

This is needed due to header includes/forward declaration issues

Definition at line 4601 of file FEProblemBase.C.

4604{
4605 // Due to objects like SolutionUserObject which manipulate libmesh objects
4606 // and variables directly at the back end, we need a default option here
4607 // which is going to be the pointer to the first solver system within this
4608 // problem
4609 unsigned int sys_num = 0;
4610 if (parameters.isParamValid(var_param_name))
4611 {
4612 const auto variable_name = parameters.varName(var_param_name, object_name);
4613 if (this->hasVariable(variable_name) || this->hasScalarVariable(variable_name))
4614 sys_num = getSystem(variable_name).number();
4615 }
4616 if (parameters.isParamValid("solver_sys"))
4617 {
4618 const auto var_sys_num = sys_num;
4619 sys_num = getSystemBase(parameters.get<SolverSystemName>("solver_sys")).number();
4620 if (sys_num != var_sys_num && parameters.isParamValid(var_param_name))
4621 mooseError("We dont support setting 'variable' to a variable that is not set to the same "
4622 "system as the 'solver_sys' parameter");
4623 }
4624
4625 if (_displaced_problem && parameters.have_parameter<bool>("use_displaced_mesh") &&
4626 parameters.get<bool>("use_displaced_mesh"))
4627 {
4628 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
4629 if (sys_num == _aux->number())
4630 parameters.set<SystemBase *>("_sys") = &_displaced_problem->systemBaseAuxiliary();
4631 else
4632 parameters.set<SystemBase *>("_sys") = &_displaced_problem->solverSys(sys_num);
4633 }
4634 else
4635 {
4636 // The object requested use_displaced_mesh, but it was overridden
4637 // due to there being no displacements variables in the [Mesh] block.
4638 // If that happened, update the value of use_displaced_mesh appropriately.
4639 if (!_displaced_problem && parameters.have_parameter<bool>("use_displaced_mesh") &&
4640 parameters.get<bool>("use_displaced_mesh"))
4641 parameters.set<bool>("use_displaced_mesh") = false;
4642
4643 parameters.set<SubProblem *>("_subproblem") = this;
4644
4645 if (sys_num == _aux->number())
4646 parameters.set<SystemBase *>("_sys") = _aux.get();
4647 else
4648 parameters.set<SystemBase *>("_sys") = _solver_systems[sys_num].get();
4649 }
4650}
virtual const SystemBase & getSystemBase(const unsigned int sys_num) const
Get constant reference to a system in this problem.
virtual libMesh::System & getSystem(const std::string &var_name) override
Returns the equation system containing the variable provided.
unsigned int number() const

Referenced by addFVGradientMethod(), addFVInterpolationMethod(), addObject(), and addUserObject().

◆ addOutput()

void FEProblemBase::addOutput ( const std::string &  object_type,
const std::string &  object_name,
InputParameters parameters 
)

Adds an Output object.

Definition at line 9830 of file FEProblemBase.C.

9833{
9834 parallel_object_only();
9835
9836 // Get a reference to the OutputWarehouse
9837 OutputWarehouse & output_warehouse = _app.getOutputWarehouse();
9838
9839 // Reject the reserved names for objects not built by MOOSE
9840 if (!parameters.get<bool>("_built_by_moose") && output_warehouse.isReservedName(object_name))
9841 mooseError("The name '", object_name, "' is a reserved name for output objects");
9842
9843 // Check that an object by the same name does not already exist; this must be done before the
9844 // object is created to avoid getting misleading errors from the Parser
9845 if (output_warehouse.hasOutput(object_name))
9846 mooseError("An output object named '", object_name, "' already exists");
9847
9848 // Add a pointer to the FEProblemBase class
9849 parameters.addPrivateParam<FEProblemBase *>("_fe_problem_base", this);
9850
9851 // --show-input should enable the display of the input file on the screen
9852 if (object_type == "Console" && _app.getParam<bool>("show_input") &&
9853 parameters.get<bool>("output_screen"))
9854 parameters.set<ExecFlagEnum>("execute_input_on") = EXEC_INITIAL;
9855
9856 // Record whether this object's own block set 'file_base' itself before a common 'file_base'
9857 // from the [Outputs] block, if any, is copied down onto it below -- that copy makes
9858 // 'file_base' look valid and user-set on this object even when only the common block set it
9859 // (see #4215), so this must be captured first.
9860 if (parameters.isParamDefined("_file_base_set_by_own_block"))
9861 parameters.set<bool>("_file_base_set_by_own_block") = parameters.isParamSetByUser("file_base");
9862
9863 // Apply only user-set parameters from the common [Outputs] block so that
9864 // each output type's own defaults are not overridden by common defaults.
9865 const InputParameters * common = output_warehouse.getCommonParameters();
9866 if (common)
9868
9869 // Set the correct value for the binary flag for XDA/XDR output
9870 if (object_type == "XDR")
9871 parameters.set<bool>("_binary") = true;
9872 else if (object_type == "XDA")
9873 parameters.set<bool>("_binary") = false;
9874
9875 // Adjust the checkpoint suffix if auto recovery was enabled
9876 if (object_name == "auto_recovery_checkpoint")
9877 parameters.set<std::string>("suffix") = "auto_recovery";
9878
9879 // Create the object and add it to the warehouse
9880 std::shared_ptr<Output> output = _factory.create<Output>(object_type, object_name, parameters);
9881 logAdd("Output", object_name, object_type, parameters);
9882 output_warehouse.addOutput(output);
9883}
const ExecFlagType EXEC_INITIAL
Definition Moose.C:31
A MultiMooseEnum object to hold "execute_on" flags.
bool isParamDefined(const std::string &name) const
Method returns true if the parameter is defined for any type.
bool isParamSetByUser(const std::string &name) const
Method returns true if the parameter was set by the user.
void addPrivateParam(const std::string &name, const T &value)
These method add a parameter to the InputParameters object which can be retrieved like any other para...
void applyCommonUserSetParameters(const InputParameters &common, const std::vector< std::string > &exclude={}, const bool allow_private=false)
Variant of applyParameters that only applies parameters explicitly set by the user in common (i....
OutputWarehouse & getOutputWarehouse()
Get the OutputWarehouse objects.
Definition MooseApp.C:2414
Class for storing and utilizing output objects.
const InputParameters * getCommonParameters() const
Get a reference to the common output parameters.
bool isReservedName(const std::string &name)
Test if the given name is reserved.
bool hasOutput(const std::string &name) const
Returns true if the output object exists.
void addOutput(std::shared_ptr< Output > output)
Adds an existing output object to the warehouse.
Based class for output objects.
Definition Output.h:52

◆ addPiecewiseByBlockLambdaFunctor()

template<typename T , typename PolymorphicLambda >
const Moose::FunctorBase< T > & SubProblem::addPiecewiseByBlockLambdaFunctor ( const std::string &  name,
PolymorphicLambda  my_lammy,
const std::set< ExecFlagType > &  clearance_schedule,
const MooseMesh mesh,
const std::set< SubdomainID > &  block_ids,
const THREAD_ID  tid 
)
inherited

Add a functor that has block-wise lambda definitions, e.g.

the evaluations of the functor are based on a user-provided lambda expression.

Parameters
nameThe name of the functor to add
my_lammyThe lambda expression that will be called when the functor is evaluated
clearance_scheduleHow often to clear functor evaluations. The default value is always, which means that the functor will be re-evaluated every time it is called. If it is something other than always, than cached values may be returned
meshThe mesh on which this functor operates
block_idsThe blocks on which the lambda expression is defined
tidThe thread on which the functor we are adding will run
Returns
The added functor

Definition at line 1356 of file SubProblem.h.

1362{
1363 auto & pbblf_functors = _pbblf_functors[tid];
1364
1365 auto [it, first_time_added] =
1366 pbblf_functors.emplace(name,
1367 std::make_unique<PiecewiseByBlockLambdaFunctor<T>>(
1368 name, my_lammy, clearance_schedule, mesh, block_ids));
1369
1370 auto * functor = dynamic_cast<PiecewiseByBlockLambdaFunctor<T> *>(it->second.get());
1371 if (!functor)
1372 {
1373 if (first_time_added)
1374 mooseError("This should be impossible. If this was the first time we added the functor, then "
1375 "the dynamic cast absolutely should have succeeded");
1376 else
1377 mooseError("Attempted to add a lambda functor with the name '",
1378 name,
1379 "' but another lambda functor of that name returns a different type");
1380 }
1381
1382 if (first_time_added)
1383 addFunctor(name, *functor, tid);
1384 else
1385 // The functor already exists
1386 functor->setFunctor(mesh, block_ids, my_lammy);
1387
1388 return *functor;
1389}
A material property that is evaluated on-the-fly via calls to various overloads of operator()
std::vector< std::map< std::string, std::unique_ptr< Moose::FunctorAbstract > > > _pbblf_functors
Container to hold PiecewiseByBlockLambdaFunctors.
virtual MooseMesh & mesh()=0

Referenced by FunctorMaterial::addFunctorPropertyByBlocks().

◆ addPostprocessor()

void FEProblemBase::addPostprocessor ( const std::string &  pp_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Reimplemented in MFEMProblem.

Definition at line 4674 of file FEProblemBase.C.

4677{
4678 checkUserObjectNameCollision(name, "Postprocessor");
4679
4680 addUserObject(pp_name, name, parameters);
4681}
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters &parameters)
void checkUserObjectNameCollision(const std::string &name, const std::string &type) const
Check for name collision between different user objects.

Referenced by MFEMProblem::addPostprocessor(), and DiffusionPhysicsBase::addPostprocessors().

◆ addPredictor()

void FEProblemBase::addPredictor ( const std::string &  type,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 7683 of file FEProblemBase.C.

7686{
7687 parallel_object_only();
7688
7690 mooseError("Vector bounds cannot be used with LinearSystems!");
7691
7692 parameters.set<SubProblem *>("_subproblem") = this;
7693 std::shared_ptr<Predictor> predictor = _factory.create<Predictor>(type, name, parameters);
7694 logAdd("Predictor", name, type, parameters);
7695
7696 for (auto & nl : _nl)
7697 nl->setPredictor(predictor);
7698}
virtual std::size_t numLinearSystems() const override
virtual std::size_t numNonlinearSystems() const override
Base class for predictors.
Definition Predictor.h:29

Referenced by AB2PredictorCorrector::AB2PredictorCorrector().

◆ addReporter()

void FEProblemBase::addReporter ( const std::string &  type,
const std::string &  name,
InputParameters parameters 
)
virtual

Add a Reporter object to the simulation.

Parameters
typeC++ object type to construct
nameA uniquely identifying object name
parametersComplete parameters for the object to be created.

For an example use, refer to AddReporterAction.C/h

Definition at line 4694 of file FEProblemBase.C.

4697{
4699
4701}

Referenced by MultiAppGeneralFieldTransfer::MultiAppGeneralFieldTransfer().

◆ addResidual()

void FEProblemBase::addResidual ( const THREAD_ID  tid)
overridevirtual

Implements SubProblem.

Definition at line 2038 of file FEProblemBase.C.

2039{
2042
2044 _displaced_problem->addResidual(tid);
2045}

Referenced by ComputeDiracThread::postElement().

◆ addResidualLower()

void FEProblemBase::addResidualLower ( const THREAD_ID  tid)
overridevirtual

◆ addResidualNeighbor()

void FEProblemBase::addResidualNeighbor ( const THREAD_ID  tid)
overridevirtual

◆ addResidualScalar()

void FEProblemBase::addResidualScalar ( const THREAD_ID  tid = 0)
virtual

Definition at line 2068 of file FEProblemBase.C.

2069{
2070 _assembly[tid][_current_nl_sys->number()]->addResidualScalar(Assembly::GlobalDataKey{},
2072}

Referenced by NonlinearSystemBase::computeResidualInternal().

◆ addSampler()

void FEProblemBase::addSampler ( const std::string &  type,
const std::string &  name,
InputParameters parameters 
)
virtual

The following functions will enable MOOSE to have the capability to import Samplers.

Definition at line 2937 of file FEProblemBase.C.

2940{
2941 const auto samplers = addObject<Sampler>(type, name, parameters);
2942 for (auto & sampler : samplers)
2943 sampler->init();
2944}
virtual void init() override

◆ addScalarKernel()

void FEProblemBase::addScalarKernel ( const std::string &  kernel_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 3281 of file FEProblemBase.C.

3284{
3285 parallel_object_only();
3286
3287 const auto nl_sys_num = determineSolverSystem(parameters.varName("variable", name), true).second;
3288 if (!isSolverSystemNonlinear(nl_sys_num))
3289 mooseError("You are trying to add a ScalarKernel to a linear variable/system, which is not "
3290 "supported at the moment!");
3291
3292 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
3293 {
3294 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
3295 parameters.set<SystemBase *>("_sys") = &_displaced_problem->solverSys(nl_sys_num);
3296 }
3297 else
3298 {
3299 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
3300 {
3301 // We allow ScalarKernels to request that they use_displaced_mesh,
3302 // but then be overridden when no displacements variables are
3303 // provided in the Mesh block. If that happened, update the value
3304 // of use_displaced_mesh appropriately for this ScalarKernel.
3305 if (parameters.have_parameter<bool>("use_displaced_mesh"))
3306 parameters.set<bool>("use_displaced_mesh") = false;
3307 }
3308
3309 parameters.set<SubProblem *>("_subproblem") = this;
3310 parameters.set<SystemBase *>("_sys") = _nl[nl_sys_num].get();
3311 }
3312
3313 logAdd("ScalarKernel", name, kernel_name, parameters);
3314 _nl[nl_sys_num]->addScalarKernel(kernel_name, name, parameters);
3315}

◆ addTimeIntegrator()

void FEProblemBase::addTimeIntegrator ( const std::string &  type,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 7648 of file FEProblemBase.C.

7651{
7652 parallel_object_only();
7653
7654 parameters.set<SubProblem *>("_subproblem") = this;
7655 logAdd("TimeIntegrator", name, type, parameters);
7656 _aux->addTimeIntegrator(type, name + ":aux", parameters);
7657 for (auto & sys : _solver_systems)
7658 sys->addTimeIntegrator(type, name + ":" + sys->name(), parameters);
7659 _has_time_integrator = true;
7660
7661 // add vectors to store u_dot, u_dotdot, udot_old, u_dotdot_old and
7662 // solution vectors older than 2 time steps, if requested by the time
7663 // integrator
7664 _aux->addDotVectors();
7665 for (auto & nl : _nl)
7666 {
7667 nl->addDotVectors();
7668
7669 auto tag_udot = nl->getTimeIntegrators()[0]->uDotFactorTag();
7670 if (!nl->hasVector(tag_udot))
7671 nl->associateVectorToTag(*nl->solutionUDot(), tag_udot);
7672 auto tag_udotdot = nl->getTimeIntegrators()[0]->uDotDotFactorTag();
7673 if (!nl->hasVector(tag_udotdot) && uDotDotRequested())
7674 nl->associateVectorToTag(*nl->solutionUDotDot(), tag_udotdot);
7675 }
7676
7678 // Time integrator does not exist when displaced problem is created.
7679 _displaced_problem->addTimeIntegrator();
7680}
virtual void addTimeIntegrator(const std::string &type, const std::string &name, InputParameters &parameters)
virtual bool uDotDotRequested()
Get boolean flag to check whether solution second time derivative needs to be stored.

Referenced by TransientBase::setupTimeIntegrator().

◆ addTransfer()

void FEProblemBase::addTransfer ( const std::string &  transfer_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Add a Transfer to the problem.

Reimplemented in MFEMProblem.

Definition at line 6461 of file FEProblemBase.C.

6464{
6465 parallel_object_only();
6466
6467 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
6468 {
6469 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
6470 parameters.set<SystemBase *>("_sys") = &_displaced_problem->auxSys();
6472 }
6473 else
6474 {
6475 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
6476 {
6477 // We allow Transfers to request that they use_displaced_mesh,
6478 // but then be overridden when no displacements variables are
6479 // provided in the Mesh block. If that happened, update the value
6480 // of use_displaced_mesh appropriately for this Transfer.
6481 if (parameters.have_parameter<bool>("use_displaced_mesh"))
6482 parameters.set<bool>("use_displaced_mesh") = false;
6483 }
6484
6485 parameters.set<SubProblem *>("_subproblem") = this;
6486 parameters.set<SystemBase *>("_sys") = _aux.get();
6487 }
6488
6489 // Handle the "SAME_AS_MULTIAPP" execute option. The get method is used to test for the
6490 // flag so the set by user flag is not reset, calling set with the true flag causes the set
6491 // by user status to be reset, which should only be done if the EXEC_SAME_AS_MULTIAPP is
6492 // being applied to the object.
6494 {
6495 ExecFlagEnum & exec_enum = parameters.set<ExecFlagEnum>("execute_on", true);
6496 std::shared_ptr<MultiApp> multiapp;
6497 if (parameters.isParamValid("multi_app"))
6498 multiapp = getMultiApp(parameters.get<MultiAppName>("multi_app"));
6499 // This catches the sibling transfer case, where we want to be executing only as often as the
6500 // receiving application. A transfer 'to' a multiapp is executed before that multiapp
6501 else if (parameters.isParamValid("to_multi_app"))
6502 multiapp = getMultiApp(parameters.get<MultiAppName>("to_multi_app"));
6503 else if (parameters.isParamValid("from_multi_app"))
6504 multiapp = getMultiApp(parameters.get<MultiAppName>("from_multi_app"));
6505 // else do nothing because the user has provided invalid input. They should get a nice error
6506 // about this during transfer construction. This necessitates checking for null in this next
6507 // line, however
6508 if (multiapp)
6509 exec_enum = multiapp->getParam<ExecFlagEnum>("execute_on");
6510 }
6511
6512 // Create the Transfer objects
6513 std::shared_ptr<Transfer> transfer = _factory.create<Transfer>(transfer_name, name, parameters);
6514 logAdd("Transfer", name, transfer_name, parameters);
6515
6516 // Add MultiAppTransfer object
6517 std::shared_ptr<MultiAppTransfer> multi_app_transfer =
6518 std::dynamic_pointer_cast<MultiAppTransfer>(transfer);
6519 if (multi_app_transfer)
6520 {
6521 if (multi_app_transfer->directions().isValueSet(MultiAppTransfer::TO_MULTIAPP))
6522 _to_multi_app_transfers.addObject(multi_app_transfer);
6523 if (multi_app_transfer->directions().isValueSet(MultiAppTransfer::FROM_MULTIAPP))
6524 _from_multi_app_transfers.addObject(multi_app_transfer);
6525 if (multi_app_transfer->directions().isValueSet(MultiAppTransfer::BETWEEN_MULTIAPP))
6526 _between_multi_app_transfers.addObject(multi_app_transfer);
6527 }
6528 else
6529 _transfers.addObject(transfer);
6530}
const ExecFlagType EXEC_SAME_AS_MULTIAPP
Definition Moose.C:56
std::shared_ptr< MultiApp > getMultiApp(const std::string &multi_app_name) const
Get a MultiApp object by name.
bool isValueSet(const std::string &value) const
Methods for seeing if a value is set in the MultiMooseEnum.
Base class for all Transfer objects.
Definition Transfer.h:40
@ FROM_MULTIAPP
Definition Transfer.h:71
@ TO_MULTIAPP
Definition Transfer.h:70
@ BETWEEN_MULTIAPP
Definition Transfer.h:72

Referenced by MFEMProblem::addTransfer().

◆ addUserObject()

std::vector< std::shared_ptr< UserObject > > FEProblemBase::addUserObject ( const std::string &  user_object_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Definition at line 4704 of file FEProblemBase.C.

4707{
4708 parallel_object_only();
4709
4710 std::vector<std::shared_ptr<UserObject>> uos;
4711
4712 // Add the _subproblem and _sys parameters depending on use_displaced_mesh
4714
4715 for (const auto tid : make_range(libMesh::n_threads()))
4716 {
4717 // Create the UserObject
4718 std::shared_ptr<UserObject> user_object =
4719 _factory.create<UserObject>(user_object_name, name, parameters, tid);
4720 logAdd("UserObject", name, user_object_name, parameters);
4721 uos.push_back(user_object);
4722
4723 if (tid != 0)
4724 user_object->setPrimaryThreadCopy(uos[0].get());
4725
4726 theWarehouse().add(user_object);
4727
4728 // Attempt to create all the possible UserObject types
4729 auto euo = std::dynamic_pointer_cast<ElementUserObject>(user_object);
4730 auto suo = std::dynamic_pointer_cast<SideUserObject>(user_object);
4731 auto isuo = std::dynamic_pointer_cast<InternalSideUserObject>(user_object);
4732 auto iuo = std::dynamic_pointer_cast<InterfaceUserObjectBase>(user_object);
4733 auto nuo = std::dynamic_pointer_cast<NodalUserObject>(user_object);
4734 auto duo = std::dynamic_pointer_cast<DomainUserObject>(user_object);
4735 auto guo = std::dynamic_pointer_cast<GeneralUserObject>(user_object);
4736 auto tguo = std::dynamic_pointer_cast<ThreadedGeneralUserObject>(user_object);
4737 auto muo = std::dynamic_pointer_cast<MortarUserObject>(user_object);
4738
4739 // Account for displaced mesh use
4740 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
4741 {
4742 // Whether to re-init or not depends on the attributes of the base classes.
4743 // For example, InterfaceUOBase has "_current_side_elem" and "_neighbor_elem"
4744 // so it needs to reinit on displaced neighbors and faces
4745 // _reinit_displaced_elem -> _current_elem will be reinited
4746 // _reinit_displaced_face -> _current_elem, lowerD if any and _current_side_elem to be
4747 // reinited _reinit_displaced_neighbor -> _current_elem, lowerD if any and _current_neighbor
4748 // to be reinited Note that as soon as you use materials on the displaced mesh, all three get
4749 // turned on.
4750 if (euo || nuo || duo)
4752 if (suo || duo || isuo || iuo)
4754 if (iuo || duo || isuo)
4756 }
4757
4758 // These objects only require one thread
4759 if ((guo && !tguo) || muo)
4760 break;
4761 }
4762
4763 // Add as a Functor if it is one. We usually need to add the user object from thread 0 as the
4764 // registered functor for all threads because when user objects are thread joined, generally only
4765 // the primary thread copy ends up with all the data
4766 for (const auto tid : make_range(libMesh::n_threads()))
4767 {
4768 const decltype(uos)::size_type uo_index = uos.front()->needThreadedCopy() ? tid : 0;
4769 if (const auto functor = dynamic_cast<Moose::FunctorBase<Real> *>(uos[uo_index].get()))
4770 {
4771 this->addFunctor(name, *functor, tid);
4773 _displaced_problem->addFunctor(name, *functor, tid);
4774 }
4775 }
4776
4777 return uos;
4778}
Base class for user-specific data.
Definition UserObject.h:20

Referenced by addPostprocessor(), addReporter(), PhysicsBase::addUserObject(), and addVectorPostprocessor().

◆ addVariable()

void FEProblemBase::addVariable ( const std::string &  var_type,
const std::string &  var_name,
InputParameters params 
)
virtual

Canonical method for adding a non-linear variable.

Parameters
var_typethe type of the variable, e.g. MooseVariableScalar
var_namethe variable name, e.g. 'u'
paramsthe InputParameters from which to construct the variable

Reimplemented in MFEMEigenproblem, MFEMProblem, and DumpObjectsProblem.

Definition at line 3083 of file FEProblemBase.C.

3086{
3087 parallel_object_only();
3088
3089 const auto order = Utility::string_to_enum<Order>(params.get<MooseEnum>("order"));
3090 const auto family = Utility::string_to_enum<FEFamily>(params.get<MooseEnum>("family"));
3091 const auto fe_type = FEType(order, family);
3092
3093 const auto active_subdomains_vector =
3094 _mesh.getSubdomainIDs(params.get<std::vector<SubdomainName>>("block"));
3095 const std::set<SubdomainID> active_subdomains(active_subdomains_vector.begin(),
3096 active_subdomains_vector.end());
3097
3098 if (duplicateVariableCheck(var_name, fe_type, /* is_aux = */ false, &active_subdomains))
3099 return;
3100
3101 params.set<FEProblemBase *>("_fe_problem_base") = this;
3103 SolverSystemName sys_name = params.get<SolverSystemName>("solver_sys");
3104
3105 const auto solver_system_number = solverSysNum(sys_name);
3106 logAdd("Variable", var_name, var_type, params);
3107 _solver_systems[solver_system_number]->addVariable(var_type, var_name, params);
3109 // MooseObjects need to be unique so change the name here
3110 _displaced_problem->addVariable(var_type, var_name, params, solver_system_number);
3111
3112 _solver_var_to_sys_num[var_name] = solver_system_number;
3113
3114 markFamilyPRefinement(params);
3116 _displaced_problem->markFamilyPRefinement(params);
3117}
unsigned int solverSysNum(const SolverSystemName &solver_sys_name) const override
std::map< SolverVariableName, unsigned int > _solver_var_to_sys_num
Map connecting variable names with their respective solver systems.
@ VAR_SOLVER
Definition MooseTypes.h:770

Referenced by MFEMProblem::addGridFunction(), DiffusionCG::addSolverVariables(), DiffusionFV::addSolverVariables(), and AddVariableAction::init().

◆ addVectorPostprocessor()

void FEProblemBase::addVectorPostprocessor ( const std::string &  pp_name,
const std::string &  name,
InputParameters parameters 
)
virtual

Reimplemented in MFEMProblem.

Definition at line 4684 of file FEProblemBase.C.

4687{
4688 checkUserObjectNameCollision(name, "VectorPostprocessor");
4689
4690 addUserObject(pp_name, name, parameters);
4691}

Referenced by MFEMProblem::addVectorPostprocessor(), and ExtraIDIntegralReporter::ExtraIDIntegralReporter().

◆ addVectorTag()

TagID SubProblem::addVectorTag ( const TagName &  tag_name,
const Moose::VectorTagType  type = Moose::VECTOR_TAG_RESIDUAL 
)
virtualinherited

Create a Tag.

Tags can be associated with Vectors and Matrices and allow objects (such as Kernels) to arbitrarily contribute values to any set of vectors/matrics

Note: If the tag is already present then this will simply return the TagID of that Tag, but the type must be the same.

Parameters
tag_nameThe name of the tag to create, the TagID will get automatically generated
typeThe type of the tag

Reimplemented in DisplacedProblem.

Definition at line 91 of file SubProblem.C.

93{
95 mooseError("Vector tag type cannot be VECTOR_TAG_ANY");
96
97 const auto tag_name_upper = MooseUtils::toUpper(tag_name);
98
99 // First, see if the tag exists already
100 for (const auto & vector_tag : _vector_tags)
101 {
102 mooseAssert(_vector_tags[vector_tag._id] == vector_tag, "Vector tags index mismatch");
103 if (vector_tag._name == tag_name_upper)
104 {
105 if (vector_tag._type != type)
106 mooseError("While attempting to add vector tag with name '",
107 tag_name_upper,
108 "' and type ",
109 type,
110 ",\na tag with the same name but type ",
111 vector_tag._type,
112 " was found.\n\nA tag can only exist with one type.");
113
114 return vector_tag._id;
115 }
116 }
117
118 // Doesn't exist - create it
119 const TagID new_tag_id = _vector_tags.size();
120 const TagTypeID new_tag_type_id = _typed_vector_tags[type].size();
121 // Primary storage for all tags where the index in the vector == the tag ID
122 _vector_tags.emplace_back(new_tag_id, new_tag_type_id, tag_name_upper, type);
123 // Secondary storage for each type so that we can have quick access to all tags of a type
124 _typed_vector_tags[type].emplace_back(new_tag_id, new_tag_type_id, tag_name_upper, type);
125 // Name map storage for quick name access
126 _vector_tags_name_map.emplace(tag_name_upper, new_tag_id);
127
128 // Make sure that _vector_tags, _typed_vector_tags, and _vector_tags_name_map are sane
130
131 return new_tag_id;
132}
unsigned int TagID
Definition MooseTypes.h:238
unsigned int TagTypeID
Definition MooseTypes.h:239
std::vector< VectorTag > _vector_tags
The declared vector tags.
std::vector< std::vector< VectorTag > > _typed_vector_tags
The vector tags associated with each VectorTagType This is kept separate from _vector_tags for quick ...
std::map< TagName, TagID > _vector_tags_name_map
Map of vector tag TagName to TagID.
bool verifyVectorTags() const
Verify the integrity of _vector_tags and _typed_vector_tags.
Definition SubProblem.C:240
@ VECTOR_TAG_ANY

Referenced by DisplacedProblem::addVectorTag(), PicardSolve::allocateStorage(), SecantSolve::allocateStorage(), SteffensenSolve::allocateStorage(), createTagSolutions(), createTagVectors(), NonlinearSystemBase::getResidualNonTimeVector(), NonlinearSystemBase::getResidualTimeVector(), LinearSystem::LinearSystem(), SystemBase::needSolutionState(), NonlinearEigenSystem::NonlinearEigenSystem(), and NonlinearSystemBase::NonlinearSystemBase().

◆ advanceMultiApps()

void FEProblemBase::advanceMultiApps ( ExecFlagType  type)
inline

Deprecated method; use finishMultiAppStep and/or incrementMultiAppTStep depending on your purpose.

Definition at line 1731 of file FEProblemBase.h.

1732 {
1733 mooseDeprecated("Deprecated method; use finishMultiAppStep and/or incrementMultiAppTStep "
1734 "depending on your purpose");
1736 }
void finishMultiAppStep(ExecFlagType type, bool recurse_through_multiapp_levels=false)
Finish the MultiApp time step (endStep, postStep) associated with the ExecFlagType.

◆ advanceState()

void FEProblemBase::advanceState ( )
virtual

Advance all of the state holding vectors / datastructures so that we can move to the next timestep.

Reimplemented in DumpObjectsProblem.

Definition at line 7484 of file FEProblemBase.C.

7485{
7486 TIME_SECTION("advanceState", 5, "Advancing State");
7487
7488 for (auto & sys : _solver_systems)
7489 sys->advanceStateHistory(Moose::SolutionIterationType::Time);
7490 _aux->advanceStateHistory(Moose::SolutionIterationType::Time);
7491
7493 {
7494 for (const auto i : index_range(_solver_systems))
7495 _displaced_problem->solverSys(i).advanceStateHistory(Moose::SolutionIterationType::Time);
7496 _displaced_problem->auxSys().advanceStateHistory(Moose::SolutionIterationType::Time);
7497 }
7498
7500
7502
7505
7508
7511
7512#ifdef MOOSE_KOKKOS_ENABLED
7515
7518
7521#endif
7522}
void copyValuesBack()
Copies current chain control data values into old values.
void shift()
Shift the material properties in time.
ChainControlDataSystem & getChainControlDataSystem()
Gets the system that manages the ChainControls.
Definition MooseApp.h:891
MooseApp & getMooseApp() const
Get the MooseApp this class is associated with.
Definition MooseBase.h:87
void shift()
Shift current, old, and older material property data storages.
void copyValuesBack()
At the end of a timestep this method is called to copy the values back in time in preparation for the...
SolutionIterationType
Definition MooseTypes.h:270

Referenced by Eigenvalue::execute(), SteadyBase::execute(), MFEMSteady::execute(), TransientBase::incrementStepOrReject(), NonlinearEigen::init(), TransientMultiApp::setupApp(), ExplicitRK2::solve(), ExplicitTVDRK2::solve(), TransientMultiApp::solveStep(), InversePowerMethod::takeStep(), and NonlinearEigen::takeStep().

◆ allowInvalidSolution()

bool FEProblemBase::allowInvalidSolution ( ) const
inline

Whether to accept / allow an invalid solution.

Definition at line 2454 of file FEProblemBase.h.

2454{ return _allow_invalid_solution; }

Referenced by acceptInvalidSolution().

◆ allowMeshContractionAfterMeshChanged()

virtual bool FEProblemBase::allowMeshContractionAfterMeshChanged ( ) const
inlinevirtual

Whether meshChanged() should allow the mesh to be contracted (deletes children of coarsened elements and renumbers nodes and elements).

This should be overriden with care as disabling contraction may result in a substantial increase in the memory footprint of the mesh.

Definition at line 2195 of file FEProblemBase.h.

2195{ return true; }

Referenced by meshChanged().

◆ allowOutput() [1/2]

void FEProblemBase::allowOutput ( bool  state)

Ability to enable/disable all output calls.

This is needed by Multiapps and applications to disable output for cases when executioners call other executions and when Multiapps are sub cycling.

Definition at line 7591 of file FEProblemBase.C.

7592{
7594}
void allowOutput(bool state)
Ability to enable/disable output calls This is private, users should utilize FEProblemBase::allowOutp...

Referenced by TransientMultiApp::resetApp(), and TransientMultiApp::solveStep().

◆ allowOutput() [2/2]

template<typename T >
void FEProblemBase::allowOutput ( bool  state)

Definition at line 3745 of file FEProblemBase.h.

3746{
3748}

◆ areCoupled()

bool FEProblemBase::areCoupled ( const unsigned int  ivar,
const unsigned int  jvar,
const unsigned int  nl_sys_num 
) const

Definition at line 7017 of file FEProblemBase.C.

7020{
7021 return (*_cm[nl_sys])(ivar, jvar);
7022}

Referenced by NonlinearSystemBase::constraintJacobians().

◆ assembly() [1/2]

const Assembly & FEProblemBase::assembly ( const THREAD_ID  tid,
const unsigned int  sys_num 
) const
inlineoverridevirtual

Implements SubProblem.

Definition at line 3902 of file FEProblemBase.h.

3903{
3904 mooseAssert(tid < _assembly.size(), "Assembly objects not initialized");
3905 mooseAssert(sys_num < _assembly[tid].size(),
3906 "System number larger than the assembly container size");
3907 return *_assembly[tid][sys_num];
3908}

◆ assembly() [2/2]

Assembly & FEProblemBase::assembly ( const THREAD_ID  tid,
const unsigned int  sys_num 
)
inlineoverridevirtual

◆ automaticScaling() [1/3]

bool SubProblem::automaticScaling ( ) const

Automatic scaling getter.

Returns
A boolean representing whether we are performing automatic scaling

Definition at line 842 of file SubProblem.C.

1178{
1179 // Currently going to assume that we are applying or not applying automatic scaling consistently
1180 // across nonlinear systems
1182}
virtual const SystemBase & systemBaseNonlinear(const unsigned int sys_num) const override
Return the nonlinear system object as a base class reference given the system number.
bool automaticScaling() const
Getter for whether we are performing automatic scaling.
Definition SystemBase.h:123

◆ automaticScaling() [2/3]

void SubProblem::automaticScaling ( bool  automatic_scaling)
virtual

Automatic scaling setter.

Parameters
automatic_scalingA boolean representing whether we are performing automatic scaling

Reimplemented from SubProblem.

Definition at line 836 of file SubProblem.C.

1171{
1172 for (const auto nl_sys_num : make_range(numNonlinearSystems()))
1173 systemBaseNonlinear(nl_sys_num).automaticScaling(automatic_scaling);
1174}
bool automaticScaling() const
Automatic scaling getter.

◆ automaticScaling() [3/3]

void FEProblemBase::automaticScaling ( bool  automatic_scaling)
overridevirtual

Automatic scaling setter.

Parameters
automatic_scalingA boolean representing whether we are performing automatic scaling

Reimplemented from SubProblem.

Definition at line 10016 of file FEProblemBase.C.

10017{
10019 _displaced_problem->automaticScaling(automatic_scaling);
10020
10021 SubProblem::automaticScaling(automatic_scaling);
10022}
bool automaticScaling() const
Automatic scaling getter.

Referenced by DisplacedProblem::DisplacedProblem(), and FEProblemSolve::FEProblemSolve().

◆ backupMultiApps()

void FEProblemBase::backupMultiApps ( ExecFlagType  type)

Backup the MultiApps associated with the ExecFlagType.

Definition at line 6396 of file FEProblemBase.C.

6397{
6398 const auto & multi_apps = _multi_apps[type].getActiveObjects();
6399
6400 if (multi_apps.size())
6401 {
6402 TIME_SECTION("backupMultiApps", 5, "Backing Up MultiApp");
6403
6405 _console << COLOR_CYAN << "\nBacking Up MultiApps on " << type.name() << COLOR_DEFAULT
6406 << std::endl;
6407
6408 for (const auto & multi_app : multi_apps)
6409 multi_app->backup();
6410
6412
6414 _console << COLOR_CYAN << "Finished Backing Up MultiApps on " << type.name() << "\n"
6415 << COLOR_DEFAULT << std::endl;
6416 }
6417}
const std::vector< std::shared_ptr< T > > & getActiveObjects(THREAD_ID tid=0) const
Retrieve complete vector to the active all/block/boundary restricted objects for a given thread.
void parallelBarrierNotify(const Parallel::Communicator &comm, bool messaging)
Definition MooseUtils.C:338

Referenced by FixedPointSolve::solve().

◆ bumpAllQRuleOrder()

void FEProblemBase::bumpAllQRuleOrder ( libMesh::Order  order,
SubdomainID  block 
)

Definition at line 6874 of file FEProblemBase.C.

6875{
6876 for (unsigned int tid = 0; tid < libMesh::n_threads(); ++tid)
6877 for (const auto i : index_range(_nl))
6878 _assembly[tid][i]->bumpAllQRuleOrder(order, block);
6879
6881 _displaced_problem->bumpAllQRuleOrder(order, block);
6882
6883 updateMaxQps();
6884}
void bumpAllQRuleOrder(libMesh::Order order, SubdomainID block)

Referenced by bumpAllQRuleOrder().

◆ bumpVolumeQRuleOrder()

void FEProblemBase::bumpVolumeQRuleOrder ( libMesh::Order  order,
SubdomainID  block 
)

Increases the element/volume quadrature order for the specified mesh block if and only if the current volume quadrature order is lower.

This can only cause the quadrature level to increase. If volume_order is lower than or equal to the current volume/elem quadrature rule order, then nothing is done (i.e. this function is idempotent).

Definition at line 6861 of file FEProblemBase.C.

6862{
6863 for (unsigned int tid = 0; tid < libMesh::n_threads(); ++tid)
6864 for (const auto i : index_range(_nl))
6865 _assembly[tid][i]->bumpVolumeQRuleOrder(order, block);
6866
6868 _displaced_problem->bumpVolumeQRuleOrder(order, block);
6869
6870 updateMaxQps();
6871}
void bumpVolumeQRuleOrder(libMesh::Order order, SubdomainID block)
Increases the element/volume quadrature order for the specified mesh block if and only if the current...

Referenced by bumpVolumeQRuleOrder().

◆ cacheJacobian()

void FEProblemBase::cacheJacobian ( const THREAD_ID  tid)
overridevirtual

Reimplemented from SubProblem.

Definition at line 2204 of file FEProblemBase.C.

2205{
2208 _displaced_problem->cacheJacobian(tid);
2209}
virtual void cacheJacobian(const THREAD_ID tid)

Referenced by ComputeResidualAndJacobianThread::accumulate(), NonlinearSystemBase::constraintJacobians(), and ComputeJacobianThread::postElement().

◆ cacheJacobianNeighbor()

void FEProblemBase::cacheJacobianNeighbor ( const THREAD_ID  tid)
overridevirtual

Reimplemented from SubProblem.

Definition at line 2212 of file FEProblemBase.C.

2213{
2216 _displaced_problem->cacheJacobianNeighbor(tid);
2217}
virtual void cacheJacobianNeighbor(const THREAD_ID tid)

Referenced by NonlinearSystemBase::constraintJacobians().

◆ cacheResidual()

void FEProblemBase::cacheResidual ( const THREAD_ID  tid)
overridevirtual

Reimplemented from SubProblem.

Definition at line 2075 of file FEProblemBase.C.

2076{
2079 _displaced_problem->cacheResidual(tid);
2080}
virtual void cacheResidual(const THREAD_ID tid)

Referenced by ComputeResidualAndJacobianThread::accumulate(), ComputeResidualThread::accumulate(), and NonlinearSystemBase::constraintResiduals().

◆ cacheResidualNeighbor()

void FEProblemBase::cacheResidualNeighbor ( const THREAD_ID  tid)
overridevirtual

Reimplemented from SubProblem.

Definition at line 2083 of file FEProblemBase.C.

2084{
2087 _displaced_problem->cacheResidualNeighbor(tid);
2088}
virtual void cacheResidualNeighbor(const THREAD_ID tid)

Referenced by NonlinearSystemBase::constraintResiduals().

◆ callMooseError() [1/2]

void MooseBase::callMooseError ( MooseApp *const  app,
const InputParameters params,
std::string  msg,
const bool  with_prefix,
const hit::Node *  node,
const bool  show_trace = true 
)
staticinherited

External method for calling moose error with added object context.

Needed so that objects without the MooseBase context (InputParameters) can call errors with context

Parameters
appThe app pointer (if available); adds multiapp context and clears the console
paramsThe parameters, needed to obtain object information
msgThe message
with_prefixIf true, add the prefix from messagePrefix(), which is the object information (type, name, etc)
nodeOptional hit node to add file path context as a prefix
show_traceWhether or not to show a stack trace, defaults to true

Definition at line 114 of file MooseBase.C.

120{
121 if (!node)
122 node = MooseBase::getHitNode(params);
123
124 std::string multiapp_prefix = "";
125 if (app)
126 {
127 if (!app->isUltimateMaster())
128 multiapp_prefix = app->name();
130 }
131
132 if (with_prefix)
133 // False here because the hit context will get processed by the node
134 msg = messagePrefix(params, false) + msg;
135
136 moose::internal::mooseErrorRaw(msg, multiapp_prefix, node, show_trace);
137}
const hit::Node * getHitNode() const
Definition MooseBase.h:136
std::string messagePrefix(const bool hit_prefix=true) const
Definition MooseBase.h:256
void mooseConsole()
Send current output buffer to Console output objects.
void mooseErrorRaw(std::string msg, const std::string &prefix="", const hit::Node *node=nullptr, const bool show_trace=true)
Main callback for emitting a moose error.
Definition MooseError.C:51

◆ callMooseError() [2/2]

void MooseBase::callMooseError ( std::string  msg,
const bool  with_prefix,
const hit::Node *  node = nullptr,
const bool  show_trace = true 
) const
inherited

External method for calling moose error with added object context.

Parameters
msgThe message
with_prefixIf true, add the prefix from messagePrefix(), which is the object information (type, name, etc)
nodeOptional hit node to add file path context as a prefix
show_traceWhether or not to show a stack trace, defaults to true

Definition at line 105 of file MooseBase.C.

109{
110 callMooseError(&_app, _pars, msg, with_prefix, node, show_trace);
111}
MooseApp & _app
The MOOSE application this is associated with.
Definition MooseBase.h:375
void callMooseError(std::string msg, const bool with_prefix, const hit::Node *node=nullptr, const bool show_trace=true) const
External method for calling moose error with added object context.
Definition MooseBase.C:105
const InputParameters & _pars
The object's parameters.
Definition MooseBase.h:384

Referenced by MooseBase::callMooseError(), InputParameters::callMooseError(), MooseBase::mooseDocumentedError(), MooseBase::mooseError(), and MooseBase::mooseErrorNonPrefixed().

◆ checkBlockMatProps()

void SubProblem::checkBlockMatProps ( )
virtualinherited

Checks block material properties integrity.

See also
FEProblemBase::checkProblemIntegrity

Definition at line 622 of file SubProblem.C.

623{
624 // Variable for storing all available blocks/boundaries from the mesh
625 std::set<SubdomainID> all_ids(mesh().meshSubdomains());
626
627 std::stringstream errors;
628
629 // Loop through the properties to check
630 for (const auto & check_it : _map_block_material_props_check)
631 {
632 // The current id for the property being checked (BoundaryID || BlockID)
633 SubdomainID check_id = check_it.first;
634
635 std::set<SubdomainID> check_ids = {check_id};
636
637 // Loop through all the block/boundary ids
638 for (const auto & id : check_ids)
639 {
640 // Loop through all the stored properties
641 for (const auto & prop_it : check_it.second)
642 {
643 // Produce an error if the material property is not defined on the current block/boundary
644 // and any block/boundary
645 // and not is not a zero material property.
646 if (_map_block_material_props[id].count(prop_it.second) == 0 &&
647 _zero_block_material_props[id].count(prop_it.second) == 0)
648 {
649 std::string check_name = restrictionSubdomainCheckName(id);
650 if (check_name.empty())
651 check_name = std::to_string(id);
652 errors << "Material property '" << prop_it.second << "', requested by '" << prop_it.first
653 << "' is not defined on block " << check_name << "\n";
654 }
655 }
656 }
657 }
658
659 if (!errors.str().empty())
660 mooseError(errors.str());
661}
unsigned int count
Definition MortarUtils.C:53
std::map< SubdomainID, std::set< MaterialPropertyName > > _zero_block_material_props
Set of properties returned as zero properties.
std::map< SubdomainID, std::multimap< std::string, std::string > > _map_block_material_props_check
Data structures of the requested material properties.
std::string restrictionSubdomainCheckName(SubdomainID check_id)
Helper functions for checking MaterialProperties.
Definition SubProblem.C:771
std::map< SubdomainID, std::set< std::string > > _map_block_material_props
Map of material properties (block_id -> list of properties)

Referenced by checkProblemIntegrity().

◆ checkBoundaryMatProps()

void SubProblem::checkBoundaryMatProps ( )
virtualinherited

Checks boundary material properties integrity.

See also
FEProblemBase::checkProblemIntegrity

Definition at line 664 of file SubProblem.C.

665{
666 // Variable for storing the value for ANY_BOUNDARY_ID
668
669 // Variable for storing all available blocks/boundaries from the mesh
670 std::set<BoundaryID> all_ids(mesh().getBoundaryIDs());
671
672 std::stringstream errors;
673
674 // Loop through the properties to check
675 for (const auto & check_it : _map_boundary_material_props_check)
676 {
677 // The current id for the property being checked (BoundaryID || BlockID)
678 BoundaryID check_id = check_it.first;
679
680 // In the case when the material being checked has an ID is set to ANY, then loop through all
681 // the possible ids and verify that the material property is defined.
682 std::set<BoundaryID> check_ids{check_id};
683 if (check_id == any_id)
684 check_ids = all_ids;
685
686 // Loop through all the block/boundary ids
687 for (const auto & id : check_ids)
688 {
689 // Loop through all the stored properties
690 for (const auto & prop_it : check_it.second)
691 {
692 // Produce an error if the material property is not defined on the current block/boundary
693 // and any block/boundary
694 // and not is not a zero material property.
695 if (_map_boundary_material_props[id].count(prop_it.second) == 0 &&
696 _map_boundary_material_props[any_id].count(prop_it.second) == 0 &&
697 _zero_boundary_material_props[id].count(prop_it.second) == 0 &&
698 _zero_boundary_material_props[any_id].count(prop_it.second) == 0)
699 {
700 std::string check_name = restrictionBoundaryCheckName(id);
701 if (check_name.empty())
702 check_name = std::to_string(id);
703 errors << "Material property '" << prop_it.second << "', requested by '" << prop_it.first
704 << "' is not defined on boundary " << check_name << "\n";
705 }
706 }
707 }
708 }
709
710 if (!errors.str().empty())
711 mooseError(errors.str());
712}
boundary_id_type BoundaryID
std::string restrictionBoundaryCheckName(BoundaryID check_id)
Definition SubProblem.C:782
std::map< BoundaryID, std::multimap< std::string, std::string > > _map_boundary_material_props_check
std::map< BoundaryID, std::set< std::string > > _map_boundary_material_props
Map for boundary material properties (boundary_id -> list of properties)
std::map< BoundaryID, std::set< MaterialPropertyName > > _zero_boundary_material_props
std::vector< BoundaryID > getBoundaryIDs(const libMesh::MeshBase &mesh, const std::vector< BoundaryName > &boundary_name, bool generate_unknown, const std::set< BoundaryID > &mesh_boundary_ids)
Gets the boundary IDs with their names.
const BoundaryID ANY_BOUNDARY_ID
Definition MooseTypes.C:21

Referenced by checkProblemIntegrity().

◆ checkCoordinateSystems()

void FEProblemBase::checkCoordinateSystems ( )
protected

Verify that there are no element type/coordinate type conflicts.

Definition at line 9582 of file FEProblemBase.C.

9583{
9585}
void checkCoordinateSystems()
Performs a sanity check for every element in the mesh.
Definition MooseMesh.C:4391

Referenced by checkProblemIntegrity().

◆ checkDependMaterialsHelper()

void FEProblemBase::checkDependMaterialsHelper ( const std::map< SubdomainID, std::vector< std::shared_ptr< MaterialBase > > > &  materials_map)
protected

Helper method for checking Material object dependency.

See also
checkProblemIntegrity

These two sets are used to make sure that all dependent props on a block are actually supplied

Definition at line 9461 of file FEProblemBase.C.

9463{
9464 for (const auto & it : materials_map)
9465 {
9467 std::set<std::string> block_depend_props, block_supplied_props;
9468
9469 for (const auto & mat1 : it.second)
9470 {
9471 auto & alldeps = mat1->getMatPropDependencies(); // includes requested stateful props
9472 for (auto & dep : alldeps)
9473 block_depend_props.insert(_material_prop_registry.getName(dep));
9474
9475 // See if any of the active materials supply this property
9476 for (const auto & mat2 : it.second)
9477 {
9478 const std::set<std::string> & supplied_props = mat2->MaterialBase::getSuppliedItems();
9479 block_supplied_props.insert(supplied_props.begin(), supplied_props.end());
9480 }
9481 }
9482
9483 // Add zero material properties specific to this block and unrestricted
9484 block_supplied_props.insert(_zero_block_material_props[it.first].begin(),
9485 _zero_block_material_props[it.first].end());
9486
9487 // Error check to make sure all properties consumed by materials are supplied on this block
9488 std::set<std::string> difference;
9489 std::set_difference(block_depend_props.begin(),
9490 block_depend_props.end(),
9491 block_supplied_props.begin(),
9492 block_supplied_props.end(),
9493 std::inserter(difference, difference.end()));
9494
9495 if (!difference.empty())
9496 {
9497 std::ostringstream oss;
9498 oss << "One or more Material Properties were not supplied on block ";
9499 const std::string & subdomain_name = _mesh.getSubdomainName(it.first);
9500 if (subdomain_name.length() > 0)
9501 oss << subdomain_name << " (" << it.first << ")";
9502 else
9503 oss << it.first;
9504 oss << ":\n";
9505 for (const auto & name : difference)
9506 oss << name << "\n";
9507 mooseError(oss.str());
9508 }
9509 }
9510
9511 // This loop checks that materials are not supplied by multiple Material objects
9512 for (const auto & it : materials_map)
9513 {
9514 const auto & materials = it.second;
9515 std::set<std::string> inner_supplied, outer_supplied;
9516
9517 for (const auto & outer_mat : materials)
9518 {
9519 // Storage for properties for this material (outer) and all other materials (inner)
9520 outer_supplied = outer_mat->getSuppliedItems();
9521 inner_supplied.clear();
9522
9523 // Property to material map for error reporting
9524 std::map<std::string, std::set<std::string>> prop_to_mat;
9525 for (const auto & name : outer_supplied)
9526 prop_to_mat[name].insert(outer_mat->name());
9527
9528 for (const auto & inner_mat : materials)
9529 {
9530 if (outer_mat == inner_mat)
9531 continue;
9532
9533 // Check whether these materials are an AD pair
9534 auto outer_mat_type = outer_mat->type();
9535 auto inner_mat_type = inner_mat->type();
9536 removeSubstring(outer_mat_type, "<RESIDUAL>");
9537 removeSubstring(outer_mat_type, "<JACOBIAN>");
9538 removeSubstring(inner_mat_type, "<RESIDUAL>");
9539 removeSubstring(inner_mat_type, "<JACOBIAN>");
9540 if (outer_mat_type == inner_mat_type && outer_mat_type != outer_mat->type() &&
9541 inner_mat_type != inner_mat->type())
9542 continue;
9543
9544 inner_supplied.insert(inner_mat->getSuppliedItems().begin(),
9545 inner_mat->getSuppliedItems().end());
9546
9547 for (const auto & inner_supplied_name : inner_supplied)
9548 prop_to_mat[inner_supplied_name].insert(inner_mat->name());
9549 }
9550
9551 // Test that a property isn't supplied on multiple blocks
9552 std::set<std::string> intersection;
9553 std::set_intersection(outer_supplied.begin(),
9554 outer_supplied.end(),
9555 inner_supplied.begin(),
9556 inner_supplied.end(),
9557 std::inserter(intersection, intersection.end()));
9558
9559 if (!intersection.empty())
9560 {
9561 std::ostringstream oss;
9562 oss << "The following material properties are declared on block " << it.first
9563 << " by multiple materials:\n";
9564 oss << ConsoleUtils::indent(2) << std::setw(30) << std::left << "Material Property"
9565 << "Material Objects\n";
9566 for (const auto & outer_name : intersection)
9567 {
9568 oss << ConsoleUtils::indent(2) << std::setw(30) << std::left << outer_name;
9569 for (const auto & inner_name : prop_to_mat[outer_name])
9570 oss << inner_name << " ";
9571 oss << '\n';
9572 }
9573
9574 mooseError(oss.str());
9575 break;
9576 }
9577 }
9578 }
9579}
void removeSubstring(std::string &main, const std::string &sub)
const std::string & getSubdomainName(SubdomainID subdomain_id) const
Return the name of a block given an id.
Definition MooseMesh.C:1714
std::string indent(unsigned int spaces)
Create empty string for indenting.

Referenced by checkProblemIntegrity().

◆ checkDisplacementOrders()

void FEProblemBase::checkDisplacementOrders ( )
protected

Verify that SECOND order mesh uses SECOND order displacements.

Definition at line 9385 of file FEProblemBase.C.

9386{
9388 {
9389 bool mesh_has_second_order_elements = false;
9390 for (const auto & elem : as_range(_displaced_mesh->activeLocalElementsBegin(),
9391 _displaced_mesh->activeLocalElementsEnd()))
9392 {
9393 if (elem->default_order() == SECOND)
9394 {
9395 mesh_has_second_order_elements = true;
9396 break;
9397 }
9398 }
9399
9400 // We checked our local elements, so take the max over all processors.
9401 _displaced_mesh->comm().max(mesh_has_second_order_elements);
9402
9403 // If the Mesh has second order elements, make sure the
9404 // displacement variables are second-order.
9405 if (mesh_has_second_order_elements)
9406 {
9407 const std::vector<std::string> & displacement_variables =
9408 _displaced_problem->getDisplacementVarNames();
9409
9410 for (const auto & var_name : displacement_variables)
9411 {
9412 MooseVariableFEBase & mv =
9413 _displaced_problem->getVariable(/*tid=*/0,
9414 var_name,
9417 if (mv.order() != SECOND)
9418 mooseError("Error: mesh has SECOND order elements, so all displacement variables must be "
9419 "SECOND order.");
9420 }
9421 }
9422 }
9423}
libMesh::Order order() const
Get the order of this variable Note: Order enum can be implicitly converted to unsigned int.
void max(const T &r, T &o, Request &req) const
@ VAR_FIELD_STANDARD
Definition MooseTypes.h:777
SimpleRange< IndexType > as_range(const std::pair< IndexType, IndexType > &p)

Referenced by checkProblemIntegrity().

◆ checkDuplicatePostprocessorVariableNames()

void FEProblemBase::checkDuplicatePostprocessorVariableNames ( )

Definition at line 1666 of file FEProblemBase.C.

1667{
1668 for (const auto & pp : _reporter_data.getPostprocessorNames())
1669 if (hasScalarVariable(pp))
1670 mooseError("Postprocessor \"" + pp +
1671 "\" has the same name as a scalar variable in the system.");
1672}

Referenced by checkProblemIntegrity().

◆ checkExceptionAndStopSolve()

void FEProblemBase::checkExceptionAndStopSolve ( bool  print_message = true)
virtual

Check to see if an exception has occurred on any processor and, if possible, force the solve to fail, which will result in the time step being cut.

Notes:

  • The exception have be registered by calling setException() prior to calling this.
  • This is collective on MPI, and must be called simultaneously by all processors!
  • If called when the solve can be interruped, it will do so and also throw a MooseException, which must be handled.
  • If called at a stage in the execution when the solve cannot be interupted (i.e., there is no solve active), it will generate an error and terminate the application.
  • DO NOT CALL THIS IN A THREADED REGION! This is meant to be called just after a threaded section.
Parameters
print_messagewhether to print a message with exception information

Definition at line 7305 of file FEProblemBase.C.

7306{
7308 return;
7309
7310 TIME_SECTION("checkExceptionAndStopSolve", 5);
7311
7312 // See if any processor had an exception. If it did, get back the
7313 // processor that the exception occurred on.
7314 unsigned int processor_id;
7315
7317
7318 if (_has_exception)
7319 {
7321
7323 {
7324 // Print the message
7325 if (_communicator.rank() == 0 && print_message)
7326 {
7327 _console << "\n" << _exception_message << "\n";
7328 if (isTransient())
7329 _console
7330 << "To recover, the solution will fail and then be re-attempted with a reduced time "
7331 "step.\n"
7332 << std::endl;
7333 }
7334
7335 // Stop the solve -- this entails setting
7336 // SNESSetFunctionDomainError() or directly inserting NaNs in the
7337 // residual vector to let PETSc >= 3.6 return DIVERGED_NANORINF.
7338 if (_current_nl_sys)
7340
7343
7344 // and close Aux system (we MUST do this here; see #11525)
7345 _aux->solution().close();
7346
7347 // We've handled this exception, so we no longer have one.
7348 _has_exception = false;
7349
7350 // Force the next non-linear convergence check to fail (and all further residual evaluation
7351 // to be skipped).
7353
7354 // Repropagate the exception, so it can be caught at a higher level, typically
7355 // this is NonlinearSystem::computeResidual().
7357 }
7358 else
7359 mooseError("The following parallel-communicated exception was detected during " +
7360 Moose::stringify(_current_execute_on_flag) + " evaluation:\n" +
7362 "\nBecause this did not occur during residual evaluation, there"
7363 " is no way to handle this, so the solution is aborting.\n");
7364 }
7365}
std::set< TagID > _fe_vector_tags
std::string _exception_message
The error message to go with an exception.
virtual bool isTransient() const override
virtual void stopSolve(const ExecFlagType &exec_flag, const std::set< TagID > &vector_tags_to_close) override
Quit the current solve as soon as possible.
Provides a way for users to bail out of the current solve.
virtual void stopSolve(const ExecFlagType &exec_flag, const std::set< TagID > &vector_tags_to_close)=0
Quit the current solve as soon as possible.
void maxloc(T &r, unsigned int &max_id) const
processor_id_type rank() const
void broadcast(T &data, const unsigned int root_id=0, const bool identical_sizes=false) const
bool isSolverExecFlag(const ExecFlagType &exec_flag)
Definition Moose.C:68

Referenced by NonlinearSystemBase::computeJacobianInternal(), computeUserObjects(), handleException(), DisplacedProblem::updateMesh(), and DisplacedProblem::updateMesh().

◆ checkICRestartError()

void FEProblemBase::checkICRestartError ( const std::string &  ic_name,
const std::string &  name,
const VariableName &  var_name 
)
private

Checks if the variable of the initial condition is getting restarted and errors for specific cases.

Parameters
ic_nameThe name of the initial condition
var_nameThe name of the variable

Definition at line 3755 of file FEProblemBase.C.

3758{
3760 {
3761 std::string restart_method = "";
3762 if (_app.isRestarting())
3763 restart_method =
3764 "a checkpoint restart, by IC object '" + ic_name + "' for variable '" + name + "'";
3765 else if (_app.getExReaderForRestart())
3766 {
3767 std::vector<std::string> restarted_vars = _app.getExReaderForRestart()->get_elem_var_names();
3768 const auto nodal_vars = _app.getExReaderForRestart()->get_nodal_var_names();
3769 const auto global_vars = _app.getExReaderForRestart()->get_global_var_names();
3770 restarted_vars.insert(restarted_vars.end(), nodal_vars.begin(), nodal_vars.end());
3771 restarted_vars.insert(restarted_vars.end(), global_vars.begin(), global_vars.end());
3772
3773 if (std::find(restarted_vars.begin(), restarted_vars.end(), var_name) != restarted_vars.end())
3774 restart_method = "an Exodus restart, by IC object '" + ic_name + "' for variable '" + name +
3775 "' that is also being restarted";
3776 }
3777 if (!restart_method.empty())
3778 mooseError(
3779 "Initial conditions have been specified during ",
3780 restart_method,
3781 ".\nThis is only allowed if you specify 'allow_initial_conditions_with_restart' to "
3782 "the [Problem], as initial conditions can override restarted fields");
3783 }
3784}
bool isRestarting() const
Whether or not this is a "restart" calculation.
Definition MooseApp.C:1680
libMesh::ExodusII_IO * getExReaderForRestart() const
Get the Exodus reader to restart variables from an Exodus mesh file.
Definition MooseApp.h:449
const std::vector< std::string > & get_global_var_names()
const std::vector< std::string > & get_elem_var_names()
const std::vector< std::string > & get_nodal_var_names()

Referenced by addFVInitialCondition(), and addInitialCondition().

◆ checkingUOAuxState()

bool FEProblemBase::checkingUOAuxState ( ) const
inline

Return a flag to indicate whether we are executing user objects and auxliary kernels for state check Note: This function can return true only when hasUOAuxStateCheck() returns true, i.e.

the check has been activated by users through Problem/check_uo_aux_state input parameter.

Definition at line 229 of file FEProblemBase.h.

229{ return _checking_uo_aux_state; }
bool _checking_uo_aux_state
Flag used to indicate whether we are doing the uo/aux state check in execute.

Referenced by MemoryUsage::execute(), VectorMemoryUsage::execute(), MemoryUsage::finalize(), PerfGraphData::finalize(), and VectorMemoryUsage::finalize().

◆ checkNonlocalCoupling()

void FEProblemBase::checkNonlocalCoupling ( )
Returns
Flag indicating nonlocal coupling exists or not.

Definition at line 1805 of file FEProblemBase.C.

1806{
1807 TIME_SECTION("checkNonlocalCoupling", 5, "Checking Nonlocal Coupling");
1808
1809 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); tid++)
1810 for (auto & nl : _nl)
1811 {
1812 const auto & all_kernels = nl->getKernelWarehouse();
1813 const auto & kernels = all_kernels.getObjects(tid);
1814 for (const auto & kernel : kernels)
1815 {
1816 std::shared_ptr<NonlocalKernel> nonlocal_kernel =
1817 std::dynamic_pointer_cast<NonlocalKernel>(kernel);
1818 if (nonlocal_kernel)
1819 {
1822 _nonlocal_kernels.addObject(kernel, tid);
1823 }
1824 }
1825 const MooseObjectWarehouse<IntegratedBCBase> & all_integrated_bcs =
1826 nl->getIntegratedBCWarehouse();
1827 const auto & integrated_bcs = all_integrated_bcs.getObjects(tid);
1828 for (const auto & integrated_bc : integrated_bcs)
1829 {
1830 std::shared_ptr<NonlocalIntegratedBC> nonlocal_integrated_bc =
1831 std::dynamic_pointer_cast<NonlocalIntegratedBC>(integrated_bc);
1832 if (nonlocal_integrated_bc)
1833 {
1836 _nonlocal_integrated_bcs.addObject(integrated_bc, tid);
1837 }
1838 }
1839 }
1840}
MooseObjectWarehouse< IntegratedBCBase > _nonlocal_integrated_bcs
nonlocal integrated_bcs
MooseObjectWarehouse< KernelBase > _nonlocal_kernels
nonlocal kernels
const std::vector< std::shared_ptr< T > > & getObjects(THREAD_ID tid=0) const
Retrieve complete vector to the all/block/boundary restricted objects for a given thread.
A storage container for MooseObjects that inherit from SetupInterface.

◆ checkNonlocalCouplingRequirement()

bool FEProblemBase::checkNonlocalCouplingRequirement ( ) const
overridevirtual
Returns
whether there will be nonlocal coupling at any point in the simulation, e.g. whether there are any active \emph or inactive nonlocal kernels or boundary conditions

Implements SubProblem.

Definition at line 10450 of file FEProblemBase.C.

10451{
10453}

Referenced by DisplacedProblem::checkNonlocalCouplingRequirement(), ComputeJacobianThread::compute(), ComputeJacobianThread::compute(), ComputeFullJacobianThread::computeOnBoundary(), and ComputeFullJacobianThread::computeOnElement().

◆ checkProblemIntegrity()

void FEProblemBase::checkProblemIntegrity ( )
virtual

Method called to perform a series of sanity checks before a simulation is run.

This method doesn't return when errors are found, instead it generally calls mooseError() directly.

If a material is specified for any block in the simulation, then all blocks must have a material specified.

unsigned int is necessary to print SubdomainIDs in the statement below

vector is necessary to get the subdomain names

Reimplemented in EigenProblem.

Definition at line 9213 of file FEProblemBase.C.

9214{
9215 TIME_SECTION("checkProblemIntegrity", 5);
9216
9217 // Subdomains specified by the "Problem/block" parameter
9218 const auto & subdomain_names = getParam<std::vector<SubdomainName>>("block");
9219 auto mesh_subdomains_vec = MooseMeshUtils::getSubdomainIDs(_mesh, subdomain_names);
9220 std::set<SubdomainID> mesh_subdomains(mesh_subdomains_vec.begin(), mesh_subdomains_vec.end());
9221
9222 // Check kernel coverage of subdomains (blocks) in the mesh
9225 {
9226 std::set<SubdomainID> blocks;
9229 blocks = mesh_subdomains;
9231 {
9232 blocks = mesh_subdomains;
9233 for (const auto & subdomain_name : _kernel_coverage_blocks)
9234 {
9235 const auto id = _mesh.getSubdomainID(subdomain_name);
9236 if (id == Moose::INVALID_BLOCK_ID)
9237 paramError("kernel_coverage_block_list",
9238 "Subdomain \"",
9239 subdomain_name,
9240 "\" not found in mesh.");
9241 blocks.erase(id);
9242 }
9243 }
9245 for (const auto & subdomain_name : _kernel_coverage_blocks)
9246 {
9247 const auto id = _mesh.getSubdomainID(subdomain_name);
9248 if (id == Moose::INVALID_BLOCK_ID)
9249 paramError("kernel_coverage_block_list",
9250 "Subdomain \"",
9251 subdomain_name,
9252 "\" not found in mesh.");
9253 blocks.insert(id);
9254 }
9255 if (!blocks.empty())
9256 for (auto & nl : _nl)
9257 nl->checkKernelCoverage(blocks);
9258 }
9259
9260 // Check materials
9261 {
9262#ifdef LIBMESH_ENABLE_AMR
9263 if ((_adaptivity.isOn() || _num_grid_steps) &&
9266 {
9267 _console << "Using EXPERIMENTAL Stateful Material Property projection with Adaptivity!\n"
9268 << std::flush;
9269 }
9270#endif
9271
9272 std::set<SubdomainID> local_mesh_subs(mesh_subdomains);
9273
9276 {
9281 bool check_material_coverage = false;
9282 std::set<SubdomainID> ids = _all_materials.getActiveBlocks();
9283 for (const auto & id : ids)
9284 {
9285 local_mesh_subs.erase(id);
9286 check_material_coverage = true;
9287 }
9288
9289 // did the user limit the subdomains to be checked?
9291 {
9292 for (const auto & subdomain_name : _material_coverage_blocks)
9293 {
9294 const auto id = _mesh.getSubdomainID(subdomain_name);
9295 if (id == Moose::INVALID_BLOCK_ID)
9296 paramError("material_coverage_block_list",
9297 "Subdomain \"" + subdomain_name + "\" not found in mesh.");
9298 local_mesh_subs.erase(id);
9299 }
9300 }
9302 {
9303 std::set<SubdomainID> blocks(local_mesh_subs);
9304 for (const auto & subdomain_name : _material_coverage_blocks)
9305 {
9306 const auto id = _mesh.getSubdomainID(subdomain_name);
9307 if (id == Moose::INVALID_BLOCK_ID)
9308 paramError("material_coverage_block_list",
9309 "Subdomain \"" + subdomain_name + "\" not found in mesh.");
9310 blocks.erase(id);
9311 }
9312 for (const auto id : blocks)
9313 local_mesh_subs.erase(id);
9314 }
9315
9316 // also exclude mortar spaces from the material check
9317 auto && mortar_subdomain_ids = _mortar_data->getMortarSubdomainIDs();
9318 for (auto subdomain_id : mortar_subdomain_ids)
9319 local_mesh_subs.erase(subdomain_id);
9320
9321 // Check Material Coverage
9322 if (check_material_coverage && !local_mesh_subs.empty())
9323 {
9324 std::stringstream extra_subdomain_ids;
9326 std::copy(local_mesh_subs.begin(),
9327 local_mesh_subs.end(),
9328 std::ostream_iterator<unsigned int>(extra_subdomain_ids, " "));
9330 std::vector<SubdomainID> local_mesh_subs_vec(local_mesh_subs.begin(),
9331 local_mesh_subs.end());
9332
9333 mooseError("The following blocks from your input mesh do not contain an active material: " +
9334 extra_subdomain_ids.str() +
9335 "(names: " + Moose::stringify(_mesh.getSubdomainNames(local_mesh_subs_vec)) +
9336 ")\nWhen ANY mesh block contains a Material object, "
9337 "all blocks must contain a Material object.\n");
9338 }
9339 }
9340
9341 // Check material properties on blocks and boundaries
9344
9345 // Check that material properties exist when requested by other properties on a given block
9346 const auto & materials = _all_materials.getActiveObjects();
9347 for (const auto & material : materials)
9348 material->checkStatefulSanity();
9349
9350 // auto mats_to_check = _materials.getActiveBlockObjects();
9351 // const auto & discrete_materials = _discrete_materials.getActiveBlockObjects();
9352 // for (const auto & map_it : discrete_materials)
9353 // for (const auto & container_element : map_it.second)
9354 // mats_to_check[map_it.first].push_back(container_element);
9357 }
9358
9360
9361 // Verify that we don't have any Element type/Coordinate Type conflicts
9363
9364 // Coordinate transforms are only intended for use with MultiApps at this time. If you are not
9365 // using multiapps but still require these, contact a moose developer
9367 !hasMultiApps())
9368 mooseError("Coordinate transformation parameters, listed below, are only to be used in the "
9369 "context of application to application field transfers at this time. The mesh is "
9370 "not modified by these parameters within an application.\n"
9371 "You should likely use a 'TransformGenerator' in the [Mesh] block to achieve the "
9372 "desired mesh modification.\n\n",
9374
9375 // If using displacements, verify that the order of the displacement
9376 // variables matches the order of the elements in the displaced
9377 // mesh.
9379
9380 // Check for postprocessor names with same name as a scalar variable
9382}
char ** blocks
void checkDependMaterialsHelper(const std::map< SubdomainID, std::vector< std::shared_ptr< MaterialBase > > > &materials_map)
Helper method for checking Material object dependency.
void checkDisplacementOrders()
Verify that SECOND order mesh uses SECOND order displacements.
void checkUserObjects()
bool hasMultiApps() const
Returns whether or not the current simulation has any multiapps.
void checkCoordinateSystems()
Verify that there are no element type/coordinate type conflicts.
void checkDuplicatePostprocessorVariableNames()
bool hasScalingOrRotationTransformation() const
Returns true if the app has scaling and/or rotation transformation.
static InputParameters validParams()
Describes the parameters this object can take to setup transformations.
std::vector< SubdomainName > getSubdomainNames(const std::vector< SubdomainID > &subdomain_ids) const
Get the associated subdomainNames for the subdomain ids that are passed in.
Definition MooseMesh.C:1720
MooseAppCoordTransform & coordTransform()
Definition MooseMesh.h:2062
SubdomainID getSubdomainID(const SubdomainName &subdomain_name) const
Get the associated subdomain ID for the subdomain name.
Definition MooseMesh.C:1678
std::set< SubdomainID > getActiveBlocks(THREAD_ID tid=0) const
Return a set of active SubdomainsIDs.
const std::map< SubdomainID, std::vector< std::shared_ptr< T > > > & getActiveBlockObjects(THREAD_ID tid=0) const
virtual void checkBoundaryMatProps()
Checks boundary material properties integrity.
Definition SubProblem.C:664
virtual void checkBlockMatProps()
Checks block material properties integrity.
Definition SubProblem.C:622
std::vector< subdomain_id_type > getSubdomainIDs(const libMesh::MeshBase &mesh, const std::vector< SubdomainName > &subdomain_name)
Get the associated subdomainIDs for the subdomain names that are passed in.
const SubdomainID INVALID_BLOCK_ID
Definition MooseTypes.C:20

Referenced by EigenProblem::checkProblemIntegrity().

◆ checkResidualForNans()

virtual bool FEProblemBase::checkResidualForNans ( ) const
inlineoverridevirtual

Whether to check residual for NaN/Inf values.

Implements SubProblem.

Definition at line 232 of file FEProblemBase.h.

232{ return _check_residual_for_nans; }

Referenced by DisplacedProblem::checkResidualForNans().

◆ checkUserObjectJacobianRequirement()

void FEProblemBase::checkUserObjectJacobianRequirement ( THREAD_ID  tid)

Definition at line 1843 of file FEProblemBase.C.

1844{
1845 std::set<const MooseVariableFEBase *> uo_jacobian_moose_vars;
1846 {
1847 std::vector<ShapeElementUserObject *> objs;
1848 theWarehouse()
1849 .query()
1851 .condition<AttribThread>(tid)
1852 .queryInto(objs);
1853
1854 for (const auto & uo : objs)
1855 {
1856 _calculate_jacobian_in_uo = uo->computeJacobianFlag();
1857 const auto & mv_deps = uo->jacobianMooseVariables();
1858 uo_jacobian_moose_vars.insert(mv_deps.begin(), mv_deps.end());
1859 }
1860 }
1861 {
1862 std::vector<ShapeSideUserObject *> objs;
1863 theWarehouse()
1864 .query()
1866 .condition<AttribThread>(tid)
1867 .queryInto(objs);
1868 for (const auto & uo : objs)
1869 {
1870 _calculate_jacobian_in_uo = uo->computeJacobianFlag();
1871 const auto & mv_deps = uo->jacobianMooseVariables();
1872 uo_jacobian_moose_vars.insert(mv_deps.begin(), mv_deps.end());
1873 }
1874 }
1875
1876 _uo_jacobian_moose_vars[tid].assign(uo_jacobian_moose_vars.begin(), uo_jacobian_moose_vars.end());
1877 std::sort(
1878 _uo_jacobian_moose_vars[tid].begin(), _uo_jacobian_moose_vars[tid].end(), sortMooseVariables);
1879}
@ ShapeSideUserObject
@ ShapeElementUserObject
QueryCache & condition(Args &&... args)
Adds a new condition to the query.
Query query()
query creates and returns an initialized a query object for querying objects from the warehouse.

◆ checkUserObjectNameCollision()

void FEProblemBase::checkUserObjectNameCollision ( const std::string &  name,
const std::string &  type 
) const

Check for name collision between different user objects.

Parameters
nameThe object name being added
typeThe object type being added

Definition at line 4653 of file FEProblemBase.C.

4655{
4656 if (hasUserObject(name))
4657 mooseError("A ",
4659 " already exists. You may not add a ",
4660 type,
4661 " by the same name.");
4662
4663#ifdef MOOSE_KOKKOS_ENABLED
4665 mooseError("A ",
4666 getKokkosUserObject<UserObjectBase>(name).typeAndName(),
4667 " already exists. You may not add a ",
4668 type,
4669 " by the same name.");
4670#endif
4671}
bool hasKokkosUserObject(const std::string &name) const
Check if there if a Kokkos user object of given name.
bool hasUserObject(const std::string &name) const
Check if there if a user object of given name.
const UserObject & getUserObjectBase(const std::string &name, const THREAD_ID tid=0) const
Get the user object by its name.
std::string typeAndName() const
Get the class's combined type and name; useful in error handling.
Definition MooseBase.C:57

Referenced by addPostprocessor(), MFEMProblem::addPostprocessor(), addReporter(), addVectorPostprocessor(), and MFEMProblem::addVectorPostprocessor().

◆ checkUserObjects()

void FEProblemBase::checkUserObjects ( )
protected

Definition at line 9426 of file FEProblemBase.C.

9427{
9428 // Check user_objects block coverage
9429 std::set<SubdomainID> mesh_subdomains = _mesh.meshSubdomains();
9430 std::set<SubdomainID> user_objects_blocks;
9431
9432 // gather names of all user_objects that were defined in the input file
9433 // and the blocks that they are defined on
9434 std::set<std::string> names;
9435
9436 std::vector<UserObjectBase *> objects;
9438
9439 for (const auto & obj : objects)
9440 names.insert(obj->name());
9441
9442 // See if all referenced blocks are covered
9443 std::set<SubdomainID> difference;
9444 std::set_difference(user_objects_blocks.begin(),
9445 user_objects_blocks.end(),
9446 mesh_subdomains.begin(),
9447 mesh_subdomains.end(),
9448 std::inserter(difference, difference.end()));
9449
9450 if (!difference.empty())
9451 {
9452 std::ostringstream oss;
9453 oss << "One or more UserObjects is referencing a nonexistent block:\n";
9454 for (const auto & id : difference)
9455 oss << id << "\n";
9456 mooseError(oss.str());
9457 }
9458}
const std::set< SubdomainID > & meshSubdomains() const
Returns a read-only reference to the set of subdomains currently present in the Mesh.
Definition MooseMesh.C:3235

Referenced by checkProblemIntegrity().

◆ clearActiveElementalMooseVariables()

void FEProblemBase::clearActiveElementalMooseVariables ( const THREAD_ID  tid)
overridevirtual

Clear the active elemental MooseVariableFEBase.

If there are no active variables then they will all be reinited. Call this after finishing the computation that was using a restricted set of MooseVariableFEBases

Parameters
tidThe thread id

Reimplemented from SubProblem.

Definition at line 6703 of file FEProblemBase.C.

6704{
6706
6708 _displaced_problem->clearActiveElementalMooseVariables(tid);
6709}
virtual void clearActiveElementalMooseVariables(const THREAD_ID tid)
Clear the active elemental MooseVariableFieldBase.
Definition SubProblem.C:465

Referenced by ComputeDiracThread::post(), ComputeIndicatorThread::post(), ComputeMarkerThread::post(), ComputeMaterialsObjectThread::post(), and ComputeUserObjectsThread::post().

◆ clearActiveFEVariableCoupleableMatrixTags()

void FEProblemBase::clearActiveFEVariableCoupleableMatrixTags ( const THREAD_ID  tid)
overridevirtual

Reimplemented from SubProblem.

Definition at line 6712 of file FEProblemBase.C.

6713{
6715
6717 _displaced_problem->clearActiveFEVariableCoupleableMatrixTags(tid);
6718}
virtual void clearActiveFEVariableCoupleableMatrixTags(const THREAD_ID tid)
Definition SubProblem.C:383

◆ clearActiveFEVariableCoupleableVectorTags()

void FEProblemBase::clearActiveFEVariableCoupleableVectorTags ( const THREAD_ID  tid)
overridevirtual

Reimplemented from SubProblem.

Definition at line 6721 of file FEProblemBase.C.

6722{
6724
6726 _displaced_problem->clearActiveFEVariableCoupleableVectorTags(tid);
6727}
virtual void clearActiveFEVariableCoupleableVectorTags(const THREAD_ID tid)
Definition SubProblem.C:377

◆ clearActiveMaterialProperties()

void FEProblemBase::clearActiveMaterialProperties ( const THREAD_ID  tid)

Clear the active material properties.

Should be called at the end of every computing thread

Parameters
tidThe thread id

Definition at line 6769 of file FEProblemBase.C.

6770{
6772}

Referenced by NodalPatchRecovery::compute(), ComputeDiracThread::post(), ComputeIndicatorThread::post(), ComputeUserObjectsThread::post(), ComputeIndicatorThread::subdomainChanged(), and ComputeMarkerThread::subdomainChanged().

◆ clearActiveScalarVariableCoupleableMatrixTags()

void FEProblemBase::clearActiveScalarVariableCoupleableMatrixTags ( const THREAD_ID  tid)
overridevirtual

Reimplemented from SubProblem.

Definition at line 6730 of file FEProblemBase.C.

6731{
6733
6735 _displaced_problem->clearActiveScalarVariableCoupleableMatrixTags(tid);
6736}
virtual void clearActiveScalarVariableCoupleableMatrixTags(const THREAD_ID tid)
Definition SubProblem.C:424

Referenced by AuxiliarySystem::clearScalarVariableCoupleableTags().

◆ clearActiveScalarVariableCoupleableVectorTags()

void FEProblemBase::clearActiveScalarVariableCoupleableVectorTags ( const THREAD_ID  tid)
overridevirtual

Reimplemented from SubProblem.

Definition at line 6739 of file FEProblemBase.C.

6740{
6742
6744 _displaced_problem->clearActiveScalarVariableCoupleableVectorTags(tid);
6745}
virtual void clearActiveScalarVariableCoupleableVectorTags(const THREAD_ID tid)
Definition SubProblem.C:418

Referenced by AuxiliarySystem::clearScalarVariableCoupleableTags().

◆ clearAllDofIndices()

void SubProblem::clearAllDofIndices ( )
inherited

Clear dof indices from variables in nl and aux systems.

Definition at line 1192 of file SubProblem.C.

1193{
1194 for (const auto nl_sys_num : make_range(numNonlinearSystems()))
1197}
void clearAllDofIndices()
Clear dof indices from variables in nl and aux systems.
virtual const SystemBase & systemBaseAuxiliary() const =0
Return the auxiliary system object as a base class reference.
void clearAllDofIndices()
Clear all dof indices from moose variables.

Referenced by solve().

◆ clearCurrentJacobianMatrixTags()

void FEProblemBase::clearCurrentJacobianMatrixTags ( )
inline

Clear the current Jacobian matrix tag data structure ... if someone creates it.

Definition at line 3004 of file FEProblemBase.h.

3004{}

Referenced by resetState().

◆ clearCurrentResidualVectorTags()

void FEProblemBase::clearCurrentResidualVectorTags ( )
inline

Clear the current residual vector tag data structure.

Definition at line 3939 of file FEProblemBase.h.

3940{
3942}
std::vector< VectorTag > _current_residual_vector_tags
A data member to store the residual vector tag(s) passed into computeResidualTag(s).

Referenced by CrankNicolson::init(), and resetState().

◆ clearDiracInfo()

void FEProblemBase::clearDiracInfo ( )
overridevirtual

Gets called before Dirac Kernels are asked to add the points they are supposed to be evaluated in.

Implements SubProblem.

Definition at line 2667 of file FEProblemBase.C.

2668{
2670
2672 _displaced_problem->clearDiracInfo();
2673}
void clearPoints()
Remove all of the current points and elements.
DiracKernelInfo _dirac_kernel_info

Referenced by NonlinearSystemBase::computeDiracContributions().

◆ cloneAlgebraicGhostingFunctor()

void SubProblem::cloneAlgebraicGhostingFunctor ( libMesh::GhostingFunctor algebraic_gf,
bool  to_mesh = true 
)
privateinherited

Creates (n_sys - 1) clones of the provided algebraic ghosting functor (corresponding to the nonlinear system algebraic ghosting functor), initializes the clone with the appropriate DofMap, and then adds the clone to said DofMap.

Parameters
algebraic_gfthe (nonlinear system's) algebraic ghosting functor to clone
to_meshwhether the clone should be added to the corresponding DofMap's underlying MeshBase (the underlying MeshBase will be the same for every system held by this object's EquationSystems object)

Definition at line 1016 of file SubProblem.C.

1017{
1018 EquationSystems & eq = es();
1019 const auto n_sys = eq.n_systems();
1020
1021 auto pr = _root_alg_gf_to_sys_clones.emplace(
1022 &algebraic_gf, std::vector<std::shared_ptr<libMesh::GhostingFunctor>>(n_sys - 1));
1023 mooseAssert(pr.second, "We are adding a duplicate algebraic ghosting functor");
1024 auto & clones_vec = pr.first->second;
1025
1026 for (MooseIndex(n_sys) i = 1; i < n_sys; ++i)
1027 {
1028 DofMap & dof_map = eq.get_system(i).get_dof_map();
1029 std::shared_ptr<libMesh::GhostingFunctor> clone_alg_gf = algebraic_gf.clone();
1030 std::dynamic_pointer_cast<RelationshipManager>(clone_alg_gf)
1031 ->init(mesh(), *algebraic_gf.get_mesh(), &dof_map);
1032 dof_map.add_algebraic_ghosting_functor(clone_alg_gf, to_mesh);
1033 clones_vec[i - 1] = clone_alg_gf;
1034 }
1035}
std::unordered_map< libMesh::GhostingFunctor *, std::vector< std::shared_ptr< libMesh::GhostingFunctor > > > _root_alg_gf_to_sys_clones
A map from a root algebraic ghosting functor, e.g.
virtual std::unique_ptr< GhostingFunctor > clone() const=0
const MeshBase * get_mesh() const

Referenced by SubProblem::addAlgebraicGhostingFunctor().

◆ cloneCouplingGhostingFunctor()

void SubProblem::cloneCouplingGhostingFunctor ( libMesh::GhostingFunctor coupling_gf,
bool  to_mesh = true 
)
privateinherited

Creates (n_sys - 1) clones of the provided coupling ghosting functor (corresponding to the nonlinear system coupling ghosting functor), initializes the clone with the appropriate DofMap, and then adds the clone to said DofMap.

Parameters
coupling_gfthe (nonlinear system's) coupling ghosting functor to clone
to_meshwhether the clone should be added to the corresponding DofMap's underlying MeshBase (the underlying MeshBase will be the same for every system held by this object's EquationSystems object)

Definition at line 1050 of file SubProblem.C.

1051{
1052 const std::size_t num_nl_sys = numNonlinearSystems();
1053
1054 auto pr = _root_coupling_gf_to_sys_clones.emplace(
1055 &coupling_gf, std::vector<std::shared_ptr<libMesh::GhostingFunctor>>(num_nl_sys - 1));
1056 mooseAssert(pr.second, "We are adding a duplicate coupling functor");
1057 auto & clones_vec = pr.first->second;
1058
1059 for (const auto i : make_range(std::size_t(1), num_nl_sys))
1060 {
1061 DofMap & dof_map = systemBaseNonlinear(i).system().get_dof_map();
1062 std::shared_ptr<libMesh::GhostingFunctor> clone_coupling_gf = coupling_gf.clone();
1063 std::dynamic_pointer_cast<RelationshipManager>(clone_coupling_gf)
1064 ->init(mesh(), *coupling_gf.get_mesh(), &dof_map);
1065 dof_map.add_coupling_functor(clone_coupling_gf, to_mesh);
1066 clones_vec[i - 1] = clone_coupling_gf;
1067 }
1068}
std::unordered_map< libMesh::GhostingFunctor *, std::vector< std::shared_ptr< libMesh::GhostingFunctor > > > _root_coupling_gf_to_sys_clones
A map from a root coupling ghosting functor, e.g.

Referenced by SubProblem::addCouplingGhostingFunctor().

◆ computeBounds()

void FEProblemBase::computeBounds ( libMesh::NonlinearImplicitSystem sys,
NumericVector< libMesh::Number > &  lower,
NumericVector< libMesh::Number > &  upper 
)
virtual

Definition at line 8363 of file FEProblemBase.C.

8366{
8367 try
8368 {
8369 try
8370 {
8371 mooseAssert(_current_nl_sys && (sys.number() == _current_nl_sys->number()),
8372 "I expect these system numbers to be the same");
8373
8374 if (!_current_nl_sys->hasVector("lower_bound") || !_current_nl_sys->hasVector("upper_bound"))
8375 return;
8376
8377 TIME_SECTION("computeBounds", 1, "Computing Bounds");
8378
8379 NumericVector<Number> & _lower = _current_nl_sys->getVector("lower_bound");
8380 NumericVector<Number> & _upper = _current_nl_sys->getVector("upper_bound");
8381 _lower.swap(lower);
8382 _upper.swap(upper);
8383 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); tid++)
8385
8386 _aux->residualSetup();
8388 _lower.swap(lower);
8389 _upper.swap(upper);
8390 }
8391 catch (...)
8392 {
8393 handleException("computeBounds");
8394 }
8395 }
8396 catch (MooseException & e)
8397 {
8398 mooseError("Irrecoverable exception: " + std::string(e.what()));
8399 }
8400 catch (...)
8401 {
8402 mooseError("Unexpected exception type");
8403 }
8404}
const ExecFlagType EXEC_LINEAR
Definition Moose.C:32
void computeSystems(const ExecFlagType &type)
Do generic system computations.
void handleException(const std::string &calling_method)
Handle exceptions.
virtual void residualSetup(THREAD_ID tid=0) const override
virtual const char * what() const
Get out the error message.
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition SystemBase.C:932
virtual void swap(NumericVector< T > &v)

Referenced by Moose::compute_bounds().

◆ computeDamping()

Real FEProblemBase::computeDamping ( const NumericVector< libMesh::Number > &  soln,
const NumericVector< libMesh::Number > &  update 
)
virtual

Definition at line 8645 of file FEProblemBase.C.

8647{
8648 // Default to no damping
8649 Real damping = 1.0;
8650
8651 if (_has_dampers)
8652 {
8653 TIME_SECTION("computeDamping", 1, "Computing Damping");
8654
8655 // Save pointer to the current solution
8656 const NumericVector<Number> * _saved_current_solution = _current_nl_sys->currentSolution();
8657
8659 // For now, do not re-compute auxiliary variables. Doing so allows a wild solution increment
8660 // to get to the material models, which may not be able to cope with drastically different
8661 // values. Once more complete dependency checking is in place, auxiliary variables (and
8662 // material properties) will be computed as needed by dampers.
8663 // _aux.compute();
8664 damping = _current_nl_sys->computeDamping(soln, update);
8665
8666 // restore saved solution
8667 _current_nl_sys->setSolution(*_saved_current_solution);
8668 }
8669
8670 return damping;
8671}
Real computeDamping(const NumericVector< Number > &solution, const NumericVector< Number > &update)
Compute damping.
void setSolution(const NumericVector< Number > &soln)
Set the solution to a given vector.
virtual const NumericVector< Number > *const & currentSolution() const override final
The solution vector that is currently being operated on.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

Referenced by computePostCheck().

◆ computeIndicators()

void FEProblemBase::computeIndicators ( )
virtual

Reimplemented in DumpObjectsProblem.

Definition at line 5086 of file FEProblemBase.C.

5087{
5088 // Initialize indicator aux variable fields
5090 {
5091 TIME_SECTION("computeIndicators", 1, "Computing Indicators");
5092
5093 // Internal side indicators may lead to creating a much larger sparsity pattern than dictated by
5094 // the actual finite element scheme (e.g. CFEM)
5095 const auto old_do_derivatives = ADReal::do_derivatives;
5096 ADReal::do_derivatives = false;
5097
5098 std::vector<std::string> fields;
5099
5100 // Indicator Fields
5101 const auto & indicators = _indicators.getActiveObjects();
5102 for (const auto & indicator : indicators)
5103 fields.push_back(indicator->name());
5104
5105 // InternalSideIndicator Fields
5106 const auto & internal_indicators = _internal_side_indicators.getActiveObjects();
5107 for (const auto & internal_indicator : internal_indicators)
5108 fields.push_back(internal_indicator->name());
5109
5110 _aux->zeroVariables(fields);
5111
5112 // compute Indicators
5113 ComputeIndicatorThread cit(*this);
5115 _aux->solution().close();
5116 _aux->update();
5117
5118 ComputeIndicatorThread finalize_cit(*this, true);
5120 _aux->solution().close();
5121 _aux->update();
5122
5123 ADReal::do_derivatives = old_do_derivatives;
5124 }
5125}
const libMesh::ConstElemRange & getCurrentAlgebraicElementRange()
These are the element and nodes that contribute to the jacobian and residual for this local processor...
bool hasActiveObjects(THREAD_ID tid=0) const
void parallel_reduce(const Range &range, Body &body, unsigned int n_threads=libMesh::n_threads())
PetscErrorCode PetscInt const PetscInt fields[]

Referenced by computeIndicatorsAndMarkers(), TransientBase::endStep(), Eigenvalue::execute(), SteadyBase::execute(), MFEMSteady::execute(), and initialAdaptMesh().

◆ computeIndicatorsAndMarkers()

void FEProblemBase::computeIndicatorsAndMarkers ( )
virtual

Definition at line 5079 of file FEProblemBase.C.

5080{
5083}
virtual void computeIndicators()

◆ computeJacobian()

void FEProblemBase::computeJacobian ( const NumericVector< libMesh::Number > &  soln,
libMesh::SparseMatrix< libMesh::Number > &  jacobian,
const unsigned int  nl_sys_num 
)
virtual

Form a Jacobian matrix with the default tag (system).

Reimplemented in EigenProblem.

Definition at line 8188 of file FEProblemBase.C.

8191{
8192 setCurrentNonlinearSystem(nl_sys_num);
8193
8194 _fe_matrix_tags.clear();
8195
8196 auto & tags = getMatrixTags();
8197 for (auto & tag : tags)
8198 _fe_matrix_tags.insert(tag.second);
8199
8201}
std::set< TagID > _fe_matrix_tags
void setCurrentNonlinearSystem(const unsigned int nl_sys_num)
virtual void computeJacobianInternal(const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian, const std::set< TagID > &tags)
Form a Jacobian matrix for multiple tags.
virtual std::map< TagName, TagID > & getMatrixTags()
Return all matrix tags in the system, where a tag is represented by a map from name to ID.
Definition SubProblem.h:253

Referenced by computeJacobianSys().

◆ computeJacobianBlock()

void FEProblemBase::computeJacobianBlock ( libMesh::SparseMatrix< libMesh::Number > &  jacobian,
libMesh::System precond_system,
unsigned int  ivar,
unsigned int  jvar 
)
virtual

Really not a good idea to use this.

It computes just one block of the Jacobian into a smaller matrix. Calling this in a loop is EXTREMELY ineffecient! Try to use computeJacobianBlocks() instead!

Parameters
jacobianThe matrix you want to fill
precond_systemThe libMesh::system of the preconditioning system
ivarthe block-row of the Jacobian
jvarthe block-column of the Jacobian

Definition at line 8351 of file FEProblemBase.C.

8355{
8356 JacobianBlock jac_block(precond_system, jacobian, ivar, jvar);
8357 std::vector<JacobianBlock *> blocks = {&jac_block};
8358 mooseAssert(_current_nl_sys, "This should be non-null");
8360}
virtual void computeJacobianBlocks(std::vector< JacobianBlock * > &blocks, const unsigned int nl_sys_num)
Computes several Jacobian blocks simultaneously, summing their contributions into smaller preconditio...
Helper class for holding the preconditioning blocks to fill.

◆ computeJacobianBlocks()

void FEProblemBase::computeJacobianBlocks ( std::vector< JacobianBlock * > &  blocks,
const unsigned int  nl_sys_num 
)
virtual

Computes several Jacobian blocks simultaneously, summing their contributions into smaller preconditioning matrices.

Used by Physics-based preconditioning

Parameters
blocksThe blocks to fill in (JacobianBlock is defined in ComputeJacobianBlocksThread)

Reimplemented in EigenProblem.

Definition at line 8331 of file FEProblemBase.C.

8333{
8334 TIME_SECTION("computeTransientImplicitJacobian", 2);
8335 setCurrentNonlinearSystem(nl_sys_num);
8336
8338 {
8340 _displaced_problem->updateMesh();
8341 }
8342
8344
8348}
const ExecFlagType EXEC_NONLINEAR
Definition Moose.C:34
const ExecFlagType EXEC_PRE_DISPLACE
Definition Moose.C:55
void computeJacobianBlocks(std::vector< JacobianBlock * > &blocks)
Computes several Jacobian blocks simultaneously, summing their contributions into smaller preconditio...
bool _currently_computing_jacobian
Flag to determine whether the problem is currently computing Jacobian.

Referenced by computeJacobianBlock(), and PhysicsBasedPreconditioner::setup().

◆ computeJacobianInternal()

void FEProblemBase::computeJacobianInternal ( const NumericVector< libMesh::Number > &  soln,
libMesh::SparseMatrix< libMesh::Number > &  jacobian,
const std::set< TagID > &  tags 
)
virtual

Form a Jacobian matrix for multiple tags.

It should not be called directly by users.

Definition at line 8204 of file FEProblemBase.C.

8207{
8208 TIME_SECTION("computeJacobianInternal", 1);
8209
8211
8213
8214 computeJacobianTags(tags);
8215
8217}
virtual void computeJacobianTags(const std::set< TagID > &tags)
Form multiple matrices, and each is associated with a tag.
TagID systemMatrixTag() const override
Return the Matrix Tag ID for System.
virtual void disassociateMatrixFromTag(libMesh::SparseMatrix< Number > &matrix, TagID tag)
Disassociate a matrix from a tag.
virtual void associateMatrixToTag(libMesh::SparseMatrix< Number > &matrix, TagID tag)
Associate a matrix to a tag.

Referenced by computeJacobian().

◆ computeJacobianSys()

void FEProblemBase::computeJacobianSys ( libMesh::NonlinearImplicitSystem sys,
const NumericVector< libMesh::Number > &  soln,
libMesh::SparseMatrix< libMesh::Number > &  jacobian 
)
virtual

Form a Jacobian matrix.

It is called by Libmesh.

Definition at line 8164 of file FEProblemBase.C.

8167{
8168 // Reset before Jacobian setup, calculation & execution
8170 computeJacobian(soln, jacobian, sys.number());
8171}
virtual void computeJacobian(const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian, const unsigned int nl_sys_num)
Form a Jacobian matrix with the default tag (system).
void resetIterationOccurences()
Reset the number of solution invalid occurrences back to zero.

Referenced by Moose::compute_jacobian(), and NonlinearSystem::computeScalingJacobian().

◆ computeJacobianTag()

void FEProblemBase::computeJacobianTag ( const NumericVector< libMesh::Number > &  soln,
libMesh::SparseMatrix< libMesh::Number > &  jacobian,
TagID  tag 
)
virtual

Form a Jacobian matrix for a given tag.

Definition at line 8174 of file FEProblemBase.C.

8177{
8179
8180 _current_nl_sys->associateMatrixToTag(jacobian, tag);
8181
8182 computeJacobianTags({tag});
8183
8185}

Referenced by ActuallyExplicitEuler::solve(), and ExplicitSSPRungeKutta::solveStage().

◆ computeJacobianTags()

void FEProblemBase::computeJacobianTags ( const std::set< TagID > &  tags)
virtual

Form multiple matrices, and each is associated with a tag.

Definition at line 8220 of file FEProblemBase.C.

8221{
8222 try
8223 {
8224 try
8225 {
8227 {
8228 TIME_SECTION("computeJacobianTags", 5, "Computing Jacobian");
8229
8230 for (auto tag : tags)
8231 if (_current_nl_sys->hasMatrix(tag))
8232 {
8233 auto & matrix = _current_nl_sys->getMatrix(tag);
8236 else
8237 matrix.zero();
8239 // PETSc algorithms require diagonal allocations regardless of whether there is
8240 // non-zero diagonal dependence. With global AD indexing we only add non-zero
8241 // dependence, so PETSc will scream at us unless we artificially add the diagonals.
8242 for (auto index : make_range(matrix.row_start(), matrix.row_stop()))
8243 matrix.add(index, index, 0);
8244 }
8245
8246 _aux->zeroVariablesForJacobian();
8247
8248 unsigned int n_threads = libMesh::n_threads();
8249
8250 // Random interface objects
8251 for (const auto & it : _random_data_objects)
8252 it.second->updateSeeds(EXEC_NONLINEAR);
8253
8257 _displaced_problem->setCurrentlyComputingJacobian(true);
8258
8260
8261 for (unsigned int tid = 0; tid < n_threads; tid++)
8262 reinitScalars(tid);
8263
8265
8266 _aux->jacobianSetup();
8267
8269 {
8271 _displaced_problem->updateMesh();
8272 // A standalone scaling Jacobian is assembled without a preceding residual evaluation, so
8273 // the displaced mortar segment mesh can be stale relative to the just-updated displaced
8274 // parent mesh. Every other Jacobian evaluation is preceded by a residual (or combined
8275 // residual/Jacobian) evaluation that already rebuilt the mortar mesh, so doing it here in
8276 // the general case would be duplicative.
8277 if (_current_nl_sys->computingScalingJacobian() && _mortar_data->hasDisplacedObjects())
8279 }
8280
8281 for (unsigned int tid = 0; tid < n_threads; tid++)
8282 {
8285 }
8286
8287#ifdef MOOSE_KOKKOS_ENABLED
8289#endif
8290
8292
8294
8296
8298
8300
8302
8303 // For explicit Euler calculations for example we often compute the Jacobian one time and
8304 // then re-use it over and over. If we're performing automatic scaling, we don't want to
8305 // use that kernel, diagonal-block only Jacobian for our actual matrix when performing
8306 // solves!
8308 _has_jacobian = true;
8309 }
8310 }
8311 catch (...)
8312 {
8313 handleException("computeJacobianTags");
8314 }
8315 }
8316 catch (const MooseException &)
8317 {
8318 // The buck stops here, we have already handled the exception by
8319 // calling the system's stopSolve() method, it is now up to PETSc to return a
8320 // "diverged" reason during the next solve.
8321 }
8322 catch (...)
8323 {
8324 mooseError("Unexpected exception type");
8325 }
8326
8327 resetState();
8328}
virtual void computeUserObjects(const ExecFlagType &type, const Moose::AuxGroup &group)
Call compute methods on UserObjects.
virtual void resetState()
Reset state of this object in preparation for the next evaluation.
virtual void reinitScalars(const THREAD_ID tid, bool reinit_for_derivative_reordering=false) override
fills the VariableValue arrays for scalar variables from the solution vector
std::map< std::string, std::unique_ptr< RandomData > > _random_data_objects
A map of objects that consume random numbers.
void executeControls(const ExecFlagType &exec_type)
Performs setup and execute calls for Control objects.
MooseObjectWarehouse< Moose::FunctionBase > _kokkos_functions
virtual void updateMortarMesh()
bool haveADObjects() const
Method for reading wehther we have any ad objects.
Definition SubProblem.h:779
virtual void jacobianSetup(THREAD_ID tid=0) const override
virtual void jacobianSetup(THREAD_ID tid=0) const
void computeJacobianTags(const std::set< TagID > &tags)
Computes multiple (tag associated) Jacobian matricese.
virtual libMesh::System & system() override
Get the reference to the libMesh system.
void jacobianSetup()
Calls the jacobianSetup function for each of the output objects.
bool _safe_access_tagged_matrices
Is it safe to retrieve data from tagged matrices.
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
bool computingScalingJacobian() const
Whether we are computing an initial Jacobian for automatic variable scaling.
virtual void restore_original_nonzero_pattern()
bool has_static_condensation() const
@ POST_AUX
Definition MooseTypes.h:761
@ PRE_AUX
Definition MooseTypes.h:760

Referenced by EigenProblem::computeJacobianAB(), computeJacobianInternal(), computeJacobianTag(), EigenProblem::computeJacobianTag(), and EigenProblem::computeMatricesTags().

◆ computeKokkosUserObjectsInternal()

void FEProblemBase::computeKokkosUserObjectsInternal ( const ExecFlagType type,
TheWarehouse::Query query 
)
protected

◆ computeLinearSystemSys()

void FEProblemBase::computeLinearSystemSys ( libMesh::LinearImplicitSystem sys,
libMesh::SparseMatrix< libMesh::Number > &  system_matrix,
NumericVector< libMesh::Number > &  rhs,
const bool  compute_gradients = true 
)
virtual

Assemble both the right hand side and the system matrix of a given linear system.

Parameters
sysThe linear system which should be assembled
system_matrixThe sparse matrix which should hold the system matrix
rhsThe vector which should hold the right hand side
compute_gradientsA flag to disable the computation of new gradients during the assembly, can be used to lag gradients

Definition at line 8407 of file FEProblemBase.C.

8411{
8412 TIME_SECTION("computeLinearSystemSys", 5);
8413
8415
8418
8419 // We are using the residual tag system for right hand sides so we fetch everything
8420 const auto & vector_tags = getVectorTags(Moose::VECTOR_TAG_RESIDUAL);
8421
8422 // We filter out tags which do not have associated vectors in the current
8423 // system. This is essential to be able to use system-dependent vector tags.
8426
8430 compute_gradients);
8431
8436 // We reset the tags to the default containers for further operations
8441}
std::set< TagID > _linear_vector_tags
Temporary storage for filtered vector tags for linear systems.
void setCurrentLinearSystem(unsigned int sys_num)
Set the current linear system pointer.
void computeLinearSystemTags(const NumericVector< libMesh::Number > &soln, const std::set< TagID > &vector_tags, const std::set< TagID > &matrix_tags, const bool compute_gradients=true)
Assemble the current linear system given a set of vector and matrix tags.
unsigned int linearSysNum(const LinearSystemName &linear_sys_name) const override
std::set< TagID > _linear_matrix_tags
Temporary storage for filtered matrix tags for linear systems.
TagID rightHandSideVectorTag() const
virtual TagID systemMatrixTag() const override
Return the Matrix Tag ID for System.
NumericVector< Number > & getRightHandSideVector()
Fetching the right hand side vector from the libmesh system.
SparseMatrix< Number > & getSystemMatrix()
Fetching the system matrix from the libmesh system.
std::vector< VectorTag > getVectorTags(const std::set< TagID > &tag_ids) const
Definition SubProblem.C:171
static void selectVectorTagsFromSystem(const SystemBase &system, const std::vector< VectorTag > &input_vector_tags, std::set< TagID > &selected_tags)
Select the vector tags which belong to a specific system.
Definition SubProblem.C:288
static void selectMatrixTagsFromSystem(const SystemBase &system, const std::map< TagName, TagID > &input_matrix_tags, std::set< TagID > &selected_tags)
Select the matrix tags which belong to a specific system.
Definition SubProblem.C:299
virtual void associateVectorToTag(NumericVector< Number > &vec, TagID tag)
Associate a vector for a given tag.
Definition SystemBase.C:980
virtual void disassociateVectorFromTag(NumericVector< Number > &vec, TagID tag)
Disassociate a given vector from a given tag.
Definition SystemBase.C:992
const std::string & name() const
@ VECTOR_TAG_RESIDUAL

Referenced by Moose::compute_linear_system(), and computeResidualL2Norm().

◆ computeLinearSystemTags()

void FEProblemBase::computeLinearSystemTags ( const NumericVector< libMesh::Number > &  soln,
const std::set< TagID > &  vector_tags,
const std::set< TagID > &  matrix_tags,
const bool  compute_gradients = true 
)

Assemble the current linear system given a set of vector and matrix tags.

Parameters
solnThe solution which should be used for the system assembly
vector_tagsThe vector tags for the right hand side
matrix_tagsThe matrix tags for the matrix
compute_gradientsA flag to disable the computation of new gradients during the assembly, can be used to lag gradients

Definition at line 8444 of file FEProblemBase.C.

8448{
8449 TIME_SECTION("computeLinearSystemTags", 5, "Computing Linear System");
8450
8452
8453 for (auto tag : matrix_tags)
8454 {
8455 auto & matrix = _current_linear_sys->getMatrix(tag);
8456 matrix.zero();
8457 }
8458
8459 unsigned int n_threads = libMesh::n_threads();
8460
8462
8463 // Random interface objects
8464 for (const auto & it : _random_data_objects)
8465 it.second->updateSeeds(EXEC_NONLINEAR);
8466
8468
8470
8471 _aux->jacobianSetup();
8472
8473 for (THREAD_ID tid = 0; tid < n_threads; tid++)
8474 {
8476 }
8477
8478#ifdef MOOSE_KOKKOS_ENABLED
8480#endif
8481
8482 try
8483 {
8485 }
8486 catch (MooseException & e)
8487 {
8488 _console << "\nA MooseException was raised during Auxiliary variable computation.\n"
8489 << "The next solve will fail, the timestep will be reduced, and we will try again.\n"
8490 << std::endl;
8491
8492 // We know the next solve is going to fail, so there's no point in
8493 // computing anything else after this. Plus, using incompletely
8494 // computed AuxVariables in subsequent calculations could lead to
8495 // other errors or unhandled exceptions being thrown.
8496 return;
8497 }
8498
8501
8503
8504 _current_linear_sys->computeLinearSystemTags(vector_tags, matrix_tags, compute_gradients);
8505
8506 // Reset execution flag as after this point we are no longer on LINEAR
8508
8509 // These are the relevant parts of resetState()
8512}
void computeLinearSystemTags(const std::set< TagID > &vector_tags, const std::set< TagID > &matrix_tags, const bool compute_gradients=true)
Compute the right hand side and the system matrix of the system for given tags.
bool _safe_access_tagged_vectors
Is it safe to retrieve data from tagged vectors.
virtual void zero()=0

Referenced by computeLinearSystemSys().

◆ computeMarkers()

void FEProblemBase::computeMarkers ( )
virtual

Reimplemented in DumpObjectsProblem.

Definition at line 5128 of file FEProblemBase.C.

5129{
5131 {
5132 TIME_SECTION("computeMarkers", 1, "Computing Markers");
5133
5134 std::vector<std::string> fields;
5135
5136 // Marker Fields
5137 const auto & markers = _markers.getActiveObjects();
5138 for (const auto & marker : markers)
5139 fields.push_back(marker->name());
5140
5141 _aux->zeroVariables(fields);
5142
5144
5145 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); ++tid)
5146 {
5147 const auto & markers = _markers.getActiveObjects(tid);
5148 for (const auto & marker : markers)
5149 marker->markerSetup();
5150 }
5151
5152 ComputeMarkerThread cmt(*this);
5154
5155 _aux->solution().close();
5156 _aux->update();
5157 }
5158}
void updateErrorVectors()
Update the ErrorVectors that have been requested through calls to getErrorVector().
Definition Adaptivity.C:407

Referenced by adaptMesh(), computeIndicatorsAndMarkers(), TransientBase::endStep(), Eigenvalue::execute(), SteadyBase::execute(), MFEMSteady::execute(), and initialAdaptMesh().

◆ computeMultiAppsDT()

Real FEProblemBase::computeMultiAppsDT ( ExecFlagType  type)

Find the smallest timestep over all MultiApps.

Definition at line 6448 of file FEProblemBase.C.

6449{
6450 const auto & multi_apps = _transient_multi_apps[type].getActiveObjects();
6451
6452 Real smallest_dt = std::numeric_limits<Real>::max();
6453
6454 for (const auto & multi_app : multi_apps)
6455 smallest_dt = std::min(smallest_dt, multi_app->computeDT());
6456
6457 return smallest_dt;
6458}
auto min(const L &left, const R &right)

Referenced by TransientBase::constrainDTFromMultiApp().

◆ computeNearNullSpace()

void FEProblemBase::computeNearNullSpace ( libMesh::NonlinearImplicitSystem sys,
std::vector< NumericVector< libMesh::Number > * > &  sp 
)
virtual

Definition at line 8515 of file FEProblemBase.C.

8517{
8518 mooseAssert(_current_nl_sys && (sys.number() == _current_nl_sys->number()),
8519 "I expect these system numbers to be the same");
8520
8521 sp.clear();
8522 for (unsigned int i = 0; i < subspaceDim("NearNullSpace"); ++i)
8523 {
8524 std::stringstream postfix;
8525 postfix << "_" << i;
8526 std::string modename = "NearNullSpace" + postfix.str();
8527 sp.push_back(&_current_nl_sys->getVector(modename));
8528 }
8529}
unsigned int subspaceDim(const std::string &prefix) const
Dimension of the subspace spanned by vectors with a given prefix.

Referenced by Moose::compute_nearnullspace().

◆ computeNullSpace()

void FEProblemBase::computeNullSpace ( libMesh::NonlinearImplicitSystem sys,
std::vector< NumericVector< libMesh::Number > * > &  sp 
)
virtual

Definition at line 8532 of file FEProblemBase.C.

8534{
8535 mooseAssert(_current_nl_sys && (sys.number() == _current_nl_sys->number()),
8536 "I expect these system numbers to be the same");
8537 sp.clear();
8538 for (unsigned int i = 0; i < subspaceDim("NullSpace"); ++i)
8539 {
8540 std::stringstream postfix;
8541 postfix << "_" << i;
8542 sp.push_back(&_current_nl_sys->getVector("NullSpace" + postfix.str()));
8543 }
8544}

Referenced by Moose::compute_nullspace().

◆ computePostCheck()

void FEProblemBase::computePostCheck ( libMesh::NonlinearImplicitSystem sys,
const NumericVector< libMesh::Number > &  old_soln,
NumericVector< libMesh::Number > &  search_direction,
NumericVector< libMesh::Number > &  new_soln,
bool &  changed_search_direction,
bool &  changed_new_soln 
)
virtual

Definition at line 8562 of file FEProblemBase.C.

8568{
8569 mooseAssert(_current_nl_sys && (sys.number() == _current_nl_sys->number()),
8570 "I expect these system numbers to be the same");
8571
8572 // This function replaces the old PetscSupport::dampedCheck() function.
8573 //
8574 // 1.) Recreate code in PetscSupport::dampedCheck() for constructing
8575 // ghosted "soln" and "update" vectors.
8576 // 2.) Call FEProblemBase::computeDamping() with these ghost vectors.
8577 // 3.) Recreate the code in PetscSupport::dampedCheck() to actually update
8578 // the solution vector based on the damping, and set the "changed" flags
8579 // appropriately.
8580
8581 TIME_SECTION("computePostCheck", 2, "Computing Post Check");
8582
8584
8585 // MOOSE's FEProblemBase doesn't update the solution during the
8586 // postcheck, but FEProblemBase-derived classes might.
8588 {
8589 // We need ghosted versions of new_soln and search_direction (the
8590 // ones we get from libmesh/PETSc are PARALLEL vectors. To make
8591 // our lives simpler, we use the same ghosting pattern as the
8592 // system's current_local_solution to create new ghosted vectors.
8593
8594 // Construct zeroed-out clones with the same ghosted dofs as the
8595 // System's current_local_solution.
8596 std::unique_ptr<NumericVector<Number>> ghosted_solution =
8597 sys.current_local_solution->zero_clone(),
8598 ghosted_search_direction =
8599 sys.current_local_solution->zero_clone();
8600
8601 // Copy values from input vectors into clones with ghosted values.
8602 *ghosted_solution = new_soln;
8603 *ghosted_search_direction = search_direction;
8604
8605 if (_has_dampers)
8606 {
8607 // Compute the damping coefficient using the ghosted vectors
8608 Real damping = computeDamping(*ghosted_solution, *ghosted_search_direction);
8609
8610 // If some non-trivial damping was computed, update the new_soln
8611 // vector accordingly.
8612 if (damping < 1.0)
8613 {
8614 new_soln = old_soln;
8615 new_soln.add(-damping, search_direction);
8616 changed_new_soln = true;
8617 }
8618 }
8619
8621 {
8622 // Update the ghosted copy of the new solution, if necessary.
8623 if (changed_new_soln)
8624 *ghosted_solution = new_soln;
8625
8626 bool updated_solution = updateSolution(new_soln, *ghosted_solution);
8627 if (updated_solution)
8628 changed_new_soln = true;
8629 }
8630 }
8631
8633 {
8635 _aux->copyCurrentIntoPreviousNL();
8636 }
8637
8638 // MOOSE doesn't change the search_direction
8639 changed_search_direction = false;
8640
8642}
const ExecFlagType EXEC_POSTCHECK
Definition Moose.C:36
virtual bool shouldUpdateSolution()
Check to see whether the problem should update the solution.
virtual Real computeDamping(const NumericVector< libMesh::Number > &soln, const NumericVector< libMesh::Number > &update)
virtual bool updateSolution(NumericVector< libMesh::Number > &vec_solution, NumericVector< libMesh::Number > &ghosted_solution)
Update the solution.
virtual void setPreviousNewtonSolution(const NumericVector< Number > &soln)
virtual bool vectorTagExists(const TagID tag_id) const
Check to see if a particular Tag exists.
Definition SubProblem.h:201
virtual void add(const numeric_index_type i, const T value)=0
std::unique_ptr< NumericVector< Number > > current_local_solution
const TagName PREVIOUS_NL_SOLUTION_TAG
Definition MooseTypes.C:28

Referenced by Moose::compute_postcheck().

◆ computeResidual() [1/2]

virtual void FEProblemBase::computeResidual ( const NumericVector< libMesh::Number > &  soln,
NumericVector< libMesh::Number > &  residual,
const unsigned int  nl_sys_num 
)
virtual

Form a residual with default tags (nontime, time, residual).

◆ computeResidual() [2/2]

void FEProblemBase::computeResidual ( libMesh::NonlinearImplicitSystem sys,
const NumericVector< libMesh::Number > &  soln,
NumericVector< libMesh::Number > &  residual 
)

This function is called by Libmesh to form a residual.

This is deprecated. We should remove this as soon as RattleSnake is fixed.

Referenced by computeResidualL2Norm(), computeResidualSys(), ActuallyExplicitEuler::solve(), and ExplicitSSPRungeKutta::solveStage().

◆ computeResidualAndJacobian()

void FEProblemBase::computeResidualAndJacobian ( const NumericVector< libMesh::Number > &  soln,
NumericVector< libMesh::Number > &  residual,
libMesh::SparseMatrix< libMesh::Number > &  jacobian 
)

Form a residual and Jacobian with default tags.

Definition at line 7794 of file FEProblemBase.C.

7797{
7798 try
7799 {
7800 try
7801 {
7802 // vector tags
7804 const auto & residual_vector_tags = getVectorTags(Moose::VECTOR_TAG_RESIDUAL);
7805
7806 mooseAssert(_fe_vector_tags.empty(),
7807 "This should be empty indicating a clean starting state");
7808 // We filter out tags which do not have associated vectors in the current nonlinear
7809 // system. This is essential to be able to use system-dependent residual tags.
7811
7813
7814 // matrix tags
7815 {
7816 _fe_matrix_tags.clear();
7817
7818 auto & tags = getMatrixTags();
7819 for (auto & tag : tags)
7820 _fe_matrix_tags.insert(tag.second);
7821 }
7822
7824
7827
7828 for (const auto tag : _fe_matrix_tags)
7829 if (_current_nl_sys->hasMatrix(tag))
7830 {
7831 auto & matrix = _current_nl_sys->getMatrix(tag);
7832 matrix.zero();
7834 // PETSc algorithms require diagonal allocations regardless of whether there is non-zero
7835 // diagonal dependence. With global AD indexing we only add non-zero
7836 // dependence, so PETSc will scream at us unless we artificially add the diagonals.
7837 for (auto index : make_range(matrix.row_start(), matrix.row_stop()))
7838 matrix.add(index, index, 0);
7839 }
7840
7841 _aux->zeroVariablesForResidual();
7842
7843 unsigned int n_threads = libMesh::n_threads();
7844
7846
7847 // Random interface objects
7848 for (const auto & it : _random_data_objects)
7849 it.second->updateSeeds(EXEC_LINEAR);
7850
7855 {
7856 _displaced_problem->setCurrentlyComputingResidual(true);
7857 _displaced_problem->setCurrentlyComputingJacobian(true);
7858 _displaced_problem->setCurrentlyComputingResidualAndJacobian(true);
7859 }
7860
7862
7863 for (unsigned int tid = 0; tid < n_threads; tid++)
7864 reinitScalars(tid);
7865
7867
7868 _aux->residualSetup();
7869
7871 {
7873 _displaced_problem->updateMesh();
7874 if (_mortar_data->hasDisplacedObjects())
7876 }
7877
7878 for (THREAD_ID tid = 0; tid < n_threads; tid++)
7879 {
7882 }
7883
7884#ifdef MOOSE_KOKKOS_ENABLED
7886#endif
7887
7889
7891
7893
7895
7898
7900
7903 }
7904 catch (...)
7905 {
7906 handleException("computeResidualAndJacobian");
7907 }
7908 }
7909 catch (const MooseException &)
7910 {
7911 // The buck stops here, we have already handled the exception by
7912 // calling the system's stopSolve() method, it is now up to PETSc to return a
7913 // "diverged" reason during the next solve.
7914 }
7915 catch (...)
7916 {
7917 mooseError("Unexpected exception type");
7918 }
7919
7920 resetState();
7921 _fe_vector_tags.clear();
7922 _fe_matrix_tags.clear();
7923}
void setCurrentResidualVectorTags(const std::set< TagID > &vector_tags)
Set the current residual vector tag data structure based on the passed in tag IDs.
void setCurrentlyComputingResidual(bool currently_computing_residual) final
Set whether or not the problem is in the process of computing the residual.
virtual void residualSetup(THREAD_ID tid=0) const
void computeResidualAndJacobianTags(const std::set< TagID > &vector_tags, const std::set< TagID > &matrix_tags)
Form possibly multiple tag-associated vectors and matrices.
TagID residualVectorTag() const override
void residualSetup()
Calls the residualSetup function for each of the output objects.
void setCurrentlyComputingJacobian(const bool currently_computing_jacobian)
Set whether or not the problem is in the process of computing the Jacobian.
Definition SubProblem.h:697
void setCurrentlyComputingResidualAndJacobian(bool currently_computing_residual_and_jacobian)
Set whether or not the problem is in the process of computing the Jacobian.

Referenced by ComputeResidualAndJacobian::residual_and_jacobian().

◆ computeResidualInternal()

void FEProblemBase::computeResidualInternal ( const NumericVector< libMesh::Number > &  soln,
NumericVector< libMesh::Number > &  residual,
const std::set< TagID > &  tags 
)
virtual

Form a residual vector for a set of tags.

It should not be called directly by users.

Definition at line 7955 of file FEProblemBase.C.

7958{
7959 parallel_object_only();
7960
7961 TIME_SECTION("computeResidualInternal", 1);
7962
7963 try
7964 {
7966
7968
7969 computeResidualTags(tags);
7970
7972 }
7973 catch (MooseException & e)
7974 {
7975 // If a MooseException propagates all the way to here, it means
7976 // that it was thrown from a MOOSE system where we do not
7977 // (currently) properly support the throwing of exceptions, and
7978 // therefore we have no choice but to error out. It may be
7979 // *possible* to handle exceptions from other systems, but in the
7980 // meantime, we don't want to silently swallow any unhandled
7981 // exceptions here.
7982 mooseError("An unhandled MooseException was raised during residual computation. Please "
7983 "contact the MOOSE team for assistance.");
7984 }
7985}
virtual void computeResidualTags(const std::set< TagID > &tags)
Form multiple residual vectors and each is associated with one tag.

◆ computeResidualL2Norm() [1/3]

Real FEProblemBase::computeResidualL2Norm ( )
virtual

Computes the residual using whatever is sitting in the current solution vector then returns the L2 norm.

Returns
The L2 norm of the residual

Reimplemented in EigenProblem.

Definition at line 7727 of file FEProblemBase.C.

7728{
7729 TIME_SECTION("computeResidualL2Norm", 2, "Computing L2 Norm of Residual");
7730
7731 // We use sum the squared norms of the individual systems and then take the square root of it
7732 Real l2_norm = 0.0;
7733 for (auto sys : _nl)
7734 {
7735 const auto norm = computeResidualL2Norm(*sys);
7736 l2_norm += norm * norm;
7737 }
7738
7739 for (auto sys : _linear_systems)
7740 {
7741 const auto norm = computeResidualL2Norm(*sys);
7742 l2_norm += norm * norm;
7743 }
7744
7745 return std::sqrt(l2_norm);
7746}
virtual Real computeResidualL2Norm()
Computes the residual using whatever is sitting in the current solution vector then returns the L2 no...
auto norm(const T &a)

Referenced by computeResidualL2Norm().

◆ computeResidualL2Norm() [2/3]

Real FEProblemBase::computeResidualL2Norm ( LinearSystem sys)

Computes the residual of a linear system using whatever is sitting in the current solution vector then returns the L2 norm.

Definition at line 7709 of file FEProblemBase.C.

7710{
7711 _current_linear_sys = &sys;
7712
7713 // We assemble the current system to check the current residual
7717 /*compute fresh gradients*/ true);
7718
7719 // Unfortunate, but we have to allocate a new vector for the residual
7720 auto residual = sys.linearImplicitSystem().rhs->clone();
7721 residual->scale(-1.0);
7722 residual->add_vector(*sys.currentSolution(), *sys.linearImplicitSystem().matrix);
7723 return residual->l2_norm();
7724}
virtual void computeLinearSystemSys(libMesh::LinearImplicitSystem &sys, libMesh::SparseMatrix< libMesh::Number > &system_matrix, NumericVector< libMesh::Number > &rhs, const bool compute_gradients=true)
Assemble both the right hand side and the system matrix of a given linear system.
libMesh::LinearImplicitSystem & linearImplicitSystem()
Return a reference to the stored linear implicit system.
NumericVector< Number > * rhs
SparseMatrix< Number > * matrix
virtual std::unique_ptr< NumericVector< T > > clone() const=0

◆ computeResidualL2Norm() [3/3]

Real FEProblemBase::computeResidualL2Norm ( NonlinearSystemBase sys)

Computes the residual of a nonlinear system using whatever is sitting in the current solution vector then returns the L2 norm.

Definition at line 7701 of file FEProblemBase.C.

7702{
7703 _current_nl_sys = &sys;
7704 computeResidual(*sys.currentSolution(), sys.RHS(), sys.number());
7705 return sys.RHS().l2_norm();
7706}
void computeResidual(libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual)
This function is called by Libmesh to form a residual.
virtual NumericVector< Number > & RHS()=0
virtual Real l2_norm() const=0

Referenced by DefaultMultiAppFixedPointConvergence::checkConvergence(), Residual::getValue(), DefaultMultiAppFixedPointConvergence::initialize(), and DefaultMultiAppFixedPointConvergence::preSolve().

◆ computeResidualSys()

void FEProblemBase::computeResidualSys ( libMesh::NonlinearImplicitSystem sys,
const NumericVector< libMesh::Number > &  soln,
NumericVector< libMesh::Number > &  residual 
)
virtual

This function is called by Libmesh to form a residual.

Definition at line 7749 of file FEProblemBase.C.

7752{
7753 parallel_object_only();
7754
7755 TIME_SECTION("computeResidualSys", 5);
7756 // Reset before residual setup, calculation & execution
7758
7759 computeResidual(soln, residual, sys.number());
7760}

Referenced by NonlinearSystem::computeScalingResidual(), ComputeFDResidualFunctor::residual(), ComputeResidualFunctor::residual(), and NonlinearSystem::solve().

◆ computeResidualTag()

void FEProblemBase::computeResidualTag ( const NumericVector< libMesh::Number > &  soln,
NumericVector< libMesh::Number > &  residual,
TagID  tag 
)
virtual

Form a residual vector for a given tag.

Definition at line 7926 of file FEProblemBase.C.

7929{
7930 try
7931 {
7933
7934 _current_nl_sys->associateVectorToTag(residual, tag);
7935
7936 computeResidualTags({tag});
7937
7939 }
7940 catch (MooseException & e)
7941 {
7942 // If a MooseException propagates all the way to here, it means
7943 // that it was thrown from a MOOSE system where we do not
7944 // (currently) properly support the throwing of exceptions, and
7945 // therefore we have no choice but to error out. It may be
7946 // *possible* to handle exceptions from other systems, but in the
7947 // meantime, we don't want to silently swallow any unhandled
7948 // exceptions here.
7949 mooseError("An unhandled MooseException was raised during residual computation. Please "
7950 "contact the MOOSE team for assistance.");
7951 }
7952}

◆ computeResidualTags()

void FEProblemBase::computeResidualTags ( const std::set< TagID > &  tags)
virtual

Form multiple residual vectors and each is associated with one tag.

Definition at line 8074 of file FEProblemBase.C.

8075{
8076 parallel_object_only();
8077
8078 try
8079 {
8080 try
8081 {
8082 TIME_SECTION("computeResidualTags", 5, "Computing Residual");
8083
8084 ADReal::do_derivatives = false;
8085
8087
8088 _aux->zeroVariablesForResidual();
8089
8090 unsigned int n_threads = libMesh::n_threads();
8091
8093
8094 // Random interface objects
8095 for (const auto & it : _random_data_objects)
8096 it.second->updateSeeds(EXEC_LINEAR);
8097
8098 // This is itself a residual evaluation (distinct from the combined residual/Jacobian path
8099 // above, which sets this before its own updateMortarMesh() call): mark it so that
8100 // updateMortarMesh() below knows not to reinit the equation systems mid-evaluation. Reset by
8101 // resetState() at the bottom of this function.
8104 _displaced_problem->setCurrentlyComputingResidual(true);
8105
8107
8108 for (unsigned int tid = 0; tid < n_threads; tid++)
8109 reinitScalars(tid);
8110
8112
8113 _aux->residualSetup();
8114
8116 {
8118 _displaced_problem->updateMesh();
8119 if (_mortar_data->hasDisplacedObjects())
8121 }
8122
8123 for (THREAD_ID tid = 0; tid < n_threads; tid++)
8124 {
8127 }
8128
8129#ifdef MOOSE_KOKKOS_ENABLED
8131#endif
8132
8134
8136
8138
8140
8143 }
8144 catch (...)
8145 {
8146 handleException("computeResidualTags");
8147 }
8148 }
8149 catch (const MooseException &)
8150 {
8151 // The buck stops here, we have already handled the exception by
8152 // calling the system's stopSolve() method, it is now up to PETSc to return a
8153 // "diverged" reason during the next solve.
8154 }
8155 catch (...)
8156 {
8157 mooseError("Unexpected exception type");
8158 }
8159
8160 resetState();
8161}
void computeResidualTags(const std::set< TagID > &tags)
Form multiple tag-associated residual vectors for all the given tags.

Referenced by EigenProblem::computeResidualAB(), computeResidualInternal(), computeResidualTag(), EigenProblem::computeResidualTag(), and computeResidualType().

◆ computeResidualType()

void FEProblemBase::computeResidualType ( const NumericVector< libMesh::Number > &  soln,
NumericVector< libMesh::Number > &  residual,
TagID  tag 
)
virtual

Form a residual vector for a given tag and "residual" tag.

Definition at line 7988 of file FEProblemBase.C.

7991{
7992 TIME_SECTION("computeResidualType", 5);
7993
7994 try
7995 {
7997
7999
8001
8003 }
8004 catch (MooseException & e)
8005 {
8006 // If a MooseException propagates all the way to here, it means
8007 // that it was thrown from a MOOSE system where we do not
8008 // (currently) properly support the throwing of exceptions, and
8009 // therefore we have no choice but to error out. It may be
8010 // *possible* to handle exceptions from other systems, but in the
8011 // meantime, we don't want to silently swallow any unhandled
8012 // exceptions here.
8013 mooseError("An unhandled MooseException was raised during residual computation. Please "
8014 "contact the MOOSE team for assistance.");
8015 }
8016}

◆ computeSystems()

void FEProblemBase::computeSystems ( const ExecFlagType type)
protected

Do generic system computations.

Definition at line 10351 of file FEProblemBase.C.

10352{
10353 // When performing an adjoint solve in the optimization module, the current solver system is the
10354 // adjoint. However, the adjoint solve requires having accurate time derivative calculations for
10355 // the forward system. The cleanest way to handle such uses is just to compute the time
10356 // derivatives for all solver systems instead of trying to guess which ones we need and don't need
10357 for (auto & solver_sys : _solver_systems)
10358 solver_sys->compute(type);
10359
10360 _aux->compute(type);
10361}

Referenced by computeBounds(), computeJacobianBlocks(), EigenProblem::computeJacobianBlocks(), computeJacobianTags(), computeLinearSystemTags(), computeResidualAndJacobian(), computeResidualTags(), and execute().

◆ computeTransposeNullSpace()

void FEProblemBase::computeTransposeNullSpace ( libMesh::NonlinearImplicitSystem sys,
std::vector< NumericVector< libMesh::Number > * > &  sp 
)
virtual

Definition at line 8547 of file FEProblemBase.C.

8549{
8550 mooseAssert(_current_nl_sys && (sys.number() == _current_nl_sys->number()),
8551 "I expect these system numbers to be the same");
8552 sp.clear();
8553 for (unsigned int i = 0; i < subspaceDim("TransposeNullSpace"); ++i)
8554 {
8555 std::stringstream postfix;
8556 postfix << "_" << i;
8557 sp.push_back(&_current_nl_sys->getVector("TransposeNullSpace" + postfix.str()));
8558 }
8559}

Referenced by Moose::compute_transpose_nullspace().

◆ computeUserObjectByName()

void FEProblemBase::computeUserObjectByName ( const ExecFlagType type,
const Moose::AuxGroup group,
const std::string &  name 
)
virtual

Compute an user object with the given name.

Definition at line 5413 of file FEProblemBase.C.

5416{
5417 const auto old_exec_flag = _current_execute_on_flag;
5419
5420 std::set<int> execution_groups;
5421
5422#ifdef MOOSE_KOKKOS_ENABLED
5423 TheWarehouse::Query kokkos_query =
5424 getUOQuery("KokkosUserObject", type, group).condition<AttribName>(name);
5425 getUOExecutionGroups(kokkos_query, execution_groups);
5426#endif
5427
5429 getUOExecutionGroups(query, execution_groups);
5430
5431 for (const auto execution_group : execution_groups)
5432 {
5433#ifdef MOOSE_KOKKOS_ENABLED
5435 type, kokkos_query.clone().condition<AttribExecutionOrderGroup>(execution_group));
5436#endif
5437
5439 query.clone().condition<AttribExecutionOrderGroup>(execution_group));
5440 }
5441
5442 _current_execute_on_flag = old_exec_flag;
5443}
TheWarehouse::Query getUOQuery(const std::string &system, const ExecFlagType &type, const Moose::AuxGroup &group) const
void computeUserObjectsInternal(const ExecFlagType &type, TheWarehouse::Query &query)
void computeKokkosUserObjectsInternal(const ExecFlagType &type, TheWarehouse::Query &query)
void getUOExecutionGroups(TheWarehouse::Query &query, std::set< int > &execution_groups) const
QueryCache is a convenient way to construct and pass around (possible partially constructed) warehous...
QueryCache clone() const
clone creates and returns an independent copy of the query in its current state.
query_obj query

Referenced by MultiAppConservativeTransfer::adjustTransferredSolution(), MultiAppConservativeTransfer::adjustTransferredSolutionNearestPoint(), MultiAppGeneralFieldFunctorTransfer::execute(), MultiAppGeneralFieldUserObjectTransfer::execute(), MultiAppPostprocessorToAuxScalarTransfer::execute(), MultiAppPostprocessorTransfer::execute(), MultiAppUserObjectTransfer::execute(), MultiAppVectorPostprocessorTransfer::executeToMultiapp(), and MultiAppConservativeTransfer::postExecute().

◆ computeUserObjects()

void FEProblemBase::computeUserObjects ( const ExecFlagType type,
const Moose::AuxGroup group 
)
virtual

Call compute methods on UserObjects.

Definition at line 5446 of file FEProblemBase.C.

5447{
5448 std::set<int> execution_groups;
5449
5450#ifdef MOOSE_KOKKOS_ENABLED
5451 TheWarehouse::Query kokkos_query = getUOQuery("KokkosUserObject", type, group);
5452 getUOExecutionGroups(kokkos_query, execution_groups);
5453#endif
5454
5455 TheWarehouse::Query query = getUOQuery("UserObject", type, group);
5456 getUOExecutionGroups(query, execution_groups);
5457
5458 for (const auto execution_group : execution_groups)
5459 {
5460#ifdef MOOSE_KOKKOS_ENABLED
5462 type, kokkos_query.clone().condition<AttribExecutionOrderGroup>(execution_group));
5463#endif
5464
5466 query.clone().condition<AttribExecutionOrderGroup>(execution_group));
5467 }
5468
5469 // Exceptions raised on solver execution flags are communicated and handled by the PARALLEL_CATCH
5470 // surrounding the assembly loops of the residual, Jacobian and linear systems. On all other
5471 // execution flags there is no solve left to fail, so the exception is communicated here in order
5472 // to report it at the point of the simulation where it was raised
5475}
virtual void checkExceptionAndStopSolve(bool print_message=true)
Check to see if an exception has occurred on any processor and, if possible, force the solve to fail,...

Referenced by computeJacobianTags(), computeLinearSystemTags(), computeResidualAndJacobian(), computeResidualTags(), and execute().

◆ computeUserObjectsInternal()

void FEProblemBase::computeUserObjectsInternal ( const ExecFlagType type,
TheWarehouse::Query query 
)
protected

Definition at line 5478 of file FEProblemBase.C.

5479{
5480 try
5481 {
5482 TIME_SECTION("computeUserObjects", 1, "Computing User Objects");
5483
5484 std::vector<GeneralUserObject *> genobjs;
5485 query.clone().condition<AttribInterfaces>(Interfaces::GeneralUserObject).queryInto(genobjs);
5486
5487 std::vector<UserObject *> userobjs;
5488 query.clone()
5492 .queryInto(userobjs);
5493
5494 std::vector<UserObject *> tgobjs;
5495 query.clone()
5497 .queryInto(tgobjs);
5498
5499 std::vector<UserObject *> nodal;
5500 query.clone().condition<AttribInterfaces>(Interfaces::NodalUserObject).queryInto(nodal);
5501
5502 std::vector<MortarUserObject *> mortar;
5503 query.clone().condition<AttribInterfaces>(Interfaces::MortarUserObject).queryInto(mortar);
5504
5505 if (userobjs.empty() && genobjs.empty() && tgobjs.empty() && nodal.empty() && mortar.empty())
5506 return;
5507
5508 // Start the timer here since we have at least one active user object
5509 std::string compute_uo_tag = "computeUserObjects(" + Moose::stringify(type) + ")";
5510
5511 // Perform Residual/Jacobian setups
5512 if (type == EXEC_LINEAR)
5513 {
5514 for (auto obj : userobjs)
5515 obj->residualSetup();
5516 for (auto obj : nodal)
5517 obj->residualSetup();
5518 for (auto obj : mortar)
5519 obj->residualSetup();
5520 for (auto obj : tgobjs)
5521 obj->residualSetup();
5522 for (auto obj : genobjs)
5523 obj->residualSetup();
5524 }
5525 else if (type == EXEC_NONLINEAR)
5526 {
5527 for (auto obj : userobjs)
5528 obj->jacobianSetup();
5529 for (auto obj : nodal)
5530 obj->jacobianSetup();
5531 for (auto obj : mortar)
5532 obj->jacobianSetup();
5533 for (auto obj : tgobjs)
5534 obj->jacobianSetup();
5535 for (auto obj : genobjs)
5536 obj->jacobianSetup();
5537 }
5538
5539 for (auto obj : userobjs)
5540 obj->initialize();
5541
5542 // Execute Side/InternalSide/Interface/Elemental/DomainUserObjects
5543 if (!userobjs.empty())
5544 {
5545 // non-nodal user objects have to be run separately before the nodal user objects run
5546 // because some nodal user objects (NodalNormal related) depend on elemental user objects
5547 // :-(
5548 ComputeUserObjectsThread cppt(*this, query);
5550
5551 // There is one instance in rattlesnake where an elemental user object's finalize depends
5552 // on a side user object having been finalized first :-(
5559 }
5560
5561 // if any elemental user object may have written to variables we need to close the aux solution
5562 for (const auto & uo : userobjs)
5563 if (auto euo = dynamic_cast<const ElementUserObject *>(uo);
5564 euo && euo->hasWritableCoupledVariables())
5565 {
5566 _aux->solution().close();
5567 _aux->system().update();
5568 break;
5569 }
5570
5571 // Execute NodalUserObjects
5572 // BISON has an axial reloc elemental user object that has a finalize func that depends on a
5573 // nodal user object's prev value. So we can't initialize this until after elemental objects
5574 // have been finalized :-(
5575 for (auto obj : nodal)
5576 obj->initialize();
5577 if (query.clone().condition<AttribInterfaces>(Interfaces::NodalUserObject).count() > 0)
5578 {
5579 ComputeNodalUserObjectsThread cnppt(*this, query);
5582 }
5583
5584 // if any nodal user object may have written to variables we need to close the aux solution
5585 for (const auto & uo : nodal)
5586 if (auto nuo = dynamic_cast<const NodalUserObject *>(uo);
5587 nuo && nuo->hasWritableCoupledVariables())
5588 {
5589 _aux->solution().close();
5590 _aux->system().update();
5591 break;
5592 }
5593
5594 // Execute MortarUserObjects
5595 {
5596 for (auto obj : mortar)
5597 obj->initialize();
5598 if (!mortar.empty())
5599 {
5600 auto create_and_run_mortar_functors = [this, type, &mortar](const bool displaced)
5601 {
5602 // go over mortar interfaces and construct functors
5603 const auto & mortar_interfaces = getMortarInterfaces(displaced);
5604 for (const auto & [primary_secondary_boundary_pair, interface_config] : mortar_interfaces)
5605 {
5606 auto mortar_uos_to_execute =
5607 getMortarUserObjects(primary_secondary_boundary_pair.first,
5608 primary_secondary_boundary_pair.second,
5609 displaced,
5610 mortar);
5611
5612 auto * const subproblem = displaced ? cast_ptr<SubProblem *>(_displaced_problem.get())
5613 : cast_ptr<SubProblem *>(this);
5614 MortarUserObjectThread muot(mortar_uos_to_execute,
5615 *interface_config.amg,
5616 *subproblem,
5617 *this,
5618 displaced,
5619 subproblem->assembly(0, 0));
5620
5621 muot();
5622 }
5623 };
5624
5625 create_and_run_mortar_functors(false);
5627 create_and_run_mortar_functors(true);
5628 }
5629 for (auto obj : mortar)
5630 obj->finalize();
5631 }
5632
5633 // Execute threaded general user objects
5634 for (auto obj : tgobjs)
5635 obj->initialize();
5636 std::vector<GeneralUserObject *> tguos_zero;
5637 query.clone()
5638 .condition<AttribThread>(0)
5639 .condition<AttribInterfaces>(Interfaces::ThreadedGeneralUserObject)
5640 .queryInto(tguos_zero);
5641 for (auto obj : tguos_zero)
5642 {
5643 std::vector<GeneralUserObject *> tguos;
5644 auto q = query.clone()
5645 .condition<AttribName>(obj->name())
5646 .condition<AttribInterfaces>(Interfaces::ThreadedGeneralUserObject);
5647 q.queryInto(tguos);
5648
5650
5651 // Force one thread per ThreadedGeneralUserObject via grainsize
5653 tguos.end(),
5654 /*grainsize=*/1),
5655 ctguot);
5656 joinAndFinalize(q);
5657 }
5658
5659 // Execute general user objects
5661 }
5662 catch (...)
5663 {
5664 handleException("computeUserObjectsInternal");
5665 }
5666}
@ InternalSideUserObject
@ ThreadedGeneralUserObject
@ InterfaceUserObject
StoredRange< std::vector< GeneralUserObject * >::iterator, GeneralUserObject * > GeneralUserObjectRange
Thread to compute threaded general user objects.
Class for threaded computation of UserObjects.
bool hasWritableCoupledVariables() const
Checks whether the object has any writable coupled variables.
Definition Coupleable.h:142
void jacobianSetup() override
void joinAndFinalize(TheWarehouse::Query query, bool isgen=false)
void residualSetup() override
const std::unordered_map< std::pair< BoundaryID, BoundaryID >, MortarInterfaceConfig > & getMortarInterfaces(bool on_displaced) const
std::vector< MortarUserObject * > getMortarUserObjects(BoundaryID primary_boundary_id, BoundaryID secondary_boundary_id, bool displaced, const std::vector< MortarUserObject * > &mortar_uo_superset)
Helper for getting mortar objects corresponding to primary boundary ID, secondary boundary ID,...
const libMesh::ConstNodeRange & getCurrentAlgebraicNodeRange()
A user object that runs over all the nodes and does an aggregation step to compute a single value.
void initialize(EquationSystems &es, const std::string &system_name)
Tnew cast_ptr(Told *oldvar)

Referenced by computeUserObjectByName(), and computeUserObjects().

◆ computingNonlinearResid() [1/3]

bool SubProblem::computingNonlinearResid ( ) const
inline

Returns true if the problem is in the process of computing the nonlinear residual.

Definition at line 715 of file SubProblem.h.

bool _computing_nonlinear_residual
Whether the non-linear residual is being evaluated.

◆ computingNonlinearResid() [2/3]

void FEProblemBase::computingNonlinearResid ( bool  computing_nonlinear_residual)
finalvirtual

Set whether or not the problem is in the process of computing the nonlinear residual.

Reimplemented from SubProblem.

Definition at line 9982 of file FEProblemBase.C.

9983{
9984 parallel_object_only();
9985
9987 _displaced_problem->computingNonlinearResid(computing_nonlinear_residual);
9988 _computing_nonlinear_residual = computing_nonlinear_residual;
9989}

Referenced by NonlinearSystemBase::computeResidualInternal(), NonlinearSystemBase::computeScaling(), ComputeFDResidualFunctor::residual(), ComputeResidualFunctor::residual(), and ComputeResidualAndJacobian::residual_and_jacobian().

◆ computingNonlinearResid() [3/3]

virtual void SubProblem::computingNonlinearResid ( const bool  computing_nonlinear_residual)
inlinevirtual

Set whether or not the problem is in the process of computing the nonlinear residual.

Reimplemented from SubProblem.

Definition at line 720 of file SubProblem.h.

721 {
722 _computing_nonlinear_residual = computing_nonlinear_residual;
723 }

◆ computingPreSMOResidual()

bool FEProblemBase::computingPreSMOResidual ( const unsigned int  nl_sys_num) const
overridevirtual

Returns true if the problem is in the process of computing it's initial residual.

Returns
Whether or not the problem is currently computing the initial residual.

Implements SubProblem.

Definition at line 7460 of file FEProblemBase.C.

7461{
7462 return _nl[nl_sys_num]->computingPreSMOResidual();
7463}

Referenced by DisplacedProblem::computingPreSMOResidual().

◆ computingScalingJacobian() [1/2]

bool FEProblemBase::computingScalingJacobian ( ) const
inlinefinaloverridevirtual

Getter for whether we're computing the scaling jacobian.

Implements SubProblem.

Definition at line 2889 of file FEProblemBase.h.

bool _computing_scaling_jacobian
Flag used to indicate whether we are computing the scaling Jacobian.

◆ computingScalingJacobian() [2/2]

void FEProblemBase::computingScalingJacobian ( bool  computing_scaling_jacobian)
inline

◆ computingScalingResidual() [1/2]

bool FEProblemBase::computingScalingResidual ( ) const
inlinefinaloverridevirtual
Returns
whether we are currently computing a residual for automatic scaling purposes

Implements SubProblem.

Definition at line 2902 of file FEProblemBase.h.

bool _computing_scaling_residual
Flag used to indicate whether we are computing the scaling Residual.

◆ computingScalingResidual() [2/2]

void FEProblemBase::computingScalingResidual ( bool  computing_scaling_residual)
inline

Setter for whether we're computing the scaling residual.

Definition at line 2894 of file FEProblemBase.h.

2895 {
2896 _computing_scaling_residual = computing_scaling_residual;
2897 }

Referenced by NonlinearSystemBase::computeResidualInternal(), NonlinearSystemBase::computeResidualTags(), NonlinearSystemBase::computeScaling(), and DisplacedProblem::computingScalingResidual().

◆ connectControllableParams()

void MooseBase::connectControllableParams ( const std::string &  parameter,
const std::string &  object_type,
const std::string &  object_name,
const std::string &  object_parameter 
) const
inherited

Connect controllable parameter of this action with the controllable parameters of the objects added by this action.

Parameters
parameterName of the controllable parameter of this action
object_typeType of the object added by this action.
object_nameName of the object added by this action.
object_parameterName of the parameter of the object.

Definition at line 77 of file MooseBase.C.

81{
82 auto & factory = _app.getFactory();
83 auto & ip_warehouse = _app.getInputParameterWarehouse();
84
85 MooseObjectParameterName primary_name(uniqueName(), parameter);
86 const auto base_type = factory.getValidParams(object_type).getBase();
87 MooseObjectParameterName secondary_name(base_type, object_name, object_parameter);
88 ip_warehouse.addControllableParameterConnection(primary_name, secondary_name);
89
90 const auto & tags = _pars.get<std::vector<std::string>>("control_tags");
91 for (const auto & tag : tags)
92 {
93 if (!tag.empty())
94 {
95 // Only adds the parameter with the different control tags if the derived class
96 // properly registers the parameter to its own syntax
97 MooseObjectParameterName tagged_name(tag, name(), parameter);
98 ip_warehouse.addControllableParameterConnection(
99 tagged_name, secondary_name, /*error_on_empty=*/false);
100 }
101 }
102}
Factory & getFactory()
Retrieve a writable reference to the Factory associated with this App.
Definition MooseApp.h:407
MooseObjectName uniqueName() const
Definition MooseBase.C:69

◆ console()

const ConsoleStream & Problem::console ( ) const
inlineinherited

Return console handle.

Definition at line 48 of file Problem.h.

48{ return _console; }

Referenced by Moose::SlepcSupport::mooseSlepcEPSMonitor(), ComputeLinearFVElementalThread::printBlockExecutionInformation(), ComputeLinearFVFaceThread::printBlockExecutionInformation(), ComputeDiracThread::printBlockExecutionInformation(), ComputeIndicatorThread::printBlockExecutionInformation(), ComputeMarkerThread::printBlockExecutionInformation(), ComputeUserObjectsThread::printBlockExecutionInformation(), NonlinearThread::printBlockExecutionInformation(), NonlinearThread::printBoundaryExecutionInformation(), ComputeFVInitialConditionThread::printGeneralExecutionInformation(), ComputeInitialConditionThread::printGeneralExecutionInformation(), ComputeLinearFVElementalThread::printGeneralExecutionInformation(), ComputeLinearFVFaceThread::printGeneralExecutionInformation(), ComputeDiracThread::printGeneralExecutionInformation(), ComputeElemDampingThread::printGeneralExecutionInformation(), ComputeIndicatorThread::printGeneralExecutionInformation(), ComputeMarkerThread::printGeneralExecutionInformation(), ComputeNodalDampingThread::printGeneralExecutionInformation(), ComputeNodalKernelBCJacobiansThread::printGeneralExecutionInformation(), ComputeNodalKernelBcsThread::printGeneralExecutionInformation(), ComputeNodalKernelJacobiansThread::printGeneralExecutionInformation(), ComputeNodalKernelsThread::printGeneralExecutionInformation(), ComputeNodalUserObjectsThread::printGeneralExecutionInformation(), ComputeUserObjectsThread::printGeneralExecutionInformation(), NonlinearThread::printGeneralExecutionInformation(), and ComputeThreadedGeneralUserObjectsThread::printGeneralExecutionInformation().

◆ constJacobian()

bool FEProblemBase::constJacobian ( ) const

Returns _const_jacobian (whether a MOOSE object has specified that the Jacobian is the same as the previous time it was computed)

Definition at line 9824 of file FEProblemBase.C.

9825{
9826 return _const_jacobian;
9827}

Referenced by Moose::SlepcSupport::moosePetscSNESFormMatricesTags(), Moose::SlepcSupport::moosePetscSNESFormMatrixTag(), and DisplacedProblem::prepare().

◆ converged()

virtual bool SubProblem::converged ( const unsigned int  sys_num)
inlinevirtualinherited

Eventually we want to convert this virtual over to taking a solver system number argument.

We will have to first convert apps to use solverSystemConverged, and then once that is done, we can change this signature. Then we can go through the apps again and convert back to this changed API

Definition at line 113 of file SubProblem.h.

113{ return solverSystemConverged(sys_num); }
virtual bool solverSystemConverged(const unsigned int sys_num)
Definition SubProblem.h:100

Referenced by EigenExecutionerBase::inversePowerIteration(), EigenExecutionerBase::nonlinearSolve(), FEProblemSolve::solve(), AStableDirk4::solve(), ExplicitRK2::solve(), ExplicitTVDRK2::solve(), ImplicitMidpoint::solve(), LStableDirk2::solve(), LStableDirk3::solve(), LStableDirk4::solve(), DisplacedProblem::solverSystemConverged(), SubProblem::solverSystemConverged(), and AB2PredictorCorrector::step().

◆ coordTransform()

MooseAppCoordTransform & FEProblemBase::coordTransform ( )
Returns
the coordinate transformation object that describes how to transform this problem's coordinate system into the canonical/reference coordinate system

Definition at line 10222 of file FEProblemBase.C.

10223{
10224 return mesh().coordTransform();
10225}

◆ copySolutionsBackwards()

void FEProblemBase::copySolutionsBackwards ( )
virtual

Definition at line 7466 of file FEProblemBase.C.

7467{
7468 TIME_SECTION("copySolutionsBackwards", 3, "Copying Solutions Backward");
7469
7470 for (auto & sys : _solver_systems)
7471 sys->copyStateHistoryBackwards();
7472 _aux->copyStateHistoryBackwards();
7473}

◆ coupling()

Moose::CouplingType FEProblemBase::coupling ( ) const
inline

◆ couplingEntries()

std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & FEProblemBase::couplingEntries ( const THREAD_ID  tid,
const unsigned int  nl_sys_num 
)

◆ couplingMatrix()

const libMesh::CouplingMatrix * FEProblemBase::couplingMatrix ( const unsigned int  nl_sys_num) const
inlineoverridevirtual

The coupling matrix defining what blocks exist in the preconditioning matrix.

Implements SubProblem.

Definition at line 3911 of file FEProblemBase.h.

3912{
3913 return _cm[i].get();
3914}

Referenced by DiffusionLHDGAssemblyHelper::checkCoupling(), DisplacedProblem::couplingMatrix(), and DisplacedProblem::init().

◆ createMortarInterface()

void FEProblemBase::createMortarInterface ( const std::pair< BoundaryID, BoundaryID > &  primary_secondary_boundary_pair,
const std::pair< SubdomainID, SubdomainID > &  primary_secondary_subdomain_pair,
bool  on_displaced,
bool  periodic,
const bool  debug,
const bool  correct_edge_dropping,
const Real  minimum_projection_angle,
const Mortar3DSubpatchPlane  mortar_3d_subpatch_plane,
const MooseEnum triangulation,
const bool  triangulate_triangles,
const Mortar3DQuadraturePointMapping  mortar_3d_qp_mapping = Mortar3DQuadraturePointMapping::NORMAL_PROJECTION 
)

Definition at line 8731 of file FEProblemBase.C.

8743{
8744 _has_mortar = true;
8745
8746 if (on_displaced)
8747 return _mortar_data->createMortarInterface(primary_secondary_boundary_pair,
8748 primary_secondary_subdomain_pair,
8750 on_displaced,
8751 periodic,
8752 debug,
8753 correct_edge_dropping,
8754 minimum_projection_angle,
8755 mortar_3d_subpatch_plane,
8756 triangulation,
8757 triangulate_triangles,
8758 mortar_3d_qp_mapping);
8759 else
8760 return _mortar_data->createMortarInterface(primary_secondary_boundary_pair,
8761 primary_secondary_subdomain_pair,
8762 *this,
8763 on_displaced,
8764 periodic,
8765 debug,
8766 correct_edge_dropping,
8767 minimum_projection_angle,
8768 mortar_3d_subpatch_plane,
8769 triangulation,
8770 triangulate_triangles,
8771 mortar_3d_qp_mapping);
8772}

◆ createQRules()

void FEProblemBase::createQRules ( libMesh::QuadratureType  type,
libMesh::Order  order,
libMesh::Order  volume_order = libMesh::INVALID_ORDER,
libMesh::Order  face_order = libMesh::INVALID_ORDER,
SubdomainID  block = Moose::ANY_BLOCK_ID,
bool  allow_negative_qweights = true 
)
virtual

Definition at line 6887 of file FEProblemBase.C.

6893{
6894 if (order == INVALID_ORDER)
6895 {
6896 // automatically determine the integration order
6897 order = _solver_systems[0]->getMinQuadratureOrder();
6898 for (const auto i : make_range(std::size_t(1), _solver_systems.size()))
6899 if (order < _solver_systems[i]->getMinQuadratureOrder())
6900 order = _solver_systems[i]->getMinQuadratureOrder();
6901 if (order < _aux->getMinQuadratureOrder())
6902 order = _aux->getMinQuadratureOrder();
6903 }
6904
6905 if (volume_order == INVALID_ORDER)
6906 volume_order = order;
6907
6908 if (face_order == INVALID_ORDER)
6909 face_order = order;
6910
6911 for (unsigned int tid = 0; tid < libMesh::n_threads(); ++tid)
6912 for (const auto i : index_range(_solver_systems))
6913 _assembly[tid][i]->createQRules(
6914 type, order, volume_order, face_order, block, allow_negative_qweights);
6915
6917 _displaced_problem->createQRules(
6918 type, order, volume_order, face_order, block, allow_negative_qweights);
6919
6920 updateMaxQps();
6921}
virtual void createQRules(libMesh::QuadratureType type, libMesh::Order order, libMesh::Order volume_order=libMesh::INVALID_ORDER, libMesh::Order face_order=libMesh::INVALID_ORDER, SubdomainID block=Moose::ANY_BLOCK_ID, bool allow_negative_qweights=true)

Referenced by ActionUnitTest::buildMinimalObjects(), MooseObjectUnitTest::buildObjects(), and createQRules().

◆ createTagMatrices()

void FEProblemBase::createTagMatrices ( CreateTaggedMatrixKey  )

Definition at line 743 of file FEProblemBase.C.

744{
745 auto & matrices = getParam<std::vector<std::vector<TagName>>>("extra_tag_matrices");
746 for (const auto sys_num : index_range(matrices))
747 for (auto & matrix : matrices[sys_num])
748 {
749 auto tag = addMatrixTag(matrix);
750 _solver_systems[sys_num]->addMatrix(tag);
751 }
752
753 for (auto & sys : _solver_systems)
754 sys->sizeVariableMatrixData();
755 _aux->sizeVariableMatrixData();
756}
for(PetscInt i=0;i< nvars;++i)
virtual TagID addMatrixTag(TagName tag_name)
Create a Tag.
Definition SubProblem.C:310

◆ createTagSolutions()

void FEProblemBase::createTagSolutions ( )
protected

Create extra tagged solution vectors.

Definition at line 759 of file FEProblemBase.C.

760{
761 for (auto & vector : getParam<std::vector<TagName>>("extra_tag_solutions"))
762 {
763 auto tag = addVectorTag(vector, Moose::VECTOR_TAG_SOLUTION);
764 for (auto & sys : _solver_systems)
765 sys->addVector(tag, false, libMesh::GHOSTED);
766 _aux->addVector(tag, false, libMesh::GHOSTED);
767 }
768
770 {
771 // We'll populate the zeroth state of the nonlinear iterations with the current solution for
772 // ease of use in doing things like copying solutions backwards. We're just storing pointers in
773 // the solution states containers so populating the zeroth state does not cost us the memory of
774 // a new vector
776 }
777
779 for (auto & sys : _solver_systems)
780 sys->associateVectorToTag(*sys->system().current_local_solution.get(), tag);
781 _aux->associateVectorToTag(*_aux->system().current_local_solution.get(), tag);
782}
void needSolutionState(unsigned int oldest_needed, Moose::SolutionIterationType iteration_type)
Declare that we need up to old (1) or older (2) solution states for a given type of iteration.
virtual TagID addVectorTag(const TagName &tag_name, const Moose::VectorTagType type=Moose::VECTOR_TAG_RESIDUAL)
Create a Tag.
Definition SubProblem.C:91
@ VECTOR_TAG_SOLUTION
const TagName SOLUTION_TAG
Definition MooseTypes.C:25

Referenced by DumpObjectsProblem::DumpObjectsProblem(), EigenProblem::EigenProblem(), ExternalProblem::ExternalProblem(), and FEProblem::FEProblem().

◆ createTagVectors()

void FEProblemBase::createTagVectors ( )
protected

Create extra tagged vectors and matrices.

Definition at line 721 of file FEProblemBase.C.

722{
723 // add vectors and their tags to system
724 auto & vectors = getParam<std::vector<std::vector<TagName>>>("extra_tag_vectors");
725 for (const auto sys_num : index_range(vectors))
726 for (auto & vector : vectors[sys_num])
727 {
728 auto tag = addVectorTag(vector);
729 _solver_systems[sys_num]->addVector(tag, false, libMesh::GHOSTED);
730 }
731
732 auto & not_zeroed_vectors = getParam<std::vector<std::vector<TagName>>>("not_zeroed_tag_vectors");
733 for (const auto sys_num : index_range(not_zeroed_vectors))
734 for (auto & vector : not_zeroed_vectors[sys_num])
735 {
736 auto tag = addVectorTag(vector);
737 _solver_systems[sys_num]->addVector(tag, false, GHOSTED);
739 }
740}
void addNotZeroedVectorTag(const TagID tag)
Adds a vector tag to the list of vectors that will not be zeroed when other tagged vectors are.
Definition SubProblem.C:148

Referenced by DumpObjectsProblem::DumpObjectsProblem(), EigenProblem::EigenProblem(), ExternalProblem::ExternalProblem(), and FEProblem::FEProblem().

◆ currentLinearSysNum()

unsigned int FEProblemBase::currentLinearSysNum ( ) const
overridevirtual
Returns
the current linear system number

Implements SubProblem.

Definition at line 10239 of file FEProblemBase.C.

10240{
10241 // If we don't have linear systems this should be an invalid number
10242 unsigned int current_linear_sys_num = libMesh::invalid_uint;
10243 if (_linear_systems.size())
10244 current_linear_sys_num = currentLinearSystem().number();
10245
10246 return current_linear_sys_num;
10247}
LinearSystem & currentLinearSystem()
Get a non-constant reference to the current linear system.
const unsigned int invalid_uint

Referenced by DisplacedProblem::currentLinearSysNum().

◆ currentLinearSystem() [1/2]

LinearSystem & FEProblemBase::currentLinearSystem ( )
inline

Get a non-constant reference to the current linear system.

Definition at line 3879 of file FEProblemBase.h.

3880{
3881 mooseAssert(_current_linear_sys, "The linear system is not currently set");
3882 return *_current_linear_sys;
3883}

Referenced by currentLinearSysNum(), and Moose::PetscSupport::petscLinearConverged().

◆ currentLinearSystem() [2/2]

const LinearSystem & FEProblemBase::currentLinearSystem ( ) const
inline

Get a constant reference to the current linear system.

Definition at line 3886 of file FEProblemBase.h.

3887{
3888 mooseAssert(_current_linear_sys, "The linear system is not currently set");
3889 return *_current_linear_sys;
3890}

◆ currentlyComputingJacobian()

const bool & SubProblem::currentlyComputingJacobian ( ) const
inlineinherited

◆ currentlyComputingResidual()

const bool & SubProblem::currentlyComputingResidual ( ) const
inline

Returns true if the problem is in the process of computing the residual.

Definition at line 728 of file SubProblem.h.

bool _currently_computing_residual
Whether the residual is being evaluated.

Referenced by updateMortarMesh().

◆ currentlyComputingResidualAndJacobian()

const bool & SubProblem::currentlyComputingResidualAndJacobian ( ) const
inlineinherited

Returns true if the problem is in the process of computing the residual and the Jacobian.

Definition at line 1505 of file SubProblem.h.

1506{
1508}
bool _currently_computing_residual_and_jacobian
Flag to determine whether the problem is currently computing the residual and Jacobian.

Referenced by SubProblem::reinitElemFaceRef(), and NEML2Utils::shouldCompute().

◆ currentNlSysNum()

unsigned int FEProblemBase::currentNlSysNum ( ) const
overridevirtual
Returns
the current nonlinear system number

Implements SubProblem.

Definition at line 10228 of file FEProblemBase.C.

10229{
10230 // If we don't have nonlinear systems this should be an invalid number
10231 unsigned int current_nl_sys_num = libMesh::invalid_uint;
10232 if (_nl.size())
10233 current_nl_sys_num = currentNonlinearSystem().number();
10234
10235 return current_nl_sys_num;
10236}
NonlinearSystemBase & currentNonlinearSystem()

Referenced by DisplacedProblem::currentNlSysNum(), jacobianSetup(), and residualSetup().

◆ currentNonlinearSystem() [1/2]

NonlinearSystemBase & FEProblemBase::currentNonlinearSystem ( )
inline

◆ currentNonlinearSystem() [2/2]

const NonlinearSystemBase & FEProblemBase::currentNonlinearSystem ( ) const
inline

Definition at line 3856 of file FEProblemBase.h.

3857{
3858 mooseAssert(_current_nl_sys, "The nonlinear system is not currently set");
3859 return *_current_nl_sys;
3860}

◆ currentResidualVectorTags()

const std::vector< VectorTag > & FEProblemBase::currentResidualVectorTags ( ) const
inlineoverridevirtual

Return the residual vector tags we are currently computing.

Implements SubProblem.

Definition at line 3927 of file FEProblemBase.h.

3928{
3930}

Referenced by addCachedResidualDirectly(), addResidual(), addResidualLower(), addResidualNeighbor(), addResidualScalar(), and DisplacedProblem::currentResidualVectorTags().

◆ customSetup()

void FEProblemBase::customSetup ( const ExecFlagType exec_type)
overridevirtual

Reimplemented from SubProblem.

Definition at line 5178 of file FEProblemBase.C.

5179{
5180 SubProblem::customSetup(exec_type);
5181
5182 if (_line_search)
5183 _line_search->customSetup(exec_type);
5184
5185 unsigned int n_threads = libMesh::n_threads();
5186 for (THREAD_ID tid = 0; tid < n_threads; tid++)
5187 {
5188 _all_materials.customSetup(exec_type, tid);
5189 _functions.customSetup(exec_type, tid);
5190 }
5191
5192#ifdef MOOSE_KOKKOS_ENABLED
5193 _kokkos_functions.customSetup(exec_type);
5194#endif
5195
5196 _aux->customSetup(exec_type);
5197 for (auto & nl : _nl)
5198 nl->customSetup(exec_type);
5199
5201 _displaced_problem->customSetup(exec_type);
5202
5203 for (THREAD_ID tid = 0; tid < n_threads; tid++)
5204 {
5205 _internal_side_indicators.customSetup(exec_type, tid);
5206 _indicators.customSetup(exec_type, tid);
5207 _markers.customSetup(exec_type, tid);
5208 }
5209
5210 std::vector<UserObject *> userobjs;
5211 theWarehouse().query().condition<AttribSystem>("UserObject").queryIntoUnsorted(userobjs);
5212 for (auto obj : userobjs)
5213 obj->customSetup(exec_type);
5214
5215#ifdef MOOSE_KOKKOS_ENABLED
5216 {
5217 std::vector<UserObjectBase *> userobjs;
5218 theWarehouse().query().condition<AttribSystem>("KokkosUserObject").queryIntoUnsorted(userobjs);
5219 for (auto obj : userobjs)
5220 obj->customSetup(exec_type);
5221 }
5222#endif
5223
5224 _app.getOutputWarehouse().customSetup(exec_type);
5225}
void customSetup(const ExecFlagType &exec_type) override
virtual void customSetup(const ExecFlagType &exec_type, THREAD_ID tid=0) const
void customSetup(const ExecFlagType &exec_type)
Calls the setup function for each of the output objects.
virtual void customSetup(const ExecFlagType &exec_type)

Referenced by execute().

◆ declareManagedRestartableDataWithContext()

template<typename T , typename... Args>
Restartable::ManagedValue< T > Restartable::declareManagedRestartableDataWithContext ( const std::string &  data_name,
void *  context,
Args &&...  args 
)
protectedinherited

Declares a piece of "managed" restartable data and initialize it.

Here, "managed" restartable data means that the caller can destruct this data upon destruction of the return value of this method. Therefore, this ManagedValue<T> wrapper should survive after the final calls to dataStore() for it. That is... at the very end.

This is needed for objects whose destruction ordering is important, and enables natural c++ destruction in reverse construction order of the object that declares it.

See delcareRestartableData and declareRestartableDataWithContext for more information.

Definition at line 283 of file Restartable.h.

286{
287 auto & data_ptr =
288 declareRestartableDataHelper<T>(data_name, context, std::forward<Args>(args)...);
289 return Restartable::ManagedValue<T>(data_ptr);
290}
Wrapper class for restartable data that is "managed.
Definition Restartable.h:43

◆ declareRecoverableData()

template<typename T , typename... Args>
T & Restartable::declareRecoverableData ( const std::string &  data_name,
Args &&...  args 
)
protectedinherited

Declare a piece of data as "recoverable" and initialize it.

This means that in the event of a restart this piece of data will be restored back to its previous value.

Note - this data will NOT be restored on Restart!

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)
argsArguments to forward to the constructor of the data

Definition at line 358 of file Restartable.h.

359{
360 const auto full_name = restartableName(data_name);
361
363
364 return declareRestartableDataWithContext<T>(data_name, nullptr, std::forward<Args>(args)...);
365}
std::string restartableName(const std::string &data_name) const
Gets the name of a piece of restartable data given a data name, adding the system name and object nam...
Definition Restartable.C:78
void registerRestartableNameWithFilterOnApp(const std::string &name, Moose::RESTARTABLE_FILTER filter)
Helper function for actually registering the restartable data.
Definition Restartable.C:71

◆ declareRestartableData()

template<typename T , typename... Args>
T & Restartable::declareRestartableData ( const std::string &  data_name,
Args &&...  args 
)
protectedinherited

Declare a piece of data as "restartable" and initialize it.

This means that in the event of a restart this piece of data will be restored back to its previous value.

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)
argsArguments to forward to the constructor of the data

Definition at line 276 of file Restartable.h.

277{
278 return declareRestartableDataWithContext<T>(data_name, nullptr, std::forward<Args>(args)...);
279}

◆ declareRestartableDataHelper()

template<typename T , typename... Args>
RestartableData< T > & Restartable::declareRestartableDataHelper ( const std::string &  data_name,
void *  context,
Args &&...  args 
) const
privateinherited

Helper function for declaring restartable data.

We use this function to reduce code duplication when returning const/nonconst references to the data.

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)
contextContext pointer that will be passed to the load and store functions
argsArguments to forward to the constructor of the data

Definition at line 310 of file Restartable.h.

313{
314 const auto full_name = restartableName(data_name);
315
316 // Here we will create the RestartableData even though we may not use this instance.
317 // If it's already in use, the App will return a reference to the existing instance and we'll
318 // return that one instead. We might refactor this to have the app create the RestartableData
319 // at a later date.
320 auto data_ptr =
321 std::make_unique<RestartableData<T>>(full_name, context, std::forward<Args>(args)...);
322 auto & restartable_data_ref = cast_ref<RestartableData<T> &>(
323 registerRestartableDataOnApp(std::move(data_ptr), _restartable_tid));
324
325 return restartable_data_ref;
326}
const THREAD_ID _restartable_tid
The thread ID for this object.
RestartableDataValue & registerRestartableDataOnApp(std::unique_ptr< RestartableDataValue > data, THREAD_ID tid) const
Helper function for actually registering the restartable data.
Definition Restartable.C:63

◆ declareRestartableDataWithContext()

template<typename T , typename... Args>
T & Restartable::declareRestartableDataWithContext ( const std::string &  data_name,
void *  context,
Args &&...  args 
)
protectedinherited

Declare a piece of data as "restartable" and initialize it.

This means that in the event of a restart this piece of data will be restored back to its previous value.

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)
contextContext pointer that will be passed to the load and store functions
argsArguments to forward to the constructor of the data

Definition at line 301 of file Restartable.h.

304{
305 return declareRestartableDataHelper<T>(data_name, context, std::forward<Args>(args)...).set();
306}

◆ declareRestartableDataWithObjectName()

template<typename T , typename... Args>
T & Restartable::declareRestartableDataWithObjectName ( const std::string &  data_name,
const std::string &  object_name,
Args &&...  args 
)
protectedinherited

Declare a piece of data as "restartable".

This means that in the event of a restart this piece of data will be restored back to its previous value.

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)
object_nameA supplied name for the object that is declaring this data.
argsArguments to forward to the constructor of the data

Definition at line 330 of file Restartable.h.

333{
334 return declareRestartableDataWithObjectNameWithContext<T>(
335 data_name, object_name, nullptr, std::forward<Args>(args)...);
336}

◆ declareRestartableDataWithObjectNameWithContext()

template<typename T , typename... Args>
T & Restartable::declareRestartableDataWithObjectNameWithContext ( const std::string &  data_name,
const std::string &  object_name,
void *  context,
Args &&...  args 
)
protectedinherited

Declare a piece of data as "restartable".

This means that in the event of a restart this piece of data will be restored back to its previous value.

NOTE: This returns a reference! Make sure you store it in a reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)
object_nameA supplied name for the object that is declaring this data.
contextContext pointer that will be passed to the load and store functions
argsArguments to forward to the constructor of the data

Definition at line 340 of file Restartable.h.

344{
345 std::string old_name = _restartable_name;
346
347 _restartable_name = object_name;
348
349 T & value = declareRestartableDataWithContext<T>(data_name, context, std::forward<Args>(args)...);
350
351 _restartable_name = old_name;
352
353 return value;
354}
std::string _restartable_name
The name of the object.
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)

◆ defaultGhosting()

bool SubProblem::defaultGhosting ( )
inlineinherited

Whether or not the user has requested default ghosting ot be on.

Definition at line 144 of file SubProblem.h.

144{ return _default_ghosting; }
bool _default_ghosting
Whether or not to use default libMesh coupling.

Referenced by DisplacedSystem::DisplacedSystem(), and NonlinearSystemBase::NonlinearSystemBase().

◆ determineSolverSystem()

std::pair< bool, unsigned int > FEProblemBase::determineSolverSystem ( const std::string &  var_name,
bool  error_if_not_found = false 
) const
overrideprivatevirtual

Determine what solver system the provided variable name lies in.

Parameters
var_nameThe name of the variable we are doing solver system lookups for
error_if_not_foundWhether to error if the variable name isn't found in any of the solver systems
Returns
A pair in which the first member indicates whether the variable was found in the solver systems and the second member indicates the solver system number in which the variable was found (or an invalid unsigned integer if not found)

Implements SubProblem.

Definition at line 3120 of file FEProblemBase.C.

3122{
3123 auto map_it = _solver_var_to_sys_num.find(var_name);
3124 const bool var_in_sys = map_it != _solver_var_to_sys_num.end();
3125 if (var_in_sys)
3126 mooseAssert(_solver_systems[map_it->second]->hasVariable(var_name) ||
3127 _solver_systems[map_it->second]->hasScalarVariable(var_name),
3128 "If the variable is in our FEProblem solver system map, then it must be in the "
3129 "solver system we expect");
3130 else if (error_if_not_found)
3131 {
3132 if (_aux->hasVariable(var_name) || _aux->hasScalarVariable(var_name))
3133 mooseError("No solver variable named ",
3134 var_name,
3135 " found. Did you specify an auxiliary variable when you meant to specify a "
3136 "solver variable?");
3137 else
3138 mooseError("Unknown variable '",
3139 var_name,
3140 "'. It does not exist in the solver system(s) or auxiliary system");
3141 }
3142
3143 return std::make_pair(var_in_sys, var_in_sys ? map_it->second : libMesh::invalid_uint);
3144}

Referenced by addBoundaryCondition(), addConstraint(), addDamper(), addDGKernel(), addDiracKernel(), addHDGKernel(), addInterfaceKernel(), addKernel(), addNodalKernel(), addScalarKernel(), DisplacedProblem::determineSolverSystem(), and getSystem().

◆ diracKernelInfo()

DiracKernelInfo & SubProblem::diracKernelInfo ( )
virtualinherited

Definition at line 747 of file SubProblem.C.

748{
749 return _dirac_kernel_info;
750}

◆ doingPRefinement()

bool SubProblem::doingPRefinement ( ) const
inherited
Returns
whether we're doing p-refinement

Definition at line 1380 of file SubProblem.C.

1381{
1382 return mesh().doingPRefinement();
1383}
void doingPRefinement(bool doing_p_refinement)
Indicate whether the kind of adaptivity we're doing includes p-refinement.
Definition MooseMesh.h:1502

Referenced by meshChanged().

◆ dt()

virtual Real & FEProblemBase::dt ( ) const
inlinevirtual

◆ dtOld()

virtual Real & FEProblemBase::dtOld ( ) const
inlinevirtual

Definition at line 583 of file FEProblemBase.h.

583{ return _dt_old; }

Referenced by IterationAdaptiveDT::acceptStep().

◆ duplicateVariableCheck()

bool FEProblemBase::duplicateVariableCheck ( const std::string &  var_name,
const libMesh::FEType type,
bool  is_aux,
const std::set< SubdomainID > *const  active_subdomains 
)
protected

Helper to check for duplicate variable names across systems or within a single system.

Definition at line 2972 of file FEProblemBase.C.

2976{
2977 std::set<SubdomainID> subdomainIDs;
2978 if (active_subdomains->size() == 0)
2979 {
2980 const auto subdomains = _mesh.meshSubdomains();
2981 subdomainIDs.insert(subdomains.begin(), subdomains.end());
2982 }
2983 else
2984 subdomainIDs.insert(active_subdomains->begin(), active_subdomains->end());
2985
2986 for (auto & sys : _solver_systems)
2987 {
2988 SystemBase * curr_sys_ptr = sys.get();
2989 SystemBase * other_sys_ptr = _aux.get();
2990 std::string error_prefix = "";
2991 if (is_aux)
2992 {
2993 curr_sys_ptr = _aux.get();
2994 other_sys_ptr = sys.get();
2995 error_prefix = "aux";
2996 }
2997
2998 if (other_sys_ptr->hasVariable(var_name))
2999 mooseError("Cannot have an auxiliary variable and a solver variable with the same name: ",
3000 var_name);
3001
3002 if (curr_sys_ptr->hasVariable(var_name))
3003 {
3004 const libMesh::Variable & var =
3005 curr_sys_ptr->system().variable(curr_sys_ptr->system().variable_number(var_name));
3006
3007 // variable type
3008 if (var.type() != type)
3009 {
3010 const auto stringifyType = [](FEType t)
3011 { return Moose::stringify(t.family) + " of order " + Moose::stringify(t.order); };
3012
3013 mooseError("Mismatching types are specified for ",
3014 error_prefix,
3015 "variable with name '",
3016 var_name,
3017 "': '",
3018 stringifyType(var.type()),
3019 "' and '",
3020 stringifyType(type),
3021 "'");
3022 }
3023
3024 // block-restriction
3025 if (!(active_subdomains->size() == 0 && var.active_subdomains().size() == 0))
3026 {
3027 const auto varActiveSubdomains = var.active_subdomains();
3028 std::set<SubdomainID> varSubdomainIDs;
3029 if (varActiveSubdomains.size() == 0)
3030 {
3031 const auto subdomains = _mesh.meshSubdomains();
3032 varSubdomainIDs.insert(subdomains.begin(), subdomains.end());
3033 }
3034 else
3035 varSubdomainIDs.insert(varActiveSubdomains.begin(), varActiveSubdomains.end());
3036
3037 // Is subdomainIDs a subset of varSubdomainIDs? With this we allow the case that the newly
3038 // requested block restriction is only a subset of the existing one.
3039 const auto isSubset = std::includes(varSubdomainIDs.begin(),
3040 varSubdomainIDs.end(),
3041 subdomainIDs.begin(),
3042 subdomainIDs.end());
3043
3044 if (!isSubset)
3045 {
3046 // helper function: make a string from a set of subdomain ids
3047 const auto stringifySubdomains = [this](std::set<SubdomainID> subdomainIDs)
3048 {
3049 std::stringstream s;
3050 for (auto const i : subdomainIDs)
3051 {
3052 // do we need to insert a comma?
3053 if (s.tellp() != 0)
3054 s << ", ";
3055
3056 // insert subdomain name and id -or- only the id (if no name is given)
3057 const auto subdomainName = _mesh.getSubdomainName(i);
3058 if (subdomainName.empty())
3059 s << i;
3060 else
3061 s << subdomainName << " (" << i << ")";
3062 }
3063 return s.str();
3064 };
3065
3066 const std::string msg = "Mismatching block-restrictions are specified for " +
3067 error_prefix + "variable with name '" + var_name + "': {" +
3068 stringifySubdomains(varSubdomainIDs) + "} and {" +
3069 stringifySubdomains(subdomainIDs) + "}";
3070
3071 mooseError(msg);
3072 }
3073 }
3074
3075 return true;
3076 }
3077 }
3078
3079 return false;
3080}
virtual bool hasVariable(const std::string &var_name) const
Query a system for a variable.
Definition SystemBase.C:850
const Variable & variable(unsigned int var) const
unsigned int variable_number(std::string_view var) const
const std::set< subdomain_id_type > & active_subdomains() const
const FEType & type() const

Referenced by addAuxArrayVariable(), addAuxScalarVariable(), addAuxVariable(), and addVariable().

◆ enabled()

virtual bool MooseObject::enabled ( ) const
inlinevirtualinherited

Return the enabled status of the object.

Reimplemented in EigenKernel.

Definition at line 49 of file MooseObject.h.

49{ return _enabled; }
const bool & _enabled
Reference to the "enable" InputParameters, used by Controls for toggling on/off MooseObjects.
Definition MooseObject.h:71

Referenced by EigenKernel::enabled(), BlockRestrictionDebugOutput::printBlockRestrictionGroups(), BlockRestrictionDebugOutput::printBoundaryRestrictionGroups(), and NodeFaceConstraint::validParams().

◆ errorOnJacobianNonzeroReallocation()

bool FEProblemBase::errorOnJacobianNonzeroReallocation ( ) const
inline

Will return True if the user wants to get an error when a nonzero is reallocated in the Jacobian by PETSc.

Definition at line 2414 of file FEProblemBase.h.

2415 {
2417 }

Referenced by NonlinearSystemBase::computeJacobianBlocks(), NonlinearSystemBase::computeJacobianInternal(), LinearSystem::computeLinearSystemInternal(), NonlinearSystemBase::computeResidualAndJacobianInternal(), and NonlinearSystemBase::constraintJacobians().

◆ errorPrefix()

std::string MooseBase::errorPrefix ( const std::string &  ) const
inlineinherited

Deprecated message prefix; the error type is no longer used.

Definition at line 264 of file MooseBase.h.

264{ return messagePrefix(); }

◆ es()

virtual libMesh::EquationSystems & FEProblemBase::es ( )
inlineoverridevirtual

◆ execMultiApps()

bool FEProblemBase::execMultiApps ( ExecFlagType  type,
bool  auto_advance = true 
)

Execute the MultiApps associated with the ExecFlagType.

Definition at line 6231 of file FEProblemBase.C.

6232{
6233 // Active MultiApps
6234 const std::vector<MooseSharedPointer<MultiApp>> & multi_apps =
6235 _multi_apps[exec_on].getActiveObjects();
6236
6237 // Do anything that needs to be done to Apps before transfers
6238 for (const auto & multi_app : multi_apps)
6239 multi_app->preTransfer(_dt, _time);
6240
6241 // Execute Transfers _to_ MultiApps
6243
6244 // Execute Transfers _beween_ MultiApps for the multiapps that don't execute on this flag
6245 // NOTE: there is usually no need to execute a transfer unless the multiapp providing its
6246 // data also executed. But we need to obey what the user requested for the execution schedule,
6247 // hence the two executions
6249
6250 // Order the multiapps based on their execution group
6251 // Build the ordered multiapp groups
6252 std::map<unsigned int, std::vector<MooseSharedPointer<MultiApp>>> ordered_multi_apps;
6253
6254 for (const auto & multi_app : multi_apps)
6255 ordered_multi_apps[multi_app->getParam<unsigned int>("execution_order_group")].push_back(
6256 multi_app);
6257
6258 // Check that concurrent multiapps will even be used
6259 if (multi_apps.size() && _num_concurrent_multiapps > 1)
6260 {
6261 bool has_concurrent_apps = false;
6262 for (const auto & [group, multi_app_group] : ordered_multi_apps)
6263 if (multi_app_group.size() > 1)
6264 has_concurrent_apps = true;
6265 if (!has_concurrent_apps)
6266 paramInfo(
6267 "num_concurrent_multiapps",
6268 "Due to the specified multiapp execution groups, or differences in execution schedules, "
6269 "concurrent multiapps are not actually used on " +
6270 Moose::stringify(exec_on));
6271 }
6272
6273 // Execute MultiApps
6274 if (multi_apps.size())
6275 {
6276 TIME_SECTION("execMultiApps", 1, "Executing MultiApps", false);
6277
6279 _console << COLOR_CYAN << "\nExecuting MultiApps on " << Moose::stringify(exec_on)
6280 << COLOR_DEFAULT << std::endl;
6281
6282 bool success = true;
6283
6284 for (const auto & [group_id, multi_app_group] : ordered_multi_apps)
6285 {
6286 bool group_success = true;
6287 if (_verbose_multiapps && ordered_multi_apps.size() > 1)
6288 _console << COLOR_CYAN << "\nExecuting MultiApps group " << Moose::stringify(group_id)
6289 << COLOR_DEFAULT << std::endl;
6290
6291 if (_verbose_multiapps && multi_app_group.size() > 1)
6292 {
6293 // Let the user know about concurrent multiapp use (new option: help them set it up)
6294 _console << COLOR_CYAN << "\nConcurrent MultiApps: " << std::endl;
6295 for (const auto & multi_app : multi_app_group)
6296 _console << multi_app->name() << " ";
6297 _console << COLOR_DEFAULT << std::endl;
6298 }
6299
6300 // With concurrent multiapps, the multiapps in a group have each been assigned a disjoint
6301 // subset of the ranks (see partitionConcurrentMultiApps()), so solveStep() does real work
6302 // only on those ranks and returns early on the others. Looping here therefore lets different
6303 // ranks advance different multiapps at the same time - the concurrency comes from the rank
6304 // partition. This notably avoids racing PETSc's process-global state (communicator and
6305 // options database).
6306 for (const auto & multi_app : multi_app_group)
6307 if (!multi_app->solveStep(_dt, _time, auto_advance))
6308 group_success = false;
6309
6310 // Whether to move on to the next group must be a collective decision so that every rank
6311 // leaves the group loop together and stays aligned for the following collectives.
6312 _communicator.min(group_success);
6313
6314 // No need to solve the other groups if this group failed
6315 if (!group_success)
6316 {
6317 success = false;
6318 break;
6319 }
6320
6321 // Execute Transfers _between_ MultiApps after each app executes
6322 for (const auto & multi_app : multi_app_group)
6323 execMultiAppTransfers(exec_on, MultiAppTransfer::BETWEEN_MULTIAPP, multi_app->name());
6324 }
6325
6327 _communicator.min(success);
6328
6329 if (!success)
6330 return false;
6331
6333 _console << COLOR_CYAN << "Finished Executing MultiApps on " << Moose::stringify(exec_on)
6334 << "\n"
6335 << COLOR_DEFAULT << std::endl;
6336 }
6337
6338 // Execute Transfers _from_ MultiApps (to the parent app)
6340
6341 // If we made it here then everything passed
6342 return true;
6343}
void execMultiAppTransfers(ExecFlagType type, Transfer::DIRECTION direction, const MultiAppName &source_app="")
Execute MultiAppTransfers associated with execution flag and direction.
void paramInfo(const std::string &param, Args... args) const
Emits an informational message prefixed with the file and line number of the given param (from the in...
Definition MooseBase.h:471
Base class for all MultiAppTransfer objects.
void min(const T &r, T &o, Request &req) const

Referenced by adaptMesh(), computeJacobianTags(), computeLinearSystemTags(), computeResidualAndJacobian(), computeResidualTags(), Eigenvalue::execute(), SteadyBase::execute(), TransientBase::execute(), MFEMSteady::execute(), EigenExecutionerBase::postExecute(), FixedPointSolve::solve(), FixedPointSolve::solveStep(), and MFEMTransient::takeStep().

◆ execMultiAppTransfers()

void FEProblemBase::execMultiAppTransfers ( ExecFlagType  type,
Transfer::DIRECTION  direction,
const MultiAppName &  source_app = "" 
)

Execute MultiAppTransfers associated with execution flag and direction.

Parameters
typeThe execution flag to execute.
directionThe direction (to or from) to transfer.
source_appThe source application to execute transfers from. Defaults to all sources

Definition at line 5984 of file FEProblemBase.C.

5987{
5988 // Keep track of whether a transfer is actually executed to avoid extraneous console output
5989 bool is_executing_a_transfer = false;
5990 bool to_multiapp = direction == MultiAppTransfer::TO_MULTIAPP;
5991 bool from_multiapp = direction == MultiAppTransfer::FROM_MULTIAPP;
5992
5993 // Build console output
5994 std::string string_direction;
5995 std::string additional_source_info = "";
5996 if (to_multiapp)
5997 string_direction = " To ";
5998 else if (from_multiapp)
5999 string_direction = " From ";
6000 else
6001 string_direction = " Between ";
6002 if (!source_app.empty())
6003 additional_source_info = " from app '" + source_app + "'";
6004
6005 // This lambda only checks the source app, since the exec_type selection is done in the warehouse
6006 auto executeThisTransfer = [this, &direction, &source_app, &type](auto & transfer)
6007 {
6008 mooseAssert(transfer->getExecuteOnEnum().contains(type), "Should execute on this schedule");
6009 // no restriction / ordering groups on transfers from parent to child at this time
6010 if (direction != MultiAppTransfer::BETWEEN_MULTIAPP)
6011 return true;
6012 // on sibling transfers, we can delay until the app has been executed if the transfer is set
6013 // that way.
6014 if (transfer->getFromName() == source_app && transfer->executeAfterSiblingSourceApp())
6015 {
6016 libmesh_ignore(this);
6017 mooseAssert(this->getMultiApp(transfer->getFromName())->getExecuteOnEnum().contains(type),
6018 "from_multiapp should also execute on this schedule");
6019 }
6020 // Execute if:
6021 // - transfer is set execute before from_multiapp, and we are calling this before source apps
6022 // - from_multiapp app is not executing on this execute_on
6023 // - from_multiapp just executed (set to source app)
6024 if ((source_app.empty() && (!transfer->executeAfterSiblingSourceApp() ||
6025 !transfer->getFromMultiApp()->getExecuteOnEnum().contains(type))) ||
6026 (transfer->getFromName() == source_app && transfer->executeAfterSiblingSourceApp()))
6027 return true;
6028 return false;
6029 };
6030
6032 : from_multiapp ? _from_multi_app_transfers[type]
6034
6035 if (wh.hasActiveObjects())
6036 {
6037 TIME_SECTION("execMultiAppTransfers", 1, "Executing Transfers");
6038
6039 const auto & transfers = wh.getActiveObjects();
6040
6042 {
6044 {"Name", "Type", "From", "To"});
6045
6046 // Build Table of Transfer Info
6047 for (const auto & transfer : transfers)
6048 {
6049 auto multiapp_transfer = dynamic_cast<MultiAppTransfer *>(transfer.get());
6050
6051 // Don't add transfer to table if it won't execute
6052 if (!executeThisTransfer(multiapp_transfer))
6053 continue;
6054
6055 is_executing_a_transfer = true;
6056 table.addRow(multiapp_transfer->name(),
6057 multiapp_transfer->type(),
6058 multiapp_transfer->getFromName(),
6059 multiapp_transfer->getToName());
6060 }
6061
6062 // Print it
6063 if (is_executing_a_transfer)
6064 {
6065 _console << COLOR_CYAN << "\nTransfers on " << Moose::stringify(type) << string_direction
6066 << "MultiApps" << additional_source_info << COLOR_DEFAULT << ":" << std::endl;
6067
6068 table.print(_console);
6069 }
6070 }
6071
6072 for (const auto & transfer : transfers)
6073 {
6074 auto multiapp_transfer = libMesh::cast_ptr<MultiAppTransfer *>(transfer.get());
6075 if (!executeThisTransfer(multiapp_transfer))
6076 continue;
6077
6078 transfer->setCurrentDirection(direction);
6079 transfer->execute();
6080 }
6081
6083
6084 if (_verbose_multiapps && is_executing_a_transfer)
6085 _console << COLOR_CYAN << "Transfers on " << Moose::stringify(type) << " Are Finished\n"
6086 << COLOR_DEFAULT << std::endl;
6087 }
6088
6089 if (_multi_apps[type].getActiveObjects().size() && !is_executing_a_transfer && _verbose_multiapps)
6090 _console << COLOR_CYAN << "\nNo Transfers on " << Moose::stringify(type) << string_direction
6091 << "MultiApps\n"
6092 << COLOR_DEFAULT << std::endl;
6093}
A class for "pretty printing" a table of data.
void libmesh_ignore(const Args &...)

Referenced by execMultiApps().

◆ execute()

void FEProblemBase::execute ( const ExecFlagType exec_type)
virtual

Convenience function for performing execution of MOOSE systems.

Reimplemented in DumpObjectsProblem, MFEMProblem, and EigenProblem.

Definition at line 5228 of file FEProblemBase.C.

5229{
5230 // Set the current flag
5231 setCurrentExecuteOnFlag(exec_type);
5232
5233 if (exec_type != EXEC_INITIAL)
5234 executeControls(exec_type);
5235
5236 // intentially call this after executing controls because the setups may rely on the controls
5237 // FIXME: we skip the following flags because they have dedicated setup functions in
5238 // SetupInterface and it may not be appropriate to call them here.
5239 if (!(exec_type == EXEC_INITIAL || exec_type == EXEC_TIMESTEP_BEGIN ||
5240 exec_type == EXEC_SUBDOMAIN || exec_type == EXEC_NONLINEAR || exec_type == EXEC_LINEAR))
5241 customSetup(exec_type);
5242
5243 executeSamplers(exec_type);
5244
5245 // Pre-aux UserObjects
5247
5248 // Systems (includes system time derivative and aux kernel calculations)
5249 computeSystems(exec_type);
5250 // With the auxiliary system solution computed, sync the displaced problem auxiliary solution
5251 // before computation of post-aux user objects. The undisplaced auxiliary system current local
5252 // solution is updated (via System::update) within the AuxiliarySystem class's variable
5253 // computation methods (e.g. computeElementalVarsHelper, computeNodalVarsHelper), so it is safe to
5254 // use it here
5256 _displaced_problem->syncAuxSolution(*getAuxiliarySystem().currentSolution());
5257
5258 // Post-aux UserObjects
5260
5261 // Return the current flag to None
5263
5265 {
5266 // we will only check aux variables and postprocessors
5267 // checking more reporter data can be added in the future if needed
5268 std::unique_ptr<NumericVector<Number>> x = _aux->currentSolution()->clone();
5269 DenseVector<Real> pp_values = getReporterData().getAllRealReporterValues();
5270
5271 // call THIS execute one more time for checking the possible states
5273 FEProblemBase::execute(exec_type);
5274 _checking_uo_aux_state = false;
5275
5276 const Real check_tol = 1e-8;
5277
5278 const Real xnorm = x->l2_norm();
5279 *x -= *_aux->currentSolution();
5280 if (x->l2_norm() > check_tol * xnorm)
5281 {
5282 const auto & sys = _aux->system();
5283 const unsigned int n_vars = sys.n_vars();
5284 std::multimap<Real, std::string, std::greater<Real>> ordered_map;
5285 for (const auto i : make_range(n_vars))
5286 {
5287 const Real vnorm = sys.calculate_norm(*x, i, DISCRETE_L2);
5288 ordered_map.emplace(vnorm, sys.variable_name(i));
5289 }
5290
5291 std::ostringstream oss;
5292 for (const auto & [error_norm, var_name] : ordered_map)
5293 oss << " {" << var_name << ", " << error_norm << "},\n";
5294
5295 mooseError("Aux kernels, user objects appear to have states for aux variables on ",
5296 exec_type,
5297 ".\nVariable error norms in descending order:\n",
5298 oss.str());
5299 }
5300
5301 const DenseVector<Real> new_pp_values = getReporterData().getAllRealReporterValues();
5302 if (pp_values.size() != new_pp_values.size())
5303 mooseError("Second execution for uo/aux state check should not change the number of "
5304 "real reporter values");
5305
5306 const Real ppnorm = pp_values.l2_norm();
5307 pp_values -= new_pp_values;
5308 if (pp_values.l2_norm() > check_tol * ppnorm)
5309 {
5310 const auto pp_names = getReporterData().getAllRealReporterFullNames();
5311 std::multimap<Real, std::string, std::greater<Real>> ordered_map;
5312 for (const auto i : index_range(pp_names))
5313 ordered_map.emplace(std::abs(pp_values(i)), pp_names[i]);
5314
5315 std::ostringstream oss;
5316 for (const auto & [error_norm, pp_name] : ordered_map)
5317 oss << " {" << pp_name << ", " << error_norm << "},\n";
5318
5319 mooseError("Aux kernels, user objects appear to have states for real reporter values on ",
5320 exec_type,
5321 ".\nErrors of real reporter values in descending order:\n",
5322 oss.str());
5323 }
5324 }
5325}
const ExecFlagType EXEC_SUBDOMAIN
Definition Moose.C:53
const ExecFlagType EXEC_TIMESTEP_BEGIN
Definition Moose.C:38
unsigned int n_vars
AuxiliarySystem & getAuxiliarySystem()
const ReporterData & getReporterData() const
Provides const access the ReporterData object.
void executeSamplers(const ExecFlagType &exec_type)
Performs setup and execute calls for Sampler objects.
void setCurrentExecuteOnFlag(const ExecFlagType &)
virtual void execute(const ExecFlagType &exec_type)
Convenience function for performing execution of MOOSE systems.
std::vector< std::string > getAllRealReporterFullNames() const
Get full names of all real reporter values Note: For a postprocessor, the full name is the postproces...
DenseVector< Real > getAllRealReporterValues() const
Get all real reporter values including postprocessor and vector postprocessor values into a dense vec...
MetaPhysicL::DualNumber< V, D, asd > abs(const MetaPhysicL::DualNumber< V, D, asd > &a)
Definition EigenADReal.h:50

Referenced by EigenExecutionerBase::chebyshev(), FixedPointSolve::examineFixedPointConvergence(), SteadyBase::execute(), TransientBase::execute(), execute(), MFEMProblem::execute(), EigenProblem::execute(), EigenExecutionerBase::init(), NonlinearEigen::init(), Steady::init(), TransientBase::init(), EigenExecutionerBase::makeBXConsistent(), EigenExecutionerBase::normalizeSolution(), Moose::PetscSupport::petscLinearConverged(), Moose::PetscSupport::petscNonlinearConverged(), EigenExecutionerBase::postExecute(), FEProblemSolve::solve(), FixedPointSolve::solve(), FixedPointSolve::solveStep(), InversePowerMethod::takeStep(), NonlinearEigen::takeStep(), and MFEMTransient::takeStep().

◆ executeAllObjects()

void FEProblemBase::executeAllObjects ( const ExecFlagType exec_type)
virtual

Definition at line 5173 of file FEProblemBase.C.

5174{
5175}

Referenced by Executor::exec().

◆ executeControls()

void FEProblemBase::executeControls ( const ExecFlagType exec_type)

Performs setup and execute calls for Control objects.

Definition at line 5669 of file FEProblemBase.C.

5670{
5671 if (_control_warehouse[exec_type].hasActiveObjects())
5672 {
5673 TIME_SECTION("executeControls", 1, "Executing Controls");
5674
5676
5677 auto controls_wh = _control_warehouse[exec_type];
5678 // Add all of the dependencies into the resolver and sort them
5679 for (const auto & it : controls_wh.getActiveObjects())
5680 {
5681 // Make sure an item with no dependencies comes out too!
5682 resolver.addItem(it);
5683
5684 std::vector<std::string> & dependent_controls = it->getDependencies();
5685 for (const auto & depend_name : dependent_controls)
5686 {
5687 if (controls_wh.hasActiveObject(depend_name))
5688 {
5689 auto dep_control = controls_wh.getActiveObject(depend_name);
5690 resolver.addEdge(dep_control, it);
5691 }
5692 else
5693 mooseError("The Control \"",
5694 depend_name,
5695 "\" was not created, did you make a "
5696 "spelling mistake or forget to include it "
5697 "in your input file?");
5698 }
5699 }
5700
5701 const auto & ordered_controls = resolver.getSortedValues();
5702
5703 if (!ordered_controls.empty())
5704 {
5705 // already called by initialSetup when exec_type == EXEC_INITIAL
5706 if (exec_type != EXEC_INITIAL)
5707 _control_warehouse.setup(exec_type);
5708
5709 // Run the controls in the proper order
5710 for (const auto & control : ordered_controls)
5711 control->execute();
5712 }
5713 }
5714}
Class that represents the dependecy as a graph.
void addItem(const T &value)
Add an independent item to the set.
const std::vector< T > & getSortedValues()
This function also returns dependency resolved values but with a simpler single vector interface.
void addEdge(const T &a, const T &b)
Add an edge between nodes 'a' and 'b'.
void setup(const ExecFlagType &exec_flag, THREAD_ID tid=0) const

Referenced by computeJacobianTags(), computeLinearSystemTags(), computeResidualAndJacobian(), computeResidualTags(), and execute().

◆ executeSamplers()

void FEProblemBase::executeSamplers ( const ExecFlagType exec_type)

Performs setup and execute calls for Sampler objects.

Definition at line 5717 of file FEProblemBase.C.

5718{
5719 // TODO: This should be done in a threaded loop, but this should be super quick so for now
5720 // do a serial loop.
5721 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); ++tid)
5722 {
5723 std::vector<Sampler *> objects;
5724 theWarehouse()
5725 .query()
5726 .condition<AttribSystem>("Sampler")
5727 .condition<AttribThread>(tid)
5728 .condition<AttribExecOns>(exec_type)
5729 .queryInto(objects);
5730
5731 if (!objects.empty())
5732 {
5733 TIME_SECTION("executeSamplers", 1, "Executing Samplers");
5734 FEProblemBase::objectSetupHelper<Sampler>(objects, exec_type);
5735 FEProblemBase::objectExecuteHelper<Sampler>(objects);
5736 }
5737 }
5738}

Referenced by execute().

◆ feBackend()

virtual Moose::FEBackend FEProblemBase::feBackend ( ) const
inlinevirtual

◆ finalizeMultiApps()

void FEProblemBase::finalizeMultiApps ( )

Definition at line 6346 of file FEProblemBase.C.

6347{
6348 const auto & multi_apps = _multi_apps.getActiveObjects();
6349
6350 for (const auto & multi_app : multi_apps)
6351 multi_app->finalize();
6352}

Referenced by Eigenvalue::execute(), SteadyBase::execute(), TransientBase::execute(), and MFEMSteady::execute().

◆ finalNonlinearResidual()

Real FEProblemBase::finalNonlinearResidual ( const unsigned int  nl_sys_num) const
overridevirtual

Reimplemented from SubProblem.

Definition at line 7454 of file FEProblemBase.C.

7455{
7456 return _nl[nl_sys_num]->finalNonlinearResidual();
7457}

◆ finishMultiAppStep()

void FEProblemBase::finishMultiAppStep ( ExecFlagType  type,
bool  recurse_through_multiapp_levels = false 
)

Finish the MultiApp time step (endStep, postStep) associated with the ExecFlagType.

Optionally recurse through all multi-app levels

Definition at line 6374 of file FEProblemBase.C.

6375{
6376 const auto & multi_apps = _multi_apps[type].getActiveObjects();
6377
6378 if (multi_apps.size())
6379 {
6381 _console << COLOR_CYAN << "\nAdvancing MultiApps on " << type.name() << COLOR_DEFAULT
6382 << std::endl;
6383
6384 for (const auto & multi_app : multi_apps)
6385 multi_app->finishStep(recurse_through_multiapp_levels);
6386
6388
6390 _console << COLOR_CYAN << "Finished Advancing MultiApps on " << type.name() << "\n"
6391 << COLOR_DEFAULT << std::endl;
6392 }
6393}

Referenced by advanceMultiApps(), TransientBase::execute(), TransientMultiApp::finishStep(), and TransientBase::incrementStepOrReject().

◆ flagInvalidSolutionInternal()

template<bool warning>
template void SolutionInvalidInterface::flagInvalidSolutionInternal< false > ( const InvalidSolutionID  invalid_solution_id) const
protectedinherited

Set solution invalid mark for the given solution ID.

Definition at line 41 of file SolutionInvalidInterface.C.

43{
44 mooseAssert(
45 warning == moose::internal::getSolutionInvalidityRegistry().item(invalid_solution_id).warning,
46 "Inconsistent warning flag");
47 auto & solution_invalidity = _si_moose_base.getMooseApp().solutionInvalidity();
48 if constexpr (!warning)
50 solution_invalidity.printDebug(invalid_solution_id);
51 return solution_invalidity.flagInvalidSolutionInternal(invalid_solution_id);
52}
bool immediatelyPrintInvalidSolution() const
Whether or not the solution invalid warnings are printed out immediately.
const FEProblemBase * _si_problem
A pointer to FEProblem base.
const MooseBase & _si_moose_base
The MooseBase that owns this interface.
void printDebug(InvalidSolutionID _invalid_solution_id) const
Immediately print the section and message for debug purpose.
SolutionInvalidityRegistry & getSolutionInvalidityRegistry()
Get the global SolutionInvalidityRegistry singleton.

◆ forceOutput()

void FEProblemBase::forceOutput ( )

Indicates that the next call to outputStep should be forced.

This is needed by the MultiApp system, if forceOutput is called the next call to outputStep, regardless of the type supplied to the call, will be executed with EXEC_FORCED.

Forced output will NOT override the allowOutput flag.

Definition at line 7597 of file FEProblemBase.C.

7598{
7600}
void forceOutput()
Indicates that the next call to outputStep should be forced This is private, users should utilize FEP...

Referenced by TransientMultiApp::solveStep().

◆ fvBCsIntegrityCheck() [1/2]

bool FEProblemBase::fvBCsIntegrityCheck ( ) const
inline
Returns
whether to perform a boundary condition integrity check for finite volume

Definition at line 2804 of file FEProblemBase.h.

2804{ return _fv_bcs_integrity_check; }

◆ fvBCsIntegrityCheck() [2/2]

void FEProblemBase::fvBCsIntegrityCheck ( bool  fv_bcs_integrity_check)
inline
Parameters
fv_bcs_integrity_checkWhether to perform a boundary condition integrity check for finite volume

Definition at line 3917 of file FEProblemBase.h.

3918{
3920 // the user has requested that we don't check integrity so we will honor that
3921 return;
3922
3923 _fv_bcs_integrity_check = fv_bcs_integrity_check;
3924}

◆ geomSearchData()

virtual GeometricSearchData & FEProblemBase::geomSearchData ( )
inlineoverridevirtual

◆ getActiveElementalMooseVariables()

const std::set< MooseVariableFEBase * > & SubProblem::getActiveElementalMooseVariables ( const THREAD_ID  tid) const
virtualinherited

Get the MOOSE variables to be reinited on each element.

Parameters
tidThe thread id

Definition at line 453 of file SubProblem.C.

454{
456}
std::vector< std::set< MooseVariableFieldBase * > > _active_elemental_moose_variables
This is the set of MooseVariableFieldBase that will actually get reinited by a call to reinit(elem)

Referenced by SystemBase::prepare(), SystemBase::prepareFace(), prepareMaterials(), and SystemBase::reinitElem().

◆ getActiveFEVariableCoupleableMatrixTags()

const std::set< TagID > & SubProblem::getActiveFEVariableCoupleableMatrixTags ( const THREAD_ID  tid) const
inherited

Definition at line 389 of file SubProblem.C.

390{
392}
std::vector< std::set< TagID > > _active_fe_var_coupleable_matrix_tags

◆ getActiveFEVariableCoupleableVectorTags()

const std::set< TagID > & SubProblem::getActiveFEVariableCoupleableVectorTags ( const THREAD_ID  tid) const
inherited

Definition at line 395 of file SubProblem.C.

396{
398}
std::vector< std::set< TagID > > _active_fe_var_coupleable_vector_tags

Referenced by MultiAppVariableValueSamplePostprocessorTransfer::execute().

◆ getActiveScalarVariableCoupleableMatrixTags()

const std::set< TagID > & SubProblem::getActiveScalarVariableCoupleableMatrixTags ( const THREAD_ID  tid) const
inherited

Definition at line 430 of file SubProblem.C.

431{
433}
std::vector< std::set< TagID > > _active_sc_var_coupleable_matrix_tags

Referenced by MooseVariableScalar::reinit().

◆ getActiveScalarVariableCoupleableVectorTags()

const std::set< TagID > & SubProblem::getActiveScalarVariableCoupleableVectorTags ( const THREAD_ID  tid) const
inherited

Definition at line 436 of file SubProblem.C.

437{
439}
std::vector< std::set< TagID > > _active_sc_var_coupleable_vector_tags

◆ getActualFieldVariable()

MooseVariableFieldBase & FEProblemBase::getActualFieldVariable ( const THREAD_ID  tid,
const std::string &  var_name 
)
overridevirtual

Returns the variable reference for requested MooseVariableField which may be in any system.

Implements SubProblem.

Definition at line 6577 of file FEProblemBase.C.

6578{
6579 for (auto & sys : _solver_systems)
6580 if (sys->hasVariable(var_name))
6581 return sys->getActualFieldVariable<Real>(tid, var_name);
6582 if (_aux->hasVariable(var_name))
6583 return _aux->getActualFieldVariable<Real>(tid, var_name);
6584
6585 mooseError("Unknown variable " + var_name);
6586}
MooseVariableFieldBase & getActualFieldVariable(const THREAD_ID tid, const std::string &var_name) override
Returns the variable reference for requested MooseVariableField which may be in any system.

Referenced by MultiAppVariableValueSampleTransfer::execute().

◆ getArrayVariable()

ArrayMooseVariable & FEProblemBase::getArrayVariable ( const THREAD_ID  tid,
const std::string &  var_name 
)
overridevirtual

Returns the variable reference for requested ArrayMooseVariable which may be in any system.

Implements SubProblem.

Definition at line 6601 of file FEProblemBase.C.

6602{
6603 for (auto & sys : _solver_systems)
6604 if (sys->hasVariable(var_name))
6605 return sys->getFieldVariable<RealEigenVector>(tid, var_name);
6606 if (_aux->hasVariable(var_name))
6607 return _aux->getFieldVariable<RealEigenVector>(tid, var_name);
6608
6609 mooseError("Unknown variable " + var_name);
6610}
Eigen::Matrix< Real, Eigen::Dynamic, 1 > RealEigenVector
Definition MooseTypes.h:147

Referenced by CoupleableMooseVariableDependencyIntermediateInterface::coupledArrayValueByName(), MultiAppVariableValueSamplePostprocessorTransfer::execute(), and PointwiseRenormalizeVector::PointwiseRenormalizeVector().

◆ getAuxiliarySystem()

AuxiliarySystem & FEProblemBase::getAuxiliarySystem ( )
inline

Definition at line 1077 of file FEProblemBase.h.

1077{ return *_aux; }

Referenced by Adaptivity::adaptMesh(), DisplacedProblem::addTimeIntegrator(), ElementSubdomainModifierBase::applyIC(), TransientMultiApp::appTransferVector(), MooseMesh::cacheFaceInfoVariableOwnership(), MooseMesh::cacheFVElementalDoFs(), PNGOutput::calculateRescalingValues(), NonlinearSystemBase::computeJacobianInternal(), NonlinearSystemBase::computeNodalBCsJacobian(), NonlinearSystemBase::computeNodalBCsResidual(), NonlinearSystemBase::computeResidualTags(), NonlinearSystemBase::constraintResiduals(), DisplacedProblem::DisplacedProblem(), EigenExecutionerBase::EigenExecutionerBase(), execute(), ActivateElementsUserObjectBase::initSolutions(), EigenExecutionerBase::inversePowerIteration(), PNGOutput::makeMeshFunc(), MoveNodesByParsedExpressionModifier::MoveNodesByParsedExpressionModifier(), MultiAppVariableValueSamplePostprocessorTransfer::MultiAppVariableValueSamplePostprocessorTransfer(), ConsoleUtils::outputAuxiliarySystemInformation(), BlockRestrictionDebugOutput::printBlockRestrictionGroups(), BlockRestrictionDebugOutput::printBlockRestrictionMap(), BlockRestrictionDebugOutput::printBoundaryRestrictionGroups(), MultiApp::restore(), NonlinearSystemBase::setConstraintSecondaryValues(), TransientMultiApp::setupApp(), TransientMultiApp::solveStep(), AB2PredictorCorrector::step(), DisplacedProblem::syncSolutions(), Coupleable::writableCoupledValue(), and MoveNodesByParsedExpressionModifier::writeOutputs().

◆ getAxisymmetricRadialCoord()

unsigned int SubProblem::getAxisymmetricRadialCoord ( ) const
inherited

Returns the desired radial direction for RZ coordinate transformation.

Returns
The coordinate direction for the radial direction

Definition at line 795 of file SubProblem.C.

796{
798}
unsigned int getAxisymmetricRadialCoord() const
Returns the desired radial direction for RZ coordinate transformation.
Definition MooseMesh.C:4378

◆ getBase()

const std::string & MooseBase::getBase ( ) const
inlineinherited
Returns
The registered base for this object (set via InputParameters::registerBase())

Definition at line 147 of file MooseBase.h.

147{ return _pars.getBase(); }

Referenced by MooseBase::uniqueParameterName().

◆ getBndMaterialPropertyStorage()

const MaterialPropertyStorage & FEProblemBase::getBndMaterialPropertyStorage ( )
inline

Definition at line 2098 of file FEProblemBase.h.

2098{ return _bnd_material_props; }

◆ getCheckedPointerParam()

template<typename T >
T MooseBase::getCheckedPointerParam ( const std::string &  name,
const std::string &  error_string = "" 
) const
inherited

Verifies that the requested parameter exists and is not NULL and returns it to the caller.

The template parameter must be a pointer or an error will be thrown.

Definition at line 450 of file MooseBase.h.

451{
452 return _pars.getCheckedPointerParam<T>(name, error_string);
453}
T getCheckedPointerParam(const std::string &name, const std::string &error_string="") const
Verifies that the requested parameter exists and is not NULL and returns it to the caller.

◆ getConsumedPropertyMap()

const std::map< MooseObjectName, std::set< std::string > > & SubProblem::getConsumedPropertyMap ( ) const
inherited

Return the map that tracks the object with consumed material properties.

Definition at line 741 of file SubProblem.C.

742{
744}

Referenced by MaterialPropertyDebugOutput::output().

◆ getControlWarehouse()

ExecuteMooseObjectWarehouse< Control > & FEProblemBase::getControlWarehouse ( )
inline

Reference to the control logic warehouse.

Definition at line 2596 of file FEProblemBase.h.

2596{ return _control_warehouse; }

Referenced by LibtorchControlValuePostprocessor::initialSetup(), and LibtorchArtificialNeuralNetParameters::initialSetup().

◆ getConvergence()

Convergence & FEProblemBase::getConvergence ( const std::string &  name,
const THREAD_ID  tid = 0 
) const
virtual

◆ getConvergenceObjects()

const std::vector< std::shared_ptr< Convergence > > & FEProblemBase::getConvergenceObjects ( const THREAD_ID  tid = 0) const
virtual

Gets the Convergence objects.

Definition at line 2845 of file FEProblemBase.C.

2846{
2847 return _convergences.getActiveObjects(tid);
2848}

◆ getCoordSystem()

Moose::CoordinateSystemType SubProblem::getCoordSystem ( SubdomainID  sid) const
inherited

Definition at line 1297 of file SubProblem.C.

1298{
1299 return mesh().getCoordSystem(sid);
1300}
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
Get the coordinate system type, e.g.
Definition MooseMesh.C:4259

Referenced by BlockRestrictable::getBlockCoordSystem(), MultiApp::getBoundingBox(), Assembly::reinitLowerDElem(), Assembly::reinitNeighborLowerDElem(), and Assembly::setCoordinateTransformation().

◆ getCurrentAlgebraicBndNodeRange()

const ConstBndNodeRange & FEProblemBase::getCurrentAlgebraicBndNodeRange ( )

◆ getCurrentAlgebraicElementRange()

const ConstElemRange & FEProblemBase::getCurrentAlgebraicElementRange ( )

These are the element and nodes that contribute to the jacobian and residual for this local processor.

getCurrentAlgebraicElementRange() returns the element range that contributes to the system getCurrentAlgebraicNodeRange() returns the node range that contributes to the system getCurrentAlgebraicBndNodeRange returns the boundary node ranges that contributes to the system

Definition at line 10364 of file FEProblemBase.C.

10365{
10368
10370}
std::unique_ptr< libMesh::ConstElemRange > _current_algebraic_elem_range
const libMesh::ConstElemRange * getActiveLocalElementRange()
Return pointers to range objects for various types of ranges (local nodes, boundary elems,...
Definition MooseMesh.C:1247

Referenced by NonlinearSystemBase::computeDamping(), computeIndicators(), NonlinearSystemBase::computeJacobianBlocks(), NonlinearSystemBase::computeJacobianInternal(), computeMarkers(), NonlinearSystemBase::computeResidualAndJacobianInternal(), NonlinearSystemBase::computeResidualInternal(), NonlinearSystemBase::computeScaling(), computeUserObjectsInternal(), initialSetup(), projectSolution(), and updateMaxQps().

◆ getCurrentAlgebraicNodeRange()

const ConstNodeRange & FEProblemBase::getCurrentAlgebraicNodeRange ( )

Definition at line 10372 of file FEProblemBase.C.

10373{
10375 return *_mesh.getLocalNodeRange();
10376
10378}
std::unique_ptr< libMesh::ConstNodeRange > _current_algebraic_node_range
libMesh::ConstNodeRange * getLocalNodeRange()
Definition MooseMesh.C:1276

Referenced by NonlinearSystemBase::computeDamping(), NonlinearSystemBase::computeJacobianInternal(), NonlinearSystemBase::computeResidualInternal(), and computeUserObjectsInternal().

◆ getCurrentExecuteOnFlag()

const ExecFlagType & FEProblemBase::getCurrentExecuteOnFlag ( ) const

Return/set the current execution flag.

Returns EXEC_NONE when not being executed.

See also
FEProblemBase::execute

Definition at line 5161 of file FEProblemBase.C.

5162{
5164}

Referenced by MultiAppGeneralFieldTransfer::acceptPointInOriginMesh(), MultiAppTransfer::checkParentAppUserObjectExecuteOn(), MultiAppGeneralFieldTransfer::closestToPosition(), MultiAppGeneralFieldKDTreeTransferBase::computeNumSources(), NearestPositionsDivision::divisionIndex(), CartesianGridDivision::divisionIndex(), CylindricalGridDivision::divisionIndex(), NearestPositionsDivision::divisionIndex(), SphericalGridDivision::divisionIndex(), PIDTransientControl::execute(), Terminator::execute(), PositionsFunctorValueSampler::execute(), Control::getControllableParameterByName(), Material::getMaterialByName(), MultiAppGeneralFieldKDTreeTransferBase::getNumDivisions(), NumPositions::getValue(), DistributedPositions::initialize(), ParsedDownSelectionPositions::initialize(), TransformedPositions::initialize(), PositionsFunctorValueSampler::initialize(), MultiAppGeneralFieldTransfer::locatePointReceivers(), ComputeUserObjectsThread::printBlockExecutionInformation(), ComputeFVInitialConditionThread::printGeneralExecutionInformation(), ComputeInitialConditionThread::printGeneralExecutionInformation(), ComputeLinearFVElementalThread::printGeneralExecutionInformation(), ComputeLinearFVFaceThread::printGeneralExecutionInformation(), ComputeDiracThread::printGeneralExecutionInformation(), ComputeElemDampingThread::printGeneralExecutionInformation(), ComputeIndicatorThread::printGeneralExecutionInformation(), ComputeMarkerThread::printGeneralExecutionInformation(), ComputeNodalDampingThread::printGeneralExecutionInformation(), ComputeNodalKernelBCJacobiansThread::printGeneralExecutionInformation(), ComputeNodalKernelBcsThread::printGeneralExecutionInformation(), ComputeNodalKernelJacobiansThread::printGeneralExecutionInformation(), ComputeNodalKernelsThread::printGeneralExecutionInformation(), ComputeNodalUserObjectsThread::printGeneralExecutionInformation(), ComputeUserObjectsThread::printGeneralExecutionInformation(), NonlinearThread::printGeneralExecutionInformation(), ComputeThreadedGeneralUserObjectsThread::printGeneralExecutionInformation(), MultiApp::restore(), SolutionInvalidityOutput::shouldOutput(), ElementReporter::shouldStore(), GeneralReporter::shouldStore(), and NodalReporter::shouldStore().

◆ getCurrentICState()

unsigned short FEProblemBase::getCurrentICState ( )

Retrieves the current initial condition state.

Returns
current initial condition state

Definition at line 10423 of file FEProblemBase.C.

10424{
10425 return _current_ic_state;
10426}

Referenced by ComputeInitialConditionThread::operator()().

◆ getDataFileName()

std::string DataFileInterface::getDataFileName ( const std::string &  param) const
inherited

Deprecated method.

The data file paths are now automatically set within the InputParameters object, so using getParam<DataFileName>("param_name") is now sufficient.

Definition at line 21 of file DataFileInterface.C.

22{
23 _parent.mooseDeprecated("getDataFileName() is deprecated. The file path is now directly set "
24 "within the InputParameters.\nUse getParam<DataFileName>(\"",
25 param,
26 "\") instead.");
27 return _parent.getParam<DataFileName>(param);
28}
const ParallelParamObject & _parent
void mooseDeprecated(Args &&... args) const
Emits a deprecation warning prefixed with the object name and type, and a stack trace.
Definition MooseBase.h:317

◆ getDataFileNameByName()

std::string DataFileInterface::getDataFileNameByName ( const std::string &  relative_path) const
inherited

Deprecated method.

Use getDataFilePath() instead.

Definition at line 31 of file DataFileInterface.C.

32{
33 _parent.mooseDeprecated("getDataFileNameByName() is deprecated. Use getDataFilePath(\"",
34 relative_path,
35 "\") instead.");
36 return getDataFilePath(relative_path);
37}
std::string getDataFilePath(const std::string &relative_path) const
Returns the path of a data file for a given relative file path.

◆ getDataFilePath()

std::string DataFileInterface::getDataFilePath ( const std::string &  relative_path) const
inherited

Returns the path of a data file for a given relative file path.

This can be used for hardcoded datafile names and will search the same locations as getDataFileName

Definition at line 40 of file DataFileInterface.C.

41{
42 // This should only ever be used with relative paths. There is no point to
43 // use this search path with an absolute path.
44 if (std::filesystem::path(relative_path).is_absolute())
45 _parent.mooseWarning("While using getDataFilePath(\"",
46 relative_path,
47 "\"): This API should not be used for absolute paths.");
48
49 // This will search the data paths for this relative path
50 std::optional<std::string> error;
52 {
53 // Throw on error so that if getPath() fails, we can throw an error
54 // with the context of _parent.mooseError()
55 Moose::ScopedThrowOnError scoped_throw_on_error;
56
57 try
58 {
59 found_path = Moose::DataFileUtils::getPath(relative_path);
60 }
61 catch (std::exception & e)
62 {
63 error = e.what();
64 }
65 }
66
67 if (error)
68 _parent.mooseError(*error);
69
70 mooseAssert(found_path.context == Moose::DataFileUtils::Context::DATA,
71 "Should only ever obtain data");
72 mooseAssert(found_path.data_name, "Should be set");
73
74 const std::string msg =
75 "Using data file '" + found_path.path + "' from " + *found_path.data_name + " data";
76 _parent.mooseInfo(msg);
77
78 return found_path.path;
79}
void mooseWarning(Args &&... args) const
Emits a warning prefixed with object name and type.
Definition MooseBase.h:299
void mooseInfo(Args &&... args) const
Definition MooseBase.h:334
Scoped helper for setting Moose::_throw_on_error during this scope.
Definition Moose.h:308
@ DATA
From installed/in-tree data.
Path getPath(std::string path, const GetPathOptions &options={})
Get the data path for a given path, searching the registered data.
Representation of a data file path.
std::optional< std::string > data_name
The name of the data registry the file came from (with context == DATA)
Context context
Context for the file (where it came from)

Referenced by DataFileInterface::getDataFileNameByName().

◆ getDiracElements()

void FEProblemBase::getDiracElements ( std::set< const Elem * > &  elems)
overridevirtual

Fills "elems" with the elements that should be looped over for Dirac Kernels.

Implements SubProblem.

Definition at line 2648 of file FEProblemBase.C.

2649{
2650 // First add in the undisplaced elements
2652
2654 {
2655 std::set<const Elem *> displaced_elements;
2656 _displaced_problem->getDiracElements(displaced_elements);
2657
2658 { // Use the ids from the displaced elements to get the undisplaced elements
2659 // and add them to the list
2660 for (const auto & elem : displaced_elements)
2661 elems.insert(_mesh.elemPtr(elem->id()));
2662 }
2663 }
2664}
std::set< const Elem * > & getElements()
Returns a writeable reference to the _elements container.

Referenced by NonlinearSystemBase::computeDiracContributions().

◆ getDiscreteMaterialWarehouse()

const MaterialWarehouse & FEProblemBase::getDiscreteMaterialWarehouse ( ) const
inline

Definition at line 2354 of file FEProblemBase.h.

2354{ return _discrete_materials; }

◆ getDisplacedProblem() [1/2]

virtual std::shared_ptr< DisplacedProblem > FEProblemBase::getDisplacedProblem ( )
inlinevirtual

Definition at line 2032 of file FEProblemBase.h.

2032{ return _displaced_problem; }

◆ getDisplacedProblem() [2/2]

virtual std::shared_ptr< const DisplacedProblem > FEProblemBase::getDisplacedProblem ( ) const
inlinevirtual

◆ getDistribution()

Distribution & FEProblemBase::getDistribution ( const std::string &  name)
virtual

Definition at line 2917 of file FEProblemBase.C.

2918{
2919 std::vector<Distribution *> objs;
2920 theWarehouse()
2921 .query()
2922 .condition<AttribSystem>("Distribution")
2923 .condition<AttribName>(name)
2924 .queryInto(objs);
2925 if (objs.empty())
2926 {
2927 mooseAssert(getMooseApp().actionWarehouse().isTaskComplete("add_distribution"),
2928 "A Distribution getter was called before Distributions have been constructed. "
2929 "If you are attempting to access this object in the constructor of another object "
2930 "then make sure that the Distribution is constructed before the object using it.");
2931 mooseError("Unable to find Distribution with name '" + name + "'");
2932 }
2933 return *(objs[0]);
2934}

Referenced by MooseServer::buildDistPlotResponses(), DistributionInterface::getDistribution(), and DistributionInterface::getDistributionByName().

◆ getEvaluableElementRange()

const ConstElemRange & FEProblemBase::getEvaluableElementRange ( )

In general, {evaluable elements} >= {local elements} U {algebraic ghosting elements}.

That is, the number of evaluable elements does NOT necessarily equal to the number of local and algebraic ghosting elements. For example, if using a Lagrange basis for all variables, if a non-local, non-algebraically-ghosted element is surrounded by neighbors which are local or algebraically ghosted, then all the nodal (Lagrange) degrees of freedom associated with the non-local, non-algebraically-ghosted element will be evaluable, and hence that element will be considered evaluable.

getNonlinearEvaluableElementRange() returns the evaluable element range based on the nonlinear system dofmap; getAuxliaryEvaluableElementRange() returns the evaluable element range based on the auxiliary system dofmap; getEvaluableElementRange() returns the element range that is evaluable based on both the nonlinear dofmap and the auxliary dofmap.

Definition at line 909 of file FEProblemBase.C.

910{
912 {
913 std::vector<const DofMap *> dof_maps(es().n_systems());
914 for (const auto i : make_range(es().n_systems()))
915 {
916 const auto & sys = es().get_system(i);
917 dof_maps[i] = &sys.get_dof_map();
918 }
920 std::make_unique<ConstElemRange>(_mesh.getMesh().multi_evaluable_elements_begin(dof_maps),
921 _mesh.getMesh().multi_evaluable_elements_end(dof_maps));
922 }
924}
std::unique_ptr< libMesh::ConstElemRange > _evaluable_local_elem_range
const T_sys & get_system(std::string_view name) const

Referenced by NodalPatchRecoveryBase::gatherRequestList().

◆ getExecutor()

virtual Executor & FEProblemBase::getExecutor ( const std::string &  name)
inlinevirtual

Definition at line 2486 of file FEProblemBase.h.

2486{ return _app.getExecutor(name); }
Executor * getExecutor() const
Definition MooseApp.h:341

◆ getFailNextNonlinearConvergenceCheck()

bool FEProblemBase::getFailNextNonlinearConvergenceCheck ( ) const
inline

Whether it will skip further residual evaluations and fail the next nonlinear convergence check(s)

Definition at line 2945 of file FEProblemBase.h.

bool getFailNextSystemConvergenceCheck() const
Whether it will fail the next system convergence check(s), triggering failed step behavior.

Referenced by NonlinearSystemBase::computeScaling(), NonlinearSystem::converged(), Moose::PetscSupport::petscNonlinearConverged(), and ComputeResidualFunctor::residual().

◆ getFailNextSystemConvergenceCheck()

bool FEProblemBase::getFailNextSystemConvergenceCheck ( ) const
inline

Whether it will fail the next system convergence check(s), triggering failed step behavior.

Definition at line 2947 of file FEProblemBase.h.

Referenced by getFailNextNonlinearConvergenceCheck(), and Moose::PetscSupport::petscLinearConverged().

◆ getFunction()

Function & FEProblemBase::getFunction ( const std::string &  name,
const THREAD_ID  tid = 0 
)
virtual

Definition at line 2777 of file FEProblemBase.C.

2778{
2779 // This thread lock is necessary since this method will create functions
2780 // for all threads if one is missing.
2781 Threads::spin_mutex::scoped_lock lock(get_function_mutex);
2782
2783 if (!hasFunction(name, tid))
2784 {
2785 // If we didn't find a function, it might be a default function, attempt to construct one now
2786 std::istringstream ss(name);
2787 Real real_value;
2788
2789 // First see if it's just a constant. If it is, build a ConstantFunction
2790 if (ss >> real_value && ss.eof())
2791 {
2792 InputParameters params = _factory.getValidParams("ConstantFunction");
2793 params.set<Real>("value") = real_value;
2794 addFunction("ConstantFunction", ss.str(), params);
2795 }
2796 else
2797 {
2799 std::string vars = "x,y,z,t,NaN,pi,e";
2800 if (fp.Parse(name, vars) == -1) // -1 for success
2801 {
2802 // It parsed ok, so build a MooseParsedFunction
2803 InputParameters params = _factory.getValidParams("ParsedFunction");
2804 params.set<std::string>("expression") = name;
2805 addFunction("ParsedFunction", name, params);
2806 }
2807 }
2808
2809 // Try once more
2810 if (!hasFunction(name, tid))
2811 {
2812 mooseAssert(getMooseApp().actionWarehouse().isTaskComplete("add_function"),
2813 "getFunction() was called before Functions have been constructed. The requested "
2814 "Function '" +
2815 name + "' may exist in the input file, but Functions are not available yet.");
2816
2817 mooseError("Unable to find function " + name);
2818 }
2819 }
2820
2821 auto * const ret = dynamic_cast<Function *>(_functions.getActiveObject(name, tid).get());
2822 if (!ret)
2823 mooseError("No function named ", name, " of appropriate type");
2824
2825 return *ret;
2826}
Threads::spin_mutex get_function_mutex
char ** vars
virtual void addFunction(const std::string &type, const std::string &name, InputParameters &parameters)
virtual bool hasFunction(const std::string &name, const THREAD_ID tid=0)

Referenced by MFEMProblem::addFunction(), MooseServer::buildFuncPlotResponse(), FunctionInterface::getFunctionByName(), FunctionPeriodicBoundary::getFunctions(), IterationAdaptiveDT::init(), MooseParsedFunctionWrapper::initialize(), ChainControlParsedFunctionWrapper::initializeFunctionInputs(), and ParsedConvergence::initializeFunctionSymbol().

◆ getFunctionWarehouse()

const MooseObjectWarehouse< Function > & FEProblemBase::getFunctionWarehouse ( )
inline

Definition at line 2343 of file FEProblemBase.h.

2343{ return _functions; }

◆ getFunctor()

template<typename T >
const Moose::Functor< T > & SubProblem::getFunctor ( const std::string &  name,
const THREAD_ID  tid,
const std::string &  requestor_name,
bool  requestor_is_ad 
)
inherited
Template Parameters
TThe type that the functor will return when evaluated, e.g. ADReal or Real
Parameters
nameThe name of the functor to retrieve
tidThe thread ID that we are retrieving the functor property for
requestor_nameThe name of the object that is requesting this functor property
requestor_is_adWhether the requesting object is an AD object
Returns
a constant reference to the functor

Definition at line 1232 of file SubProblem.h.

1236{
1237 mooseAssert(tid < _functors.size(), "Too large a thread ID");
1238
1239 // Log the requestor
1240 _functor_to_requestors["wraps_" + name].insert(requestor_name);
1241
1242 constexpr bool requested_functor_is_ad =
1243 !std::is_same<T, typename MetaPhysicL::RawType<T>::value_type>::value;
1244
1245 auto & functor_to_request_info = _functor_to_request_info[tid];
1246
1247 // Get the requested functor if we already have it
1248 auto & functors = _functors[tid];
1249 if (auto find_ret = functors.find("wraps_" + name); find_ret != functors.end())
1250 {
1251 if (functors.count("wraps_" + name) > 1)
1252 mooseError("Attempted to get a functor with the name '",
1253 name,
1254 "' but multiple (" + std::to_string(functors.count("wraps_" + name)) +
1255 ") functors match. Make sure that you do not have functor material "
1256 "properties, functions, postprocessors or variables with the same names.");
1257
1258 auto & [true_functor_is, non_ad_functor, ad_functor] = find_ret->second;
1259 auto & functor_wrapper = requested_functor_is_ad ? *ad_functor : *non_ad_functor;
1260
1261 auto * const functor = dynamic_cast<Moose::Functor<T> *>(&functor_wrapper);
1262 if (!functor)
1263 mooseError("A call to SubProblem::getFunctor requested a functor named '",
1264 name,
1265 "' that returns the type: '",
1266 libMesh::demangle(typeid(T).name()),
1267 "'. However, that functor already exists and returns a different type: '",
1268 functor_wrapper.returnType(),
1269 "'");
1270
1271 if (functor->template wrapsType<Moose::NullFunctor<T>>())
1272 // Store for future checking when the actual functor gets added
1273 functor_to_request_info.emplace(name,
1274 std::make_pair(requested_functor_is_ad, requestor_is_ad));
1275 else
1276 {
1277 // We already have the actual functor
1278 if (true_functor_is == SubProblem::TrueFunctorIs::UNSET)
1279 mooseError("We already have the functor; it should not be unset");
1280
1281 // Check for whether this is a valid request
1282 // We allow auxiliary variables and linear variables to be retrieved as non AD
1283 if (!requested_functor_is_ad && requestor_is_ad &&
1284 true_functor_is == SubProblem::TrueFunctorIs::AD &&
1286 mooseError("The AD object '",
1287 requestor_name,
1288 "' is requesting the functor '",
1289 name,
1290 "' as a non-AD functor even though it is truly an AD functor, which is not "
1291 "allowed, since this may unintentionally drop derivatives.");
1292 }
1293
1294 return *functor;
1295 }
1296
1297 // We don't have the functor yet but we could have it in the future. We'll create null functors
1298 // for now
1299 functor_to_request_info.emplace(name, std::make_pair(requested_functor_is_ad, requestor_is_ad));
1300 if constexpr (requested_functor_is_ad)
1301 {
1302 typedef typename MetaPhysicL::RawType<T>::value_type NonADType;
1303 typedef T ADType;
1304
1305 auto emplace_ret =
1306 functors.emplace("wraps_" + name,
1307 std::make_tuple(SubProblem::TrueFunctorIs::UNSET,
1308 std::make_unique<Moose::Functor<NonADType>>(
1309 std::make_unique<Moose::NullFunctor<NonADType>>()),
1310 std::make_unique<Moose::Functor<ADType>>(
1311 std::make_unique<Moose::NullFunctor<ADType>>())));
1312
1313 return cast_ref<Moose::Functor<T> &>(*(requested_functor_is_ad
1314 ? std::get<2>(emplace_ret->second)
1315 : std::get<1>(emplace_ret->second)));
1316 }
1317 else
1318 {
1319 typedef T NonADType;
1320 typedef typename Moose::ADType<T>::type ADType;
1321
1322 auto emplace_ret =
1323 functors.emplace("wraps_" + name,
1324 std::make_tuple(SubProblem::TrueFunctorIs::UNSET,
1325 std::make_unique<Moose::Functor<NonADType>>(
1326 std::make_unique<Moose::NullFunctor<NonADType>>()),
1327 std::make_unique<Moose::Functor<ADType>>(
1328 std::make_unique<Moose::NullFunctor<ADType>>())));
1329
1330 return cast_ref<Moose::Functor<T> &>(*(requested_functor_is_ad
1331 ? std::get<2>(emplace_ret->second)
1332 : std::get<1>(emplace_ret->second)));
1333 }
1334}
virtual bool hasLinearVariable(const std::string &var_name) const
Whether or not this problem has this linear variable.
Definition SubProblem.C:801
std::map< std::string, std::set< std::string > > _functor_to_requestors
The requestors of functors where the key is the prop name and the value is a set of names of requesto...
virtual bool hasAuxiliaryVariable(const std::string &var_name) const
Whether or not this problem has this auxiliary variable.
Definition SubProblem.C:810
std::string demangle(const char *name)

Referenced by FunctorInterface::getFunctorByName().

◆ getFVAdvectedInterpolationMethod()

const FVAdvectedInterpolationMethod & FEProblemBase::getFVAdvectedInterpolationMethod ( const InterpolationMethodName &  name,
const THREAD_ID  tid = 0 
) const

Retrieve an advected interpolation method.

Parameters
nameThe name of the method.
tidThe thread ID.

Definition at line 4941 of file FEProblemBase.C.

4943{
4944 const auto & method = getFVInterpolationMethod(name, tid);
4945 const auto * advected_method = dynamic_cast<const FVAdvectedInterpolationMethod *>(&method);
4946
4947 if (!advected_method)
4948 mooseError("FVInterpolationMethod '",
4949 name,
4950 "' (",
4951 method.type(),
4952 ") is not an advected interpolation method.");
4953
4954 return *advected_method;
4955}
const FVInterpolationMethod & getFVInterpolationMethod(const InterpolationMethodName &name, const THREAD_ID tid=0) const
Retrieve an FV interpolation method.
Interface for interpolation methods that provide matrix and RHS contributions for advected face value...

Referenced by FVInterpolationMethodInterface::getFVAdvectedInterpolationMethod().

◆ getFVFaceInterpolationMethod()

const FVFaceInterpolationMethod & FEProblemBase::getFVFaceInterpolationMethod ( const InterpolationMethodName &  name,
const THREAD_ID  tid = 0 
) const

Retrieve a scalar face interpolation method.

Parameters
nameThe name of the method.
tidThe thread ID.

Definition at line 4924 of file FEProblemBase.C.

4926{
4927 const auto & method = getFVInterpolationMethod(name, tid);
4928 const auto * face_method = dynamic_cast<const FVFaceInterpolationMethod *>(&method);
4929
4930 if (!face_method)
4931 mooseError("FVInterpolationMethod '",
4932 name,
4933 "' (",
4934 method.type(),
4935 ") is not a scalar face interpolation method.");
4936
4937 return *face_method;
4938}
Abstract base class for interpolation methods that produce a scalar face value from adjacent cell val...

Referenced by FVInterpolationMethodInterface::getFVFaceInterpolationMethod().

◆ getFVGradientMethod()

const FVGradientMethod & FEProblemBase::getFVGradientMethod ( const GradientMethodName &  name,
const THREAD_ID  tid = 0 
) const

Retrieve an FV gradient method.

Parameters
nameThe name of the method.
tidThe thread ID.

Definition at line 4866 of file FEProblemBase.C.

4867{
4868 std::vector<FVGradientMethod *> methods;
4869 theWarehouse()
4870 .query()
4871 .condition<AttribSystem>("FVGradientMethod")
4872 .condition<AttribThread>(tid)
4873 .condition<AttribName>(name)
4874 .queryInto(methods);
4875
4876 if (methods.empty())
4877 mooseError("Unable to find FVGradientMethod with name '", name, "'");
4878
4879 mooseAssert(methods.size() == 1, "Expected a single FVGradientMethod per thread");
4880 return *(methods[0]);
4881}

◆ getFVInitialConditionWarehouse()

const FVInitialConditionWarehouse & FEProblemBase::getFVInitialConditionWarehouse ( ) const
inline

◆ getFVInterpolationMethod()

const FVInterpolationMethod & FEProblemBase::getFVInterpolationMethod ( const InterpolationMethodName &  name,
const THREAD_ID  tid = 0 
) const

Retrieve an FV interpolation method.

Parameters
nameThe name of the method.
tidThe thread ID.

Definition at line 4897 of file FEProblemBase.C.

4899{
4900 std::vector<FVInterpolationMethod *> methods;
4901 theWarehouse()
4902 .query()
4903 .condition<AttribSystem>("FVInterpolationMethod")
4904 .condition<AttribThread>(tid)
4905 .condition<AttribName>(name)
4906 .queryInto(methods);
4907
4908 if (methods.empty())
4909 {
4910 mooseAssert(getMooseApp().actionWarehouse().isTaskComplete("add_interpolation_method"),
4911 "An FVInterpolationMethod getter was called before FVInterpolationMethods have "
4912 "been constructed. If you are attempting to access this object in the constructor "
4913 "of another object then make sure that the FVInterpolationMethod is constructed "
4914 "before the object using it.");
4915
4916 mooseError("Unable to find FVInterpolationMethod with name '", name, "'");
4917 }
4918
4919 mooseAssert(methods.size() == 1, "Expected a single FVInterpolationMethod per thread");
4920 return *(methods[0]);
4921}

Referenced by getFVAdvectedInterpolationMethod(), and getFVFaceInterpolationMethod().

◆ getFVMatsAndDependencies()

void FEProblemBase::getFVMatsAndDependencies ( SubdomainID  block_id,
std::vector< std::shared_ptr< MaterialBase > > &  face_materials,
std::vector< std::shared_ptr< MaterialBase > > &  neighbor_materials,
std::set< MooseVariableFieldBase * > &  variables,
const THREAD_ID  tid 
)

Get the materials and variables potentially needed for FV.

Parameters
block_idSubdomainID The subdomain id that we want to retrieve materials for
face_materialsThe face materials container that we will fill
neighbor_materialsThe neighbor materials container that we will fill
variablesThe variables container that we will fill that our materials depend on
tidThe thread id

Definition at line 10055 of file FEProblemBase.C.

10061{
10062 if (_materials[Moose::FACE_MATERIAL_DATA].hasActiveBlockObjects(blk_id, tid))
10063 {
10064 auto & this_face_mats =
10066 for (std::shared_ptr<MaterialBase> face_mat : this_face_mats)
10067 if (face_mat->ghostable())
10068 {
10069 face_materials.push_back(face_mat);
10070 auto & var_deps = face_mat->getMooseVariableDependencies();
10071 for (auto * var : var_deps)
10072 {
10073 if (!var->isFV())
10074 mooseError(
10075 "Ghostable materials should only have finite volume variables coupled into them.");
10076 else if (face_mat->hasStatefulProperties())
10077 mooseError("Finite volume materials do not currently support stateful properties.");
10078 variables.insert(var);
10079 }
10080 }
10081 }
10082
10083 if (_materials[Moose::NEIGHBOR_MATERIAL_DATA].hasActiveBlockObjects(blk_id, tid))
10084 {
10085 auto & this_neighbor_mats =
10087 for (std::shared_ptr<MaterialBase> neighbor_mat : this_neighbor_mats)
10088 if (neighbor_mat->ghostable())
10089 {
10090 neighbor_materials.push_back(neighbor_mat);
10091#ifndef NDEBUG
10092 auto & var_deps = neighbor_mat->getMooseVariableDependencies();
10093 for (auto * var : var_deps)
10094 {
10095 if (!var->isFV())
10096 mooseError(
10097 "Ghostable materials should only have finite volume variables coupled into them.");
10098 else if (neighbor_mat->hasStatefulProperties())
10099 mooseError("Finite volume materials do not currently support stateful properties.");
10100 auto pr = variables.insert(var);
10101 mooseAssert(!pr.second,
10102 "We should not have inserted any new variables dependencies from our "
10103 "neighbor materials that didn't exist for our face materials");
10104 }
10105#endif
10106 }
10107 }
10108}

◆ getHitNode() [1/2]

const hit::Node * MooseBase::getHitNode ( ) const
inlineinherited
Returns
The block-level hit node for this object, if any

Definition at line 136 of file MooseBase.h.

136{ return getHitNode(_pars); }

Referenced by MooseBase::callMooseError(), MooseBase::getHitNode(), and MooseBase::messagePrefix().

◆ getHitNode() [2/2]

const hit::Node * MooseBase::getHitNode ( const InputParameters params)
staticprivateinherited

Internal method for getting a hit node (if available) given a set of parameters.

Needs to be static so that we can call it externally from InputParameters for errors that do not have context of the MooseBase

Definition at line 167 of file MooseBase.C.

168{
169 if (const auto hit_node = params.getHitNode())
170 if (!hit_node->isRoot())
171 return hit_node;
172 return nullptr;
173}

◆ getIndicatorWarehouse()

const MooseObjectWarehouse< Indicator > & FEProblemBase::getIndicatorWarehouse ( )
inline

Return indicator/marker storage.

Definition at line 2124 of file FEProblemBase.h.

2124{ return _indicators; }

◆ getInitialConditionWarehouse()

const InitialConditionWarehouse & FEProblemBase::getInitialConditionWarehouse ( ) const
inline

◆ getInterfaceMaterialsWarehouse()

const MaterialWarehouse & FEProblemBase::getInterfaceMaterialsWarehouse ( ) const
inline

◆ getInternalSideIndicatorWarehouse()

const MooseObjectWarehouse< InternalSideIndicatorBase > & FEProblemBase::getInternalSideIndicatorWarehouse ( )
inline

Definition at line 2125 of file FEProblemBase.h.

2126 {
2128 }

◆ getKokkosBndMaterialPropertyStorage()

Moose::Kokkos::MaterialPropertyStorage & FEProblemBase::getKokkosBndMaterialPropertyStorage ( )
inline

Definition at line 2109 of file FEProblemBase.h.

2110 {
2112 }

◆ getKokkosFESystem() [1/2]

Moose::Kokkos::FESystem & FEProblemBase::getKokkosFESystem ( const unsigned int  sys_num)

Get the Kokkos FESystem of a specified number.

Parameters
sys_numThe system number
Returns
The Kokkos FESystem

◆ getKokkosFESystem() [2/2]

const Moose::Kokkos::FESystem & FEProblemBase::getKokkosFESystem ( const unsigned int  sys_num) const

◆ getKokkosFESystems() [1/2]

Moose::Kokkos::Array< Moose::Kokkos::FESystem > & FEProblemBase::getKokkosFESystems ( )
inline

Get the Kokkos FESystem array (populated only when FE Kokkos objects exist)

Returns
The array of Kokkos FESystem objects

Definition at line 887 of file FEProblemBase.h.

888 {
889 return _kokkos_fe_systems;
890 }
Moose::Kokkos::Array< Moose::Kokkos::FESystem > _kokkos_fe_systems
FESystem array - sparsely populated (only slots for systems needing a Kokkos::FESystem)

◆ getKokkosFESystems() [2/2]

const Moose::Kokkos::Array< Moose::Kokkos::FESystem > & FEProblemBase::getKokkosFESystems ( ) const
inline

Definition at line 891 of file FEProblemBase.h.

892 {
893 return _kokkos_fe_systems;
894 }

◆ getKokkosFunction() [1/2]

virtual Moose::Kokkos::Function FEProblemBase::getKokkosFunction ( const std::string &  name)
virtual

Get a Kokkos function in an abstract type.

Parameters
nameThe Kokkos function name
Returns
The copy of the Kokkos function in the abstract type

◆ getKokkosFunction() [2/2]

template<typename T >
T & FEProblemBase::getKokkosFunction ( const std::string &  name)

Get a Kokkos function in a concrete type.

Template Parameters
TThe Kokkos function type
Parameters
nameThe Kokkos function name
Returns
The reference of the Kokkos function in the concrete type

Definition at line 3947 of file FEProblemBase.h.

3948{
3949 if (!hasKokkosFunction(name))
3950 {
3951 // If we didn't find a function, it might be a default function, attempt to construct one now
3952 std::istringstream ss(name);
3953 Real real_value;
3954
3955 // First see if it's just a constant. If it is, build a ConstantFunction
3956 if (ss >> real_value && ss.eof())
3957 {
3958 InputParameters params = _factory.getValidParams("KokkosConstantFunction");
3959 params.set<Real>("value") = real_value;
3960 addKokkosFunction("KokkosConstantFunction", ss.str(), params);
3961 }
3962
3963 // Try once more
3964 if (!hasKokkosFunction(name))
3965 mooseError("Unable to find Kokkos function '" + name, "'");
3966 }
3967
3968 auto * const ret = dynamic_cast<T *>(_kokkos_functions.getActiveObject(name).get());
3969 if (!ret)
3970 mooseError("No Kokkos function named '", name, "' of appropriate type");
3971
3972 return *ret;
3973}
virtual bool hasKokkosFunction(const std::string &name) const
Get whether a Kokkos function exists.
virtual void addKokkosFunction(const std::string &type, const std::string &name, InputParameters &parameters)
Add a Kokkos function to the problem.

◆ getKokkosMaterialData()

MaterialData & FEProblemBase::getKokkosMaterialData ( Moose::MaterialDataType  type,
const MooseObject object = nullptr 
) const
Returns
The Kokkos MaterialData for the type type for thread tid

Referenced by BlockRestrictable::initializeBlockRestrictable().

◆ getKokkosMaterialPropertyStorage()

Moose::Kokkos::MaterialPropertyStorage & FEProblemBase::getKokkosMaterialPropertyStorage ( )
inline

Definition at line 2105 of file FEProblemBase.h.

2106 {
2108 }

◆ getKokkosMaterialPropertyStorageConsumers()

const std::set< const MooseObject * > & FEProblemBase::getKokkosMaterialPropertyStorageConsumers ( Moose::MaterialDataType  type) const
Returns
The consumers of the Kokkos MaterialPropertyStorage for the type type

◆ getKokkosMaterialsWarehouse()

const MaterialWarehouse & FEProblemBase::getKokkosMaterialsWarehouse ( ) const
inline

Definition at line 2361 of file FEProblemBase.h.

2361{ return _kokkos_materials; }
MaterialWarehouse _kokkos_materials

◆ getKokkosNeighborMaterialPropertyStorage()

Moose::Kokkos::MaterialPropertyStorage & FEProblemBase::getKokkosNeighborMaterialPropertyStorage ( )
inline

Definition at line 2113 of file FEProblemBase.h.

2114 {
2116 }

◆ getKokkosSystem() [1/2]

Moose::Kokkos::System & FEProblemBase::getKokkosSystem ( const unsigned int  sys_num)

Get the Kokkos System of a specified number.

Parameters
sys_numThe system number
Returns
The Kokkos System

◆ getKokkosSystem() [2/2]

const Moose::Kokkos::System & FEProblemBase::getKokkosSystem ( const unsigned int  sys_num) const

◆ getKokkosSystems() [1/2]

Moose::Kokkos::Array< Moose::Kokkos::System > & FEProblemBase::getKokkosSystems ( )
inline

Get the Kokkos System array (always populated when any Kokkos object exists)

Returns
The array of Kokkos System objects

Definition at line 875 of file FEProblemBase.h.

875{ return _kokkos_systems; }
Moose::Kokkos::Array< Moose::Kokkos::System > _kokkos_systems
System array - sparsely populated (only slots for systems needing a Kokkos::System)

◆ getKokkosSystems() [2/2]

const Moose::Kokkos::Array< Moose::Kokkos::System > & FEProblemBase::getKokkosSystems ( ) const
inline

Definition at line 876 of file FEProblemBase.h.

877 {
878 return _kokkos_systems;
879 }

◆ getKokkosUserObject()

template<class T >
const T & FEProblemBase::getKokkosUserObject ( const std::string &  name) const
inline

Get the Kokkos user object by its name.

Parameters
nameThe name of the Kokkos user object being retrieved
Returns
const reference to the Kokkos user object

Definition at line 1444 of file FEProblemBase.h.

1445 {
1446 std::vector<T *> objs;
1447 theWarehouse()
1448 .query()
1449 .condition<AttribSystem>("KokkosUserObject")
1450 .condition<AttribName>(name)
1451 .queryInto(objs);
1452 if (objs.empty())
1453 mooseError("Unable to find Kokkos user object with name '" + name + "'");
1454 return *(objs[0]);
1455 }

Referenced by UserObjectInterface::getUserObjectFromFEProblem().

◆ getLinearConvergenceNames()

const std::vector< ConvergenceName > & FEProblemBase::getLinearConvergenceNames ( ) const

Gets the linear convergence object name(s).

Definition at line 10168 of file FEProblemBase.C.

10169{
10172 mooseError("The linear convergence name(s) have not been set.");
10173}
std::optional< std::vector< ConvergenceName > > _linear_convergence_names
Linear system(s) convergence name(s) (if any)

Referenced by Moose::PetscSupport::petscLinearConverged().

◆ getLinearSystem() [1/2]

LinearSystem & FEProblemBase::getLinearSystem ( unsigned int  sys_num)
inline

Get non-constant reference to a linear system.

Parameters
sys_numThe number of the linear system

Definition at line 3863 of file FEProblemBase.h.

3864{
3865 mooseAssert(sys_num < _linear_systems.size(),
3866 "System number greater than the number of linear systems");
3867 return *_linear_systems[sys_num];
3868}

Referenced by IterationAdaptiveDT::acceptStep(), Moose::compute_linear_system(), Moose::PetscSupport::petscSetDefaults(), and FEProblemSolve::solve().

◆ getLinearSystem() [2/2]

const LinearSystem & FEProblemBase::getLinearSystem ( unsigned int  sys_num) const
inline

Get a constant reference to a linear system.

Parameters
sys_numThe number of the linear system

Definition at line 3871 of file FEProblemBase.h.

3872{
3873 mooseAssert(sys_num < _linear_systems.size(),
3874 "System number greater than the number of linear systems");
3875 return *_linear_systems[sys_num];
3876}

◆ getLinearSystemNames()

const std::vector< LinearSystemName > & FEProblemBase::getLinearSystemNames ( ) const
inline
Returns
the linear system names in the problem

Definition at line 3026 of file FEProblemBase.h.

3026{ return _linear_sys_names; }

Referenced by PhysicsBase::initializePhysics(), and MultiSystemSolveObject::MultiSystemSolveObject().

◆ getLineSearch()

LineSearch * FEProblemBase::getLineSearch ( )
inlineoverridevirtual

getter for the MOOSE line search

Implements SubProblem.

Definition at line 834 of file FEProblemBase.h.

834{ return _line_search.get(); }

Referenced by DisplacedProblem::getLineSearch().

◆ getMarkerWarehouse()

const MooseObjectWarehouse< Marker > & FEProblemBase::getMarkerWarehouse ( )
inline

Definition at line 2129 of file FEProblemBase.h.

2129{ return _markers; }

◆ getMaterial()

std::shared_ptr< MaterialBase > FEProblemBase::getMaterial ( std::string  name,
Moose::MaterialDataType  type,
const THREAD_ID  tid = 0,
bool  no_warn = false 
)

Return a pointer to a MaterialBase object.

If no_warn is true, suppress warning about retrieving a material reference potentially during the material's calculation.

This will return enabled or disabled objects, the main purpose is for iterative materials.

Definition at line 4062 of file FEProblemBase.C.

4066{
4067 switch (type)
4068 {
4070 name += "_neighbor";
4071 break;
4073 name += "_face";
4074 break;
4075 default:
4076 break;
4077 }
4078
4079 std::shared_ptr<MaterialBase> material = _all_materials[type].getActiveObject(name, tid);
4080 if (!no_warn && material->getParam<bool>("compute") && type == Moose::BLOCK_MATERIAL_DATA)
4081 mooseWarning("You are retrieving a Material object (",
4082 material->name(),
4083 "), but its compute flag is set to true. This indicates that MOOSE is "
4084 "computing this property which may not be desired and produce un-expected "
4085 "results.");
4086
4087 return material;
4088}
void mooseWarning(Args &&... args)
Emit a warning message with the given stringified, concatenated args.
Definition MooseError.h:345
@ BLOCK_MATERIAL_DATA
Definition MooseTypes.h:747

Referenced by MaterialPropertyInterface::getMaterialByName().

◆ getMaterialData()

MaterialData & FEProblemBase::getMaterialData ( Moose::MaterialDataType  type,
const THREAD_ID  tid = 0,
const MooseObject object = nullptr 
) const
Returns
The MaterialData for the type type for thread tid

Definition at line 4091 of file FEProblemBase.C.

4094{
4095 switch (type)
4096 {
4098 if (object)
4100 return _material_props.getMaterialData(tid);
4102 if (object)
4108 if (object)
4111 }
4112
4113 mooseError("FEProblemBase::getMaterialData(): Invalid MaterialDataType ", type);
4114}
void addConsumer(Moose::MaterialDataType type, const MooseObject *object)
Add object as the consumer of storage of type type.
const MaterialData & getMaterialData(const THREAD_ID tid) const
@ BOUNDARY_MATERIAL_DATA
Definition MooseTypes.h:748
@ INTERFACE_MATERIAL_DATA
Definition MooseTypes.h:751

Referenced by BlockRestrictable::initializeBlockRestrictable(), and resizeMaterialData().

◆ getMaterialPropertyBlockNames()

std::vector< SubdomainName > SubProblem::getMaterialPropertyBlockNames ( const std::string &  prop_name)
virtualinherited

Get a vector of block id equivalences that the material property is defined on.

Definition at line 488 of file SubProblem.C.

489{
490 std::set<SubdomainID> blocks = getMaterialPropertyBlocks(prop_name);
491 std::vector<SubdomainName> block_names;
492 block_names.reserve(blocks.size());
493 for (const auto & block_id : blocks)
494 {
495 SubdomainName name;
496 name = mesh().getMesh().subdomain_name(block_id);
497 if (name.empty())
498 {
499 std::ostringstream oss;
500 oss << block_id;
501 name = oss.str();
502 }
503 block_names.push_back(name);
504 }
505
506 return block_names;
507}
virtual std::set< SubdomainID > getMaterialPropertyBlocks(const std::string &prop_name)
Get a vector containing the block ids the material property is defined on.
Definition SubProblem.C:472

Referenced by MaterialPropertyInterface::getMaterialPropertyBlockNames().

◆ getMaterialPropertyBlocks()

std::set< SubdomainID > SubProblem::getMaterialPropertyBlocks ( const std::string &  prop_name)
virtualinherited

Get a vector containing the block ids the material property is defined on.

Definition at line 472 of file SubProblem.C.

473{
474 std::set<SubdomainID> blocks;
475
476 for (const auto & it : _map_block_material_props)
477 {
478 const std::set<std::string> & prop_names = it.second;
479 std::set<std::string>::iterator name_it = prop_names.find(prop_name);
480 if (name_it != prop_names.end())
481 blocks.insert(it.first);
482 }
483
484 return blocks;
485}

Referenced by SubProblem::getMaterialPropertyBlockNames(), and MaterialPropertyInterface::getMaterialPropertyBlocks().

◆ getMaterialPropertyBoundaryIDs()

std::set< BoundaryID > SubProblem::getMaterialPropertyBoundaryIDs ( const std::string &  prop_name)
virtualinherited

Get a vector containing the block ids the material property is defined on.

Definition at line 524 of file SubProblem.C.

525{
526 std::set<BoundaryID> boundaries;
527
528 for (const auto & it : _map_boundary_material_props)
529 {
530 const std::set<std::string> & prop_names = it.second;
531 std::set<std::string>::iterator name_it = prop_names.find(prop_name);
532 if (name_it != prop_names.end())
533 boundaries.insert(it.first);
534 }
535
536 return boundaries;
537}

Referenced by MaterialPropertyInterface::getMaterialPropertyBoundaryIDs(), and SubProblem::getMaterialPropertyBoundaryNames().

◆ getMaterialPropertyBoundaryNames()

std::vector< BoundaryName > SubProblem::getMaterialPropertyBoundaryNames ( const std::string &  prop_name)
virtualinherited

Get a vector of block id equivalences that the material property is defined on.

Definition at line 540 of file SubProblem.C.

541{
542 std::set<BoundaryID> boundaries = getMaterialPropertyBoundaryIDs(prop_name);
543 std::vector<BoundaryName> boundary_names;
544 boundary_names.reserve(boundaries.size());
545 const BoundaryInfo & boundary_info = mesh().getMesh().get_boundary_info();
546
547 for (const auto & bnd_id : boundaries)
548 {
549 BoundaryName name;
550 if (bnd_id == Moose::ANY_BOUNDARY_ID)
551 name = "ANY_BOUNDARY_ID";
552 else
553 {
554 name = boundary_info.get_sideset_name(bnd_id);
555 if (name.empty())
556 {
557 std::ostringstream oss;
558 oss << bnd_id;
559 name = oss.str();
560 }
561 }
562 boundary_names.push_back(name);
563 }
564
565 return boundary_names;
566}
virtual std::set< BoundaryID > getMaterialPropertyBoundaryIDs(const std::string &prop_name)
Get a vector containing the block ids the material property is defined on.
Definition SubProblem.C:524

Referenced by MaterialPropertyInterface::getMaterialPropertyBoundaryNames().

◆ getMaterialPropertyRegistry()

const MaterialPropertyRegistry & FEProblemBase::getMaterialPropertyRegistry ( ) const
inline
Returns
A reference to the material property registry

Definition at line 2087 of file FEProblemBase.h.

2088 {
2090 }

Referenced by SideUserObject::checkNoInterfaceMaterialPropertyDependencies(), and MaterialBase::checkStatefulSanity().

◆ getMaterialPropertyStorage()

const MaterialPropertyStorage & FEProblemBase::getMaterialPropertyStorage ( )
inline

Return a reference to the material property storage.

Returns
A const reference to the material property storage

Definition at line 2097 of file FEProblemBase.h.

2097{ return _material_props; }

◆ getMaterialPropertyStorageConsumers()

const std::set< const MooseObject * > & FEProblemBase::getMaterialPropertyStorageConsumers ( Moose::MaterialDataType  type) const
Returns
The consumers of the MaterialPropertyStorage for the type type

Definition at line 4117 of file FEProblemBase.C.

4118{
4119 switch (type)
4120 {
4129 }
4130
4131 mooseError("FEProblemBase::getMaterialPropertyStorageConsumers(): Invalid MaterialDataType ",
4132 type);
4133}
const std::set< const MooseObject * > & getConsumers(Moose::MaterialDataType type) const

◆ getMaterialWarehouse()

const MaterialWarehouse & FEProblemBase::getMaterialWarehouse ( ) const
inline

◆ getMatrixTagID()

TagID SubProblem::getMatrixTagID ( const TagName &  tag_name) const
virtualinherited

Get a TagID from a TagName.

Reimplemented in DisplacedProblem.

Definition at line 341 of file SubProblem.C.

342{
343 auto tag_name_upper = MooseUtils::toUpper(tag_name);
344
345 if (!matrixTagExists(tag_name))
346 mooseError("Matrix tag: ",
347 tag_name,
348 " does not exist. ",
349 "If this is a TimeKernel then this may have happened because you didn't "
350 "specify a Transient Executioner.");
351
352 return _matrix_tag_name_to_tag_id.at(tag_name_upper);
353}
virtual bool matrixTagExists(const TagName &tag_name) const
Check to see if a particular Tag exists.
Definition SubProblem.C:327

Referenced by Coupleable::coupledMatrixTagValue(), Coupleable::coupledMatrixTagValues(), ExplicitTimeIntegrator::ExplicitTimeIntegrator(), DisplacedProblem::getMatrixTagID(), TaggingInterface::TaggingInterface(), and TaggingInterface::useMatrixTag().

◆ getMatrixTags()

virtual std::map< TagName, TagID > & SubProblem::getMatrixTags ( )
inlinevirtualinherited

◆ getMaxQps()

unsigned int FEProblemBase::getMaxQps ( ) const
Returns
The maximum number of quadrature points in use on any element in this problem.

Definition at line 1791 of file FEProblemBase.C.

1792{
1793 if (_max_qps == std::numeric_limits<unsigned int>::max())
1794 mooseError("Max QPS uninitialized");
1795 return _max_qps;
1796}

Referenced by MaterialBase::getMaxQps(), MaterialPropertyInterface::getMaxQps(), reinitDirac(), Material::subdomainSetup(), and updateMaxQps().

◆ getMaxScalarOrder()

Order FEProblemBase::getMaxScalarOrder ( ) const
Returns
The maximum order for all scalar variables in this problem's systems.

Definition at line 1799 of file FEProblemBase.C.

1800{
1801 return _max_scalar_order;
1802}

Referenced by ScalarCoupleable::coupledScalarOrder(), ScalarCoupleable::getADDefaultValue(), and ScalarCoupleable::getDefaultValue().

◆ getMeshDivision()

MeshDivision & FEProblemBase::getMeshDivision ( const std::string &  name,
const THREAD_ID  tid = 0 
) const

Get a MeshDivision.

Definition at line 2866 of file FEProblemBase.C.

2867{
2868 auto * const ret = dynamic_cast<MeshDivision *>(_mesh_divisions.getActiveObject(name, tid).get());
2869 if (!ret)
2870 mooseError("No MeshDivision object named ", name, " of appropriate type");
2871 return *ret;
2872}

Referenced by NestedDivision::NestedDivision().

◆ getMooseApp()

MooseApp & MooseBase::getMooseApp ( ) const
inlineinherited

Get the MooseApp this class is associated with.

Definition at line 87 of file MooseBase.h.

87{ return _app; }

Referenced by ChainControlSetupAction::act(), AddDefaultConvergenceAction::addDefaultMultiAppFixedPointConvergence(), AddDefaultConvergenceAction::addDefaultNonlinearConvergence(), AddDefaultConvergenceAction::addDefaultSteadyStateConvergence(), advanceState(), ParsedChainControl::buildFunction(), ReporterTransferInterface::checkHasReporterValue(), LinearFVGradientManager::checkRestartedGradientHistory(), AddDefaultConvergenceAction::checkUnusedMultiAppFixedPointConvergenceParameters(), AddDefaultConvergenceAction::checkUnusedNonlinearConvergenceParameters(), AddDefaultConvergenceAction::checkUnusedSteadyStateConvergenceParameters(), Coupleable::checkWritableVar(), ComponentPhysicsInterface::ComponentPhysicsInterface(), Coupleable::Coupleable(), MortarInterfaceWarehouse::createMortarInterface(), EigenProblem::doFreeNonlinearPowerIterations(), Terminator::execute(), FEProblemSolve::FEProblemSolve(), SolutionInvalidInterface::flagInvalidSolutionInternal(), ChainControl::getChainControlDataSystem(), getDistribution(), getFunction(), getFVInterpolationMethod(), getMultiApp(), getSampler(), DefaultConvergenceBase::getSharedExecutionerParam(), getUserObjectBase(), getVectorPostprocessorObjectByName(), ChainControlDataPostprocessor::initialSetup(), MaterialPropertyInterface::MaterialPropertyInterface(), MooseVariableDataFV< OutputType >::MooseVariableDataFV(), ProgressOutput::output(), PetscOutputInterface::petscLinearOutput(), PetscOutputInterface::petscNonlinearOutput(), Moose::PetscSupport::PetscOptionsScope::PetscOptionsScope(), PetscOutputInterface::PetscOutputInterface(), PostprocessorInterface::postprocessorsAdded(), MultiApp::preTransfer(), AuxiliarySystem::registerFVGradient(), Reporter::Reporter(), ReporterInterface::reportersAdded(), MultiApp::restore(), and VectorPostprocessorInterface::vectorPostprocessorsAdded().

◆ getMortarInterface() [1/2]

AutomaticMortarGeneration & FEProblemBase::getMortarInterface ( const std::pair< BoundaryID, BoundaryID > &  primary_secondary_boundary_pair,
const std::pair< SubdomainID, SubdomainID > &  primary_secondary_subdomain_pair,
bool  on_displaced 
)

Definition at line 8785 of file FEProblemBase.C.

8789{
8790 return _mortar_data->getMortarInterface(
8791 primary_secondary_boundary_pair, primary_secondary_subdomain_pair, on_displaced);
8792}

◆ getMortarInterface() [2/2]

const AutomaticMortarGeneration & FEProblemBase::getMortarInterface ( const std::pair< BoundaryID, BoundaryID > &  primary_secondary_boundary_pair,
const std::pair< SubdomainID, SubdomainID > &  primary_secondary_subdomain_pair,
bool  on_displaced 
) const

Return the undisplaced or displaced mortar generation object associated with the provided boundaries and subdomains.

Definition at line 8775 of file FEProblemBase.C.

8779{
8780 return _mortar_data->getMortarInterface(
8781 primary_secondary_boundary_pair, primary_secondary_subdomain_pair, on_displaced);
8782}

◆ getMortarInterfaces()

const std::unordered_map< std::pair< BoundaryID, BoundaryID >, MortarInterfaceConfig > & FEProblemBase::getMortarInterfaces ( bool  on_displaced) const

Definition at line 10456 of file FEProblemBase.C.

10457{
10458 return _mortar_data->getMortarInterfaces(on_displaced);
10459}

Referenced by computeUserObjectsInternal(), MortarSegmentMeshReporter::execute(), and NonlinearSystemBase::initialSetup().

◆ getMortarUserObjects() [1/2]

std::vector< MortarUserObject * > FEProblemBase::getMortarUserObjects ( BoundaryID  primary_boundary_id,
BoundaryID  secondary_boundary_id,
bool  displaced 
)
private

Helper for getting mortar objects corresponding to primary boundary ID, secondary boundary ID, and displaced parameters from the entire active mortar user object set.

Definition at line 10281 of file FEProblemBase.C.

10284{
10285 std::vector<MortarUserObject *> mortar_uos;
10286 theWarehouse()
10287 .query()
10289 .queryInto(mortar_uos);
10290 return getMortarUserObjects(primary_boundary_id, secondary_boundary_id, displaced, mortar_uos);
10291}

◆ getMortarUserObjects() [2/2]

std::vector< MortarUserObject * > FEProblemBase::getMortarUserObjects ( BoundaryID  primary_boundary_id,
BoundaryID  secondary_boundary_id,
bool  displaced,
const std::vector< MortarUserObject * > &  mortar_uo_superset 
)
private

Helper for getting mortar objects corresponding to primary boundary ID, secondary boundary ID, and displaced parameters, given some initial set.

Definition at line 10264 of file FEProblemBase.C.

10268{
10269 std::vector<MortarUserObject *> mortar_uos;
10270 auto * const subproblem =
10271 displaced ? cast_ptr<SubProblem *>(_displaced_problem.get()) : cast_ptr<SubProblem *>(this);
10272 for (auto * const obj : mortar_uo_superset)
10273 if (obj->onInterface(primary_boundary_id, secondary_boundary_id) &&
10274 (&obj->getSubProblem() == subproblem))
10275 mortar_uos.push_back(obj);
10276
10277 return mortar_uos;
10278}

Referenced by computeUserObjectsInternal(), getMortarUserObjects(), and reinitMortarUserObjects().

◆ getMultiApp()

std::shared_ptr< MultiApp > FEProblemBase::getMultiApp ( const std::string &  multi_app_name) const

Get a MultiApp object by name.

Definition at line 5972 of file FEProblemBase.C.

5973{
5974 if (!hasMultiApp(multi_app_name))
5975 mooseAssert(getMooseApp().actionWarehouse().isTaskComplete("add_multi_app"),
5976 "A MultiApp getter was called before MultiApps have been constructed. "
5977 "If you are attempting to access this object in the constructor of another object "
5978 "then make sure that the MultiApp is constructed before the object using it.");
5979
5980 return _multi_apps.getObject(multi_app_name);
5981}
bool hasMultiApp(const std::string &name) const
std::shared_ptr< T > getObject(const std::string &name, THREAD_ID tid=0) const

Referenced by addTransfer(), execMultiAppTransfers(), MultiAppPositions::initialize(), and MultiAppTransfer::MultiAppTransfer().

◆ getMultiAppFixedPointConvergenceName()

const ConvergenceName & FEProblemBase::getMultiAppFixedPointConvergenceName ( ) const

Gets the MultiApp fixed point convergence object name.

Definition at line 10176 of file FEProblemBase.C.

10177{
10180 else
10181 mooseError("The fixed point convergence name has not been set.");
10182}
std::optional< ConvergenceName > _multiapp_fixed_point_convergence_name
MultiApp fixed point convergence name.

Referenced by addDefaultMultiAppFixedPointConvergence(), FixedPointSolve::examineFixedPointConvergence(), FixedPointIterationAdaptiveDT::init(), FixedPointSolve::initialSetup(), SteffensenSolve::initialSetup(), FixedPointSolve::solve(), and FixedPointSolve::solveStep().

◆ getMultiAppTransferWarehouse()

const ExecuteMooseObjectWarehouse< Transfer > & FEProblemBase::getMultiAppTransferWarehouse ( Transfer::DIRECTION  direction) const

Return the complete warehouse for MultiAppTransfer object for the given direction.

Definition at line 6118 of file FEProblemBase.C.

6119{
6120 if (direction == MultiAppTransfer::TO_MULTIAPP)
6122 else if (direction == MultiAppTransfer::FROM_MULTIAPP)
6124 else
6126}

◆ getMultiAppWarehouse()

ExecuteMooseObjectWarehouse< MultiApp > & FEProblemBase::getMultiAppWarehouse ( )
inline

◆ getNeighborMaterialPropertyStorage()

const MaterialPropertyStorage & FEProblemBase::getNeighborMaterialPropertyStorage ( )
inline

Definition at line 2099 of file FEProblemBase.h.

2100 {
2102 }

◆ getNonlinearConvergenceNames()

const std::vector< ConvergenceName > & FEProblemBase::getNonlinearConvergenceNames ( ) const

Gets the nonlinear system convergence object name(s).

Definition at line 10144 of file FEProblemBase.C.

10145{
10148 mooseError("The nonlinear system convergence name(s) have not been set.");
10149}
std::optional< std::vector< ConvergenceName > > _nonlinear_convergence_names
Nonlinear system(s) convergence name(s)

Referenced by addDefaultNonlinearConvergence(), ReferenceResidualProblem::addDefaultNonlinearConvergence(), and FEProblemSolve::convergenceSetup().

◆ getNonlinearEvaluableElementRange()

const ConstElemRange & FEProblemBase::getNonlinearEvaluableElementRange ( )

Definition at line 927 of file FEProblemBase.C.

928{
930 {
931 std::vector<const DofMap *> dof_maps(_nl.size());
932 for (const auto i : index_range(dof_maps))
933 dof_maps[i] = &_nl[i]->dofMap();
935 std::make_unique<ConstElemRange>(_mesh.getMesh().multi_evaluable_elements_begin(dof_maps),
936 _mesh.getMesh().multi_evaluable_elements_end(dof_maps));
937 }
938
940}
std::unique_ptr< libMesh::ConstElemRange > _nl_evaluable_local_elem_range

Referenced by ElemSideNeighborLayersTester::execute().

◆ getNonlinearSystem()

NonlinearSystem & FEProblemBase::getNonlinearSystem ( const unsigned int  sys_num)
virtual

Reimplemented in FEProblem.

Definition at line 2881 of file FEProblemBase.C.

2882{
2883 mooseDeprecated("FEProblemBase::getNonlinearSystem() is deprecated, please use "
2884 "FEProblemBase::getNonlinearSystemBase() \n");
2885
2886 mooseAssert(sys_num < _nl.size(), "System number greater than the number of nonlinear systems");
2887 auto nl_sys = std::dynamic_pointer_cast<NonlinearSystem>(_nl[sys_num]);
2888
2889 if (!nl_sys)
2890 mooseError("This is not a NonlinearSystem");
2891
2892 return *nl_sys;
2893}

Referenced by PNGOutput::calculateRescalingValues(), and PNGOutput::makeMeshFunc().

◆ getNonlinearSystemBase() [1/2]

NonlinearSystemBase & FEProblemBase::getNonlinearSystemBase ( const unsigned int  sys_num)
inline

◆ getNonlinearSystemBase() [2/2]

const NonlinearSystemBase & FEProblemBase::getNonlinearSystemBase ( const unsigned int  sys_num) const
inline

Definition at line 3826 of file FEProblemBase.h.

3827{
3828 mooseAssert(sys_num < _nl.size(), "System number greater than the number of nonlinear systems");
3829 return *_nl[sys_num];
3830}

◆ getNonlinearSystemNames()

const std::vector< NonlinearSystemName > & FEProblemBase::getNonlinearSystemNames ( ) const
inline

◆ getNumCyclesCompleted()

unsigned int FEProblemBase::getNumCyclesCompleted ( )
inline
Returns
The number of adaptivity cycles completed.

Definition at line 2165 of file FEProblemBase.h.

2165{ return _cycles_completed; }

◆ getParam() [1/2]

template<typename T >
const T & MooseBase::getParam ( const std::string &  name) const
inherited

Retrieve a parameter for the object.

Parameters
nameThe name of the parameter
Returns
The value of the parameter

Definition at line 406 of file MooseBase.h.

407{
408 return InputParameters::getParamHelper<T>(name, _pars);
409}

Referenced by CommonOutputAction::act(), CreateDisplacedProblemAction::act(), CylinderComponent::addMeshGenerators(), addOutput(), ArrayParsedAux::ArrayParsedAux(), BicubicSplineFunction::BicubicSplineFunction(), SurfaceDelaunayGeneratorBase::checkBoundaryAndHolesParams(), Console::Console(), CutMeshByLevelSetGenerator::CutMeshByLevelSetGenerator(), DebugResidualAux::DebugResidualAux(), DerivativeParsedMaterialTempl< is_ad >::DerivativeParsedMaterialTempl(), DynamicObjectRegistrationAction::DynamicObjectRegistrationAction(), EigenKernel::EigenKernel(), ElementGroupCentroidPositions::ElementGroupCentroidPositions(), MFEMEigenvaluesPostprocessor::execute(), FEProblemSolve::FEProblemSolve(), SurfaceDelaunayGeneratorBase::fillDelaunayOptions(), ParsedVectorReporter::finalize(), FiniteDifferencePreconditioner::FiniteDifferencePreconditioner(), FixedPointSolve::FixedPointSolve(), ParsedSubdomainGeneratorBase::functionInitialize(), BlockDeletionGenerator::generate(), BoundaryLayerSubdomainGenerator::generate(), BreakMeshByBlockGenerator::generate(), CoarsenBlockGenerator::generate(), FileMeshGenerator::generate(), MeshExtruderGenerator::generate(), RefineBlockGenerator::generate(), RefineSidesetGenerator::generate(), SubdomainsFromPartitionerGenerator::generate(), GenericConstantRankTwoTensorTempl< is_ad >::GenericConstantRankTwoTensorTempl(), GenericConstantSymmetricRankTwoTensorTempl< is_ad >::GenericConstantSymmetricRankTwoTensorTempl(), GeometricSearchInterface::GeometricSearchInterface(), MooseApp::getCheckpointDirectories(), DataFileInterface::getDataFileName(), ExecutorInterface::getExecutor(), DefaultConvergenceBase::getSharedExecutionerParam(), AddVariableAction::init(), AdvancedOutput::init(), FixedPointIterationAdaptiveDT::init(), TimeSequenceStepper::init(), AdvancedOutput::initAvailableLists(), AttribThread::initFrom(), AttribExecutionOrderGroup::initFrom(), AttribSysNum::initFrom(), AttribResidualObject::initFrom(), AttribDisplaced::initFrom(), BlockRestrictable::initializeBlockRestrictable(), BoundaryRestrictable::initializeBoundaryRestrictable(), Console::initialSetup(), SampledOutput::initSample(), IterationAdaptiveDT::limitDTToPostprocessorValue(), MooseMesh::MooseMesh(), MooseVariableBase::MooseVariableBase(), MoveNodesByParsedExpressionModifier::MoveNodesByParsedExpressionModifier(), MultiPostprocessorConvergence::MultiPostprocessorConvergence(), PerfGraphOutput::output(), Console::outputSystemInformation(), ParsedCurveGenerator::ParsedCurveGenerator(), ParsedElementDeletionGenerator::ParsedElementDeletionGenerator(), ParsedGenerateNodeset::ParsedGenerateNodeset(), ParsedGenerateSideset::ParsedGenerateSideset(), ParsedMaterialTempl< is_ad >::ParsedMaterialTempl(), ParsedNodeTransformGenerator::ParsedNodeTransformGenerator(), ParsedODEKernel::ParsedODEKernel(), ParsedPostprocessor::ParsedPostprocessor(), ParsedReporterBase::ParsedReporterBase(), ParsedVectorReporter::ParsedVectorReporter(), ProjectSideSetOntoLevelSetGenerator::ProjectSideSetOntoLevelSetGenerator(), ReferenceResidualInterface::ReferenceResidualInterface(), Moose::FV::setInterpolationMethod(), SetupMeshAction::setupMesh(), MooseApp::setupOptions(), Output::setWallTimeIntervalFromCommandLineParam(), PetscOutput::solveSetup(), TimePeriod::TimePeriod(), UniqueExtraIDMeshGenerator::UniqueExtraIDMeshGenerator(), VariableCondensationPreconditioner::VariableCondensationPreconditioner(), VectorOfPostprocessors::VectorOfPostprocessors(), and XYQuadrilateralMeshFromBoundaryCurve::XYQuadrilateralMeshFromBoundaryCurve().

◆ getParam() [2/2]

template<typename T1 , typename T2 >
std::vector< std::pair< T1, T2 > > MooseBase::getParam ( const std::string &  param1,
const std::string &  param2 
) const
inherited

Retrieve two parameters and provide pair of parameters for the object.

Parameters
param1The name of first parameter
param2The name of second parameter
Returns
Vector of pairs of first and second parameters

Definition at line 443 of file MooseBase.h.

444{
445 return _pars.get<T1, T2>(param1, param2);
446}

◆ getPetscOptions()

Moose::PetscSupport::PetscOptions & FEProblemBase::getPetscOptions ( )
inline

◆ getPositionsObject()

const Positions & FEProblemBase::getPositionsObject ( const std::string &  name) const

Get the Positions object by its name.

Parameters
nameThe name of the Positions object being retrieved
Returns
Const reference to the Positions object

Definition at line 4838 of file FEProblemBase.C.

4839{
4840 std::vector<Positions *> objs;
4841 theWarehouse()
4842 .query()
4843 .condition<AttribSystem>("UserObject")
4844 .condition<AttribName>(name)
4845 .queryInto(objs);
4846 if (objs.empty())
4847 mooseError("Unable to find Positions object with name '" + name + "'");
4848 mooseAssert(objs.size() == 1, "Should only find one Positions");
4849 return *(objs[0]);
4850}

Referenced by DistributedPositions::DistributedPositions(), MultiApp::fillPositions(), ParsedDownSelectionPositions::initialize(), Positions::initialized(), MultiAppGeneralFieldTransfer::MultiAppGeneralFieldTransfer(), and TransformedPositions::TransformedPositions().

◆ getPostprocessorObjectByName()

const Postprocessor & FEProblemBase::getPostprocessorObjectByName ( const PostprocessorName &  object_name,
const THREAD_ID  tid = 0 
) const

Return the Postprocessor object registered under the supplied object name.

Parameters
object_nameThe name of the Postprocessor object
tidThe thread identifier for thread-local object lookup

Definition at line 4977 of file FEProblemBase.C.

4979{
4980 std::vector<Postprocessor *> objs;
4981 theWarehouse()
4982 .query()
4984 .condition<AttribThread>(tid)
4985 .condition<AttribName>(object_name)
4986 .queryInto(objs);
4987
4988 if (objs.empty())
4989 mooseError("Unable to find Postprocessor with name '", object_name, "'");
4990 mooseAssert(objs.size() == 1,
4991 "We shouldn't find more than one postprocessor object for a given name");
4992 return *(objs[0]);
4993}

◆ getPostprocessorValueByName()

const PostprocessorValue & FEProblemBase::getPostprocessorValueByName ( const PostprocessorName &  name,
std::size_t  t_index = 0 
) const

Get a read-only reference to the value associated with a Postprocessor that exists.

Parameters
nameThe name of the post-processor
t_indexFlag for getting current (0), old (1), or older (2) values
Returns
The reference to the value at the given time index

Note: This method is only for retrieving values that already exist, the Postprocessor and PostprocessorInterface objects should be used rather than this method for creating and getting values within objects.

Definition at line 4996 of file FEProblemBase.C.

4998{
5000 t_index);
5001}
Real PostprocessorValue
various MOOSE typedefs
Definition MooseTypes.h:230
A ReporterName that represents a Postprocessor.
const T & getReporterValue(const ReporterName &reporter_name, const MooseObject &consumer, const ReporterMode &mode, const std::size_t time_index=0) const
Method for returning read only references to Reporter values.

Referenced by MFEMProblem::addPostprocessor(), MultiAppConservativeTransfer::adjustTransferredSolution(), MultiAppConservativeTransfer::adjustTransferredSolutionNearestPoint(), MultiApp::appPostprocessorValue(), MultiAppPostprocessorToAuxScalarTransfer::execute(), MultiAppPostprocessorTransfer::execute(), EigenProblem::formNorm(), MooseParsedFunctionWrapper::initialize(), ParsedConvergence::initializePostprocessorSymbol(), EigenExecutionerBase::inversePowerIteration(), Exodus::outputPostprocessors(), Nemesis::outputPostprocessors(), TableOutput::outputPostprocessorsRow(), EigenProblem::postScaleEigenVector(), and TableOutput::shouldOutputPostprocessorsRow().

◆ getRegularMaterialsWarehouse()

const MaterialWarehouse & FEProblemBase::getRegularMaterialsWarehouse ( ) const
inline

Definition at line 2353 of file FEProblemBase.h.

2353{ return _materials; }

Referenced by Moose::Mortar::setupMortarMaterials().

◆ getRenamedParam()

template<typename T >
const T & MooseBase::getRenamedParam ( const std::string &  old_name,
const std::string &  new_name 
) const
inherited

Retrieve a renamed parameter for the object.

This helper makes sure we check both names before erroring, and that only one parameter is passed to avoid silent errors

Parameters
old_namethe old name for the parameter
new_namethe new name for the parameter

Definition at line 420 of file MooseBase.h.

421{
422 // Most important: accept new parameter
423 if (isParamSetByUser(new_name) && !isParamValid(old_name))
424 return getParam<T>(new_name);
425 // Second most: accept old parameter
426 if (isParamValid(old_name) && !isParamSetByUser(new_name))
427 return getParam<T>(old_name);
428 // Third most: accept default for new parameter
429 if (isParamValid(new_name) && !isParamValid(old_name))
430 return getParam<T>(new_name);
431 // Refuse: no default, no value passed
432 if (!isParamValid(old_name) && !isParamValid(new_name))
433 mooseError("parameter '" + new_name +
434 "' is being retrieved without being set.\nDid you misspell it?");
435 // Refuse: both old and new parameters set by user
436 else
437 mooseError("Parameter '" + new_name + "' may not be provided alongside former parameter '" +
438 old_name + "'");
439}

◆ getReporterData() [1/2]

const ReporterData & FEProblemBase::getReporterData ( ) const
inline

Provides const access the ReporterData object.

NOTE: There is a private non-const version of this function that uses a key object only constructable by the correct interfaces. This was done by design to encourage the use of the Reporter and ReporterInterface classes.

Definition at line 1385 of file FEProblemBase.h.

1385{ return _reporter_data; }

Referenced by ReporterTransferInterface::addReporterTransferMode(), ReporterTransferInterface::checkHasReporterValue(), ReporterTransferInterface::clearVectorReporter(), ConstantPostprocessor::ConstantPostprocessor(), AccumulateReporter::declareAccumulateHelper(), ReporterTransferInterface::declareClone(), ReporterTransferInterface::declareClone(), AccumulateReporter::declareLateValues(), VectorPostprocessor::declareVector(), ReporterTransferInterface::declareVectorClone(), ReporterTransferInterface::declareVectorClone(), execute(), PostprocessorInterface::getPostprocessorValueByNameInternal(), VectorPostprocessorInterface::getVectorPostprocessorByNameHelper(), VectorPostprocessorInterface::getVectorPostprocessorContextByNameHelper(), PostprocessorInterface::hasPostprocessorByName(), VectorPostprocessorInterface::hasVectorPostprocessorByName(), MooseParsedFunctionWrapper::initialize(), ReporterPositions::initialize(), ReporterTimes::initialize(), ParsedConvergence::initializeSymbols(), JSONOutput::initialSetup(), PostprocessorInterface::isDefaultPostprocessorValueByName(), ReporterDebugOutput::output(), Receiver::Receiver(), ReporterTransferInterface::resizeReporter(), ReporterTransferInterface::sumVectorReporter(), ReporterTransferInterface::transferFromVectorReporter(), ReporterTransferInterface::transferReporter(), and ReporterTransferInterface::transferToVectorReporter().

◆ getReporterData() [2/2]

ReporterData & FEProblemBase::getReporterData ( ReporterData::WriteKey  )
inline

Provides non-const access the ReporterData object that is used to store reporter values.

see ReporterData.h

Definition at line 1392 of file FEProblemBase.h.

1392{ return _reporter_data; }

◆ getRestartableData()

template<typename T , typename... Args>
const T & Restartable::getRestartableData ( const std::string &  data_name) const
protectedinherited

Declare a piece of data as "restartable" and initialize it Similar to declareRestartableData but returns a const reference to the object.

Forwarded arguments are not allowed in this case because we assume that the object is restarted and we won't need different constructors to initialize it.

NOTE: This returns a const reference! Make sure you store it in a const reference!

Parameters
data_nameThe name of the data (usually just use the same name as the member variable)

Definition at line 294 of file Restartable.h.

295{
296 return declareRestartableDataHelper<T>(data_name, nullptr).get();
297}

◆ getRestartableEquationSystems()

const RestartableEquationSystems & FEProblemBase::getRestartableEquationSystems ( ) const

Get the RestartableEquationSystems object.

Definition at line 6649 of file FEProblemBase.C.

6650{
6651 return _req.get();
6652}
const T & get() const
Get the restartable value.
Definition Restartable.h:58

Referenced by LinearFVGradientManager::checkRestartedGradientHistory().

◆ getSampler()

Sampler & FEProblemBase::getSampler ( const std::string &  name,
const THREAD_ID  tid = 0 
)
virtual

Definition at line 2947 of file FEProblemBase.C.

2948{
2949 std::vector<Sampler *> objs;
2950 theWarehouse()
2951 .query()
2952 .condition<AttribSystem>("Sampler")
2953 .condition<AttribThread>(tid)
2954 .condition<AttribName>(name)
2955 .queryInto(objs);
2956 if (objs.empty())
2957 {
2958 mooseAssert(getMooseApp().actionWarehouse().isTaskComplete("add_sampler"),
2959 "A Sampler getter was called before Samplers have been constructed. "
2960 "If you are attempting to access this object in the constructor of another object "
2961 "then make sure that the Sampler is constructed before the object using it.");
2962
2963 mooseError(
2964 "Unable to find Sampler with name '" + name +
2965 "', if you are attempting to access this object in the constructor of another object then "
2966 "make sure that the Sampler is constructed before the object using it.");
2967 }
2968 return *(objs[0]);
2969}

Referenced by SamplerInterface::getSampler(), and SamplerInterface::getSamplerByName().

◆ getScalarVariable()

MooseVariableScalar & FEProblemBase::getScalarVariable ( const THREAD_ID  tid,
const std::string &  var_name 
)
overridevirtual

Returns the scalar variable reference from whichever system contains it.

Implements SubProblem.

Definition at line 6625 of file FEProblemBase.C.

6626{
6627 for (auto & sys : _solver_systems)
6628 if (sys->hasScalarVariable(var_name))
6629 return sys->getScalarVariable(tid, var_name);
6630 if (_aux->hasScalarVariable(var_name))
6631 return _aux->getScalarVariable(tid, var_name);
6632
6633 mooseError("Unknown variable " + var_name);
6634}

Referenced by addInitialCondition(), EigenProblem::adjustEigenVector(), MultiAppScalarToAuxScalarTransfer::execute(), MooseParsedFunctionWrapper::initialize(), ChainControlParsedFunctionWrapper::initializeFunctionInputs(), Exodus::outputScalarVariables(), Nemesis::outputScalarVariables(), and TableOutput::outputScalarVariables().

◆ getSharedPtr() [1/2]

std::shared_ptr< MooseObject > MooseObject::getSharedPtr ( )
inherited

Get another shared pointer to this object that has the same ownership group.

Wrapper around shared_from_this().

Definition at line 70 of file MooseObject.C.

71{
72 try
73 {
74 return shared_from_this();
75 }
76 catch (std::bad_weak_ptr &)
77 {
78 mooseError(not_shared_error);
79 }
80}

Referenced by MFEMProblem::addImagComponentToBC(), MFEMProblem::addImagComponentToKernel(), MFEMProblem::addRealComponentToBC(), MFEMProblem::addRealComponentToKernel(), and WebServerControl::addServerAction().

◆ getSharedPtr() [2/2]

std::shared_ptr< const MooseObject > MooseObject::getSharedPtr ( ) const
inherited

Definition at line 83 of file MooseObject.C.

84{
85 try
86 {
87 return shared_from_this();
88 }
89 catch (std::bad_weak_ptr &)
90 {
91 mooseError(not_shared_error);
92 }
93}

◆ getSolverSystem() [1/2]

SolverSystem & FEProblemBase::getSolverSystem ( unsigned int  sys_num)
inline

◆ getSolverSystem() [2/2]

const SolverSystem & FEProblemBase::getSolverSystem ( unsigned int  sys_num) const
inline

Get a constant reference to a solver system.

Parameters
sys_numThe number of the solver system

Definition at line 3841 of file FEProblemBase.h.

3842{
3843 mooseAssert(sys_num < _solver_systems.size(),
3844 "System number greater than the number of solver systems");
3845 return *_solver_systems[sys_num];
3846}

◆ getSolverSystemNames()

const std::vector< SolverSystemName > & FEProblemBase::getSolverSystemNames ( ) const
inline
Returns
the solver system names in the problem

Definition at line 3030 of file FEProblemBase.h.

3030{ return _solver_sys_names; }

Referenced by ConsoleUtils::outputExecutionInformation().

◆ getStandardVariable()

MooseVariable & FEProblemBase::getStandardVariable ( const THREAD_ID  tid,
const std::string &  var_name 
)
overridevirtual

Returns the variable reference for requested MooseVariable which may be in any system.

Implements SubProblem.

Definition at line 6565 of file FEProblemBase.C.

6566{
6567 for (auto & sys : _solver_systems)
6568 if (sys->hasVariable(var_name))
6569 return sys->getFieldVariable<Real>(tid, var_name);
6570 if (_aux->hasVariable(var_name))
6571 return _aux->getFieldVariable<Real>(tid, var_name);
6572
6573 mooseError("Unknown variable " + var_name);
6574}

Referenced by CoupleableMooseVariableDependencyIntermediateInterface::coupledValueByName(), projectFunctionOnCustomRange(), LinearFVKernel::requestVariableCellGradient(), and ElementSubdomainModifierBase::storeOverriddenDofValues().

◆ getSteadyStateConvergenceName()

const ConvergenceName & FEProblemBase::getSteadyStateConvergenceName ( ) const

Gets the steady-state detection convergence object name.

Definition at line 10185 of file FEProblemBase.C.

10186{
10188 return _steady_state_convergence_name.value();
10189 else
10190 mooseError("The steady convergence name has not been set.");
10191}
std::optional< ConvergenceName > _steady_state_convergence_name
Steady-state detection convergence name.

Referenced by addDefaultSteadyStateConvergence(), TransientBase::convergedToSteadyState(), and TransientBase::init().

◆ getSystem()

System & FEProblemBase::getSystem ( const std::string &  var_name)
overridevirtual

Returns the equation system containing the variable provided.

Implements SubProblem.

Definition at line 6637 of file FEProblemBase.C.

6638{
6639 const auto [var_in_sys, sys_num] = determineSolverSystem(var_name);
6640 if (var_in_sys)
6641 return _solver_systems[sys_num]->system();
6642 else if (_aux->hasVariable(var_name) || _aux->hasScalarVariable(var_name))
6643 return _aux->system();
6644 else
6645 mooseError("Unable to find a system containing the variable " + var_name);
6646}

Referenced by addObjectParamsHelper(), MultiApp::appTransferVector(), FunctorChangeFunctorMaterialTempl< is_ad >::FunctorChangeFunctorMaterialTempl(), ElementSubdomainModifierBase::gatherPatchElements(), and ElementSubdomainModifierBase::storeOverriddenDofValues().

◆ getSystemBase() [1/3]

SystemBase & FEProblemBase::getSystemBase ( const std::string &  sys_name)

Get non-constant reference to a system in this problem.

Parameters
sys_nameThe name of the system

Definition at line 9903 of file FEProblemBase.C.

9904{
9905 if (std::find(_solver_sys_names.begin(), _solver_sys_names.end(), sys_name) !=
9906 _solver_sys_names.end())
9907 return getSystemBase(solverSysNum(sys_name));
9908 else if (sys_name == "aux0")
9909 return *_aux;
9910 else
9911 mooseError("System '" + sys_name + "' was requested from problem but does not exist.");
9912}

◆ getSystemBase() [2/3]

SystemBase & FEProblemBase::getSystemBase ( const unsigned int  sys_num)
virtual

Get non-constant reference to a system in this problem.

Parameters
sys_numThe number of the system

Definition at line 9915 of file FEProblemBase.C.

9916{
9917 if (sys_num < _solver_systems.size())
9918 return *_solver_systems[sys_num];
9919
9920 return *_aux;
9921}

◆ getSystemBase() [3/3]

const SystemBase & FEProblemBase::getSystemBase ( const unsigned int  sys_num) const
virtual

Get constant reference to a system in this problem.

Parameters
sys_numThe number of the system

Definition at line 9894 of file FEProblemBase.C.

9895{
9896 if (sys_num < _solver_systems.size())
9897 return *_solver_systems[sys_num];
9898
9899 return *_aux;
9900}

Referenced by addObjectParamsHelper(), PhysicsBase::copyVariablesFromMesh(), getSystemBase(), projectFunctionOnCustomRange(), and ElementSubdomainModifierBase::restoreOverriddenDofValues().

◆ getTimeFromStateArg()

Real FEProblemBase::getTimeFromStateArg ( const Moose::StateArg state) const

Returns the time associated with the requested state.

Definition at line 7624 of file FEProblemBase.C.

7625{
7627 // If we are any iteration type other than time (e.g. nonlinear), then temporally we are still
7628 // in the present time
7629 return time();
7630
7631 switch (state.state)
7632 {
7633 case 0:
7634 return time();
7635
7636 case 1:
7637 return timeOld();
7638
7639 case 2:
7640 return timeOlder();
7641
7642 default:
7643 mooseError("Unhandled state ", state.state, " in FEProblemBase::getTimeFromStateArg");
7644 }
7645}
virtual Real & timeOld() const
virtual Real & time() const
virtual Real & timeOlder() const
The time two steps back.
SolutionIterationType iteration_type
The solution iteration type, e.g. time or nonlinear.
unsigned int state
The state.

Referenced by Function::evaluate(), Function::evaluateDotHelper(), Function::evaluateGradientHelper(), Function::evaluateHelper(), and ParsedFunctorMaterialTempl< is_ad >::ParsedFunctorMaterialTempl().

◆ getTransfers() [1/2]

std::vector< std::shared_ptr< Transfer > > FEProblemBase::getTransfers ( ExecFlagType  type,
Transfer::DIRECTION  direction 
) const

Get Transfers by ExecFlagType and direction.

Definition at line 6096 of file FEProblemBase.C.

6097{
6098 if (direction == MultiAppTransfer::TO_MULTIAPP)
6100 else if (direction == MultiAppTransfer::FROM_MULTIAPP)
6102 else
6104}

◆ getTransfers() [2/2]

std::vector< std::shared_ptr< Transfer > > FEProblemBase::getTransfers ( Transfer::DIRECTION  direction) const

Definition at line 6107 of file FEProblemBase.C.

6108{
6109 if (direction == MultiAppTransfer::TO_MULTIAPP)
6111 else if (direction == MultiAppTransfer::FROM_MULTIAPP)
6113 else
6115}

◆ getUOExecutionGroups()

void FEProblemBase::getUOExecutionGroups ( TheWarehouse::Query query,
std::set< int > &  execution_groups 
) const
private

Definition at line 5403 of file FEProblemBase.C.

5405{
5406 std::vector<UserObjectBase *> uos;
5407 query.queryIntoUnsorted(uos);
5408 for (const auto & uo : uos)
5409 execution_groups.insert(uo->getParam<int>("execution_order_group"));
5410}

Referenced by computeUserObjectByName(), and computeUserObjects().

◆ getUOQuery()

TheWarehouse::Query FEProblemBase::getUOQuery ( const std::string &  system,
const ExecFlagType type,
const Moose::AuxGroup group 
) const
private

Definition at line 5385 of file FEProblemBase.C.

5388{
5390 theWarehouse().query().condition<AttribSystem>(system).condition<AttribExecOns>(type);
5391
5392 if (group == Moose::PRE_IC)
5393 query.condition<AttribPreIC>(true);
5394 else if (group == Moose::PRE_AUX)
5395 query.condition<AttribPreAux>(type);
5396 else if (group == Moose::POST_AUX)
5397 query.condition<AttribPostAux>(type);
5398
5399 return query;
5400}
TODO: delete this later - it is a temporary hack for dealing with inter-system dependencies.
Definition Attributes.h:346
TODO: delete this later - it is a temporary hack for dealing with inter-system dependencies.
Definition Attributes.h:315
TODO: delete this later - it is a temporary hack for dealing with inter-system dependencies.
Definition Attributes.h:296

Referenced by computeUserObjectByName(), and computeUserObjects().

◆ getUserObject()

template<class T >
T & FEProblemBase::getUserObject ( const std::string &  name,
unsigned int  tid = 0 
) const
inline

Get the user object by its name.

Parameters
nameThe name of the user object being retrieved
Returns
Reference to the user object

Definition at line 1404 of file FEProblemBase.h.

1405 {
1406 std::vector<T *> objs;
1407 theWarehouse()
1408 .query()
1409 .condition<AttribSystem>("UserObject")
1410 .condition<AttribThread>(tid)
1411 .condition<AttribName>(name)
1412 .queryInto(objs);
1413 if (objs.empty())
1414 mooseError("Unable to find user object with name '" + name + "'");
1415 return *(objs[0]);
1416 }

Referenced by ChangeOverFixedPointPostprocessor::ChangeOverFixedPointPostprocessor(), ChangeOverTimePostprocessor::ChangeOverTimePostprocessor(), MultiAppTransfer::checkParentAppUserObjectExecuteOn(), ExtraIDIntegralReporter::ExtraIDIntegralReporter(), ReporterTransferInterface::hideVariableHelper(), EigenExecutionerBase::init(), EigenProblemSolve::initialSetup(), IntegralPreservingFunctionIC::initialSetup(), ElementSubdomainModifierBase::initialSetup(), EigenExecutionerBase::inversePowerIteration(), and NEML2FEInterpolation::syncWithMainThread().

◆ getUserObjectBase()

const UserObject & FEProblemBase::getUserObjectBase ( const std::string &  name,
const THREAD_ID  tid = 0 
) const

Get the user object by its name.

Parameters
nameThe name of the user object being retrieved
tidThe thread of the user object (defaults to 0)
Returns
Const reference to the user object

Definition at line 4815 of file FEProblemBase.C.

4816{
4817 std::vector<UserObject *> objs;
4818 theWarehouse()
4819 .query()
4820 .condition<AttribSystem>("UserObject")
4821 .condition<AttribThread>(tid)
4822 .condition<AttribName>(name)
4823 .queryInto(objs);
4824 if (objs.empty())
4825 {
4826 mooseAssert(getMooseApp().actionWarehouse().isTaskComplete("add_user_object"),
4827 "A UserObject getter was called before UserObjects have been constructed. The "
4828 "requested UserObject '" +
4829 name + "' may exist in the input file, but UserObjects are not available yet.");
4830
4831 mooseError("Unable to find user object with name '" + name + "'");
4832 }
4833 mooseAssert(objs.size() == 1, "Should only find one UO");
4834 return *(objs[0]);
4835}

Referenced by MultiAppConservativeTransfer::adjustTransferredSolution(), MultiAppConservativeTransfer::adjustTransferredSolutionNearestPoint(), MultiApp::appUserObjectBase(), EigenProblem::checkProblemIntegrity(), checkUserObjectNameCollision(), UserObjectInterface::getUserObjectFromFEProblem(), MultiAppCloneReporterTransfer::initialSetup(), MultiAppConservativeTransfer::initialSetup(), and Terminator::initialSetup().

◆ getUserObjectJacobianVariables()

const std::vector< const MooseVariableFEBase * > & FEProblemBase::getUserObjectJacobianVariables ( const THREAD_ID  tid) const
inline

Definition at line 354 of file FEProblemBase.h.

355 {
356 return _uo_jacobian_moose_vars[tid];
357 }

Referenced by ComputeUserObjectsThread::onBoundary(), and ComputeUserObjectsThread::onElement().

◆ getVariable() [1/3]

virtual MooseVariableFieldBase & SubProblem::getVariable ( const THREAD_ID  tid,
const std::string &  var_name,
Moose::VarKindType  expected_var_type = Moose::VarKindType::VAR_ANY,
Moose::VarFieldType  expected_var_field_type = Moose::VarFieldType::VAR_FIELD_ANY 
)
inlinevirtual

Reimplemented from SubProblem.

Definition at line 279 of file SubProblem.h.

283 {
284 return const_cast<MooseVariableFieldBase &>(const_cast<const SubProblem *>(this)->getVariable(
285 tid, var_name, expected_var_type, expected_var_field_type));
286 }

◆ getVariable() [2/3]

const MooseVariableFieldBase & FEProblemBase::getVariable ( const THREAD_ID  tid,
const std::string &  var_name,
Moose::VarKindType  expected_var_type = Moose::VarKindType::VAR_ANY,
Moose::VarFieldType  expected_var_field_type = Moose::VarFieldType::VAR_FIELD_ANY 
) const
overridevirtual

Returns the variable reference for requested variable which must be of the expected_var_type (Nonlinear vs.

Auxiliary) and expected_var_field_type (standard, scalar, vector). The default values of VAR_ANY and VAR_FIELD_ANY should be used when "any" type of variable is acceptable. Throws an error if the variable in question is not in the expected System or of the expected type.

Implements SubProblem.

Definition at line 6555 of file FEProblemBase.C.

6559{
6560 return getVariableHelper(
6561 tid, var_name, expected_var_type, expected_var_field_type, _solver_systems, *_aux);
6562}
MooseVariableFieldBase & getVariableHelper(const THREAD_ID tid, const std::string &var_name, Moose::VarKindType expected_var_type, Moose::VarFieldType expected_var_field_type, const std::vector< T > &nls, const SystemBase &aux) const
Helper function called by getVariable that handles the logic for checking whether Variables of the re...

Referenced by addFVInitialCondition(), addInitialCondition(), EigenProblem::adjustEigenVector(), MultiAppConservativeTransfer::adjustTransferredSolution(), MultiAppConservativeTransfer::adjustTransferredSolutionNearestPoint(), MultiAppGeneralFieldNearestLocationTransfer::buildKDTrees(), MultiAppGeneralFieldShapeEvaluationTransfer::buildMeshFunctions(), CoupleableMooseVariableDependencyIntermediateInterface::coupledArrayValueByName(), CoupleableMooseVariableDependencyIntermediateInterface::coupledValueByName(), MultiAppGeometricInterpolationTransfer::execute(), MultiAppProjectionTransfer::execute(), MultiAppUserObjectTransfer::execute(), NodalNormalsCorner::execute(), NodalNormalsEvaluator::execute(), NodalNormalsPreprocessor::execute(), FunctorNodalCorrector::FunctorNodalCorrector(), NEML2FEInterpolation::getMOOSEVariable(), LazyCoupleable::init(), AdvancedOutput::initAvailableLists(), MultiAppGeneralFieldNearestLocationTransfer::initialSetup(), MultiAppProjectionTransfer::initialSetup(), AdvancedOutput::initShowHideLists(), MultiApplibMeshToMFEMShapeEvaluationTransfer::interpolatelibMeshVariable(), SolutionUserObjectBase::pointValueWrapper(), PointwiseRenormalizeVector::PointwiseRenormalizeVector(), BlockRestrictionDebugOutput::printBlockRestrictionGroups(), BlockRestrictionDebugOutput::printBlockRestrictionMap(), MultiAppProjectionTransfer::projectSolution(), MultiAppDofCopyTransfer::transfer(), MultiAppShapeEvaluationTransfer::transferVariable(), and MultiAppMFEMTolibMeshShapeEvaluationTransfer::transferVariables().

◆ getVariable() [3/3]

virtual const MooseVariableFieldBase & SubProblem::getVariable ( const THREAD_ID  tid,
const std::string &  var_name,
Moose::VarKindType  expected_var_type = Moose::VarKindType::VAR_ANY,
Moose::VarFieldType  expected_var_field_type = Moose::VarFieldType::VAR_FIELD_ANY 
) const
virtual

Returns the variable reference for requested variable which must be of the expected_var_type (Nonlinear vs.

Auxiliary) and expected_var_field_type (standard, scalar, vector). The default values of VAR_ANY and VAR_FIELD_ANY should be used when "any" type of variable is acceptable. Throws an error if the variable in question is not in the expected System or of the expected type.

Implements SubProblem.

◆ getVariableHelper() [1/2]

template<typename T >
MooseVariableFieldBase & SubProblem::getVariableHelper ( const THREAD_ID  tid,
const std::string &  var_name,
Moose::VarKindType  expected_var_type,
Moose::VarFieldType  expected_var_field_type,
const std::vector< T > &  nls,
const SystemBase aux 
) const
protectedinherited

Helper function called by getVariable that handles the logic for checking whether Variables of the requested type are available.

Referenced by DisplacedProblem::getVariable(), and getVariable().

◆ getVariableHelper() [2/2]

template<typename T >
MooseVariableFEBase & SubProblem::getVariableHelper ( const THREAD_ID  tid,
const std::string &  var_name,
Moose::VarKindType  expected_var_type,
Moose::VarFieldType  expected_var_field_type,
const std::vector< T > &  systems,
const SystemBase aux 
) const
inherited

Definition at line 817 of file SubProblem.C.

823{
824 // Eventual return value
825 MooseVariableFEBase * var = nullptr;
826
827 const auto [var_in_sys, sys_num] = determineSolverSystem(var_name);
828
829 // First check that the variable is found on the expected system.
830 if (expected_var_type == Moose::VarKindType::VAR_ANY)
831 {
832 if (var_in_sys)
833 var = &(systems[sys_num]->getVariable(tid, var_name));
834 else if (aux.hasVariable(var_name))
835 var = &(aux.getVariable(tid, var_name));
836 else
837 mooseError("Unknown variable " + var_name);
838 }
839 else if (expected_var_type == Moose::VarKindType::VAR_SOLVER && var_in_sys &&
840 systems[sys_num]->hasVariable(var_name))
841 var = &(systems[sys_num]->getVariable(tid, var_name));
842 else if (expected_var_type == Moose::VarKindType::VAR_AUXILIARY && aux.hasVariable(var_name))
843 var = &(aux.getVariable(tid, var_name));
844 else
845 {
846 std::string expected_var_type_string =
847 (expected_var_type == Moose::VarKindType::VAR_SOLVER ? "nonlinear" : "auxiliary");
848 mooseError("No ",
849 expected_var_type_string,
850 " variable named ",
851 var_name,
852 " found. "
853 "Did you specify an auxiliary variable when you meant to specify a nonlinear "
854 "variable (or vice-versa)?");
855 }
856
857 // Now make sure the var found has the expected field type.
858 if ((expected_var_field_type == Moose::VarFieldType::VAR_FIELD_ANY) ||
859 (expected_var_field_type == var->fieldType()))
860 return *var;
861 else
862 {
863 std::string expected_var_field_type_string =
864 MooseUtils::toLower(Moose::stringify(expected_var_field_type));
865 std::string var_field_type_string = MooseUtils::toLower(Moose::stringify(var->fieldType()));
866
867 mooseError("No ",
868 expected_var_field_type_string,
869 " variable named ",
870 var_name,
871 " found. "
872 "Did you specify a ",
873 var_field_type_string,
874 " variable when you meant to specify a ",
875 expected_var_field_type_string,
876 " variable?");
877 }
878}
virtual Moose::VarFieldType fieldType() const =0
Field type of this variable.
virtual std::pair< bool, unsigned int > determineSolverSystem(const std::string &var_name, bool error_if_not_found=false) const =0
virtual bool hasVariable(const std::string &var_name) const =0
Whether or not this problem has the variable.
std::string toLower(std::string name)
Convert supplied string to lower case.

◆ getVariableNames()

std::vector< VariableName > FEProblemBase::getVariableNames ( )
virtual

Returns a list of all the variables in the problem (both from the NL and Aux systems.

Definition at line 9603 of file FEProblemBase.C.

9604{
9605 std::vector<VariableName> names;
9606
9607 for (auto & sys : _solver_systems)
9608 {
9609 const std::vector<VariableName> & var_names = sys->getVariableNames();
9610 names.insert(names.end(), var_names.begin(), var_names.end());
9611 }
9612
9613 const std::vector<VariableName> & aux_var_names = _aux->getVariableNames();
9614 names.insert(names.end(), aux_var_names.begin(), aux_var_names.end());
9615
9616 return names;
9617}

Referenced by EigenProblem::adjustEigenVector(), AdvancedOutput::initAvailableLists(), and ElementSubdomainModifierBase::initialSetup().

◆ getVectorPostprocessorObjectByName()

const VectorPostprocessor & FEProblemBase::getVectorPostprocessorObjectByName ( const std::string &  object_name,
const THREAD_ID  tid = 0 
) const

Return the VPP object given the name.

Parameters
object_nameThe name of the VPP object
Returns
Desired VPP object

This is used by various output objects as well as the scatter value handling.

See also
CSV.C, XMLOutput.C, VectorPostprocessorInterface.C

Definition at line 5040 of file FEProblemBase.C.

5042{
5043 std::vector<VectorPostprocessor *> objs;
5044 theWarehouse()
5045 .query()
5047 .condition<AttribThread>(tid)
5048 .condition<AttribName>(object_name)
5049 .queryInto(objs);
5050
5051 if (objs.empty())
5052 {
5053 mooseAssert(
5054 getMooseApp().actionWarehouse().isTaskComplete("add_vector_postprocessor"),
5055 "A VectorPostprocessor getter was called before VectorPostprocessors have been "
5056 "constructed. The requested VectorPostprocessor '" +
5057 object_name +
5058 "' may exist in the input file, but VectorPostprocessors are not available yet.");
5059
5060 mooseError("Unable to find VectorPostprocessor with name '", object_name, "'");
5061 }
5062 mooseAssert(objs.size() == 1,
5063 "We shouldn't find more than one vector postprocessor object for a given name");
5064 return *(objs[0]);
5065}
@ VectorPostprocessor

Referenced by CombinedVectorPostprocessor::CombinedVectorPostprocessor(), VectorPostprocessorInterface::isVectorPostprocessorDistributedByName(), CSV::output(), and XMLOutput::outputVectorPostprocessors().

◆ getVectorPostprocessorValueByName()

const VectorPostprocessorValue & FEProblemBase::getVectorPostprocessorValueByName ( const std::string &  object_name,
const std::string &  vector_name,
std::size_t  t_index = 0 
) const

Get a read-only reference to the vector value associated with the VectorPostprocessor.

Parameters
object_nameThe name of the VPP object.
vector_nameThe namve of the decalred vector within the object.
Returns
Referent to the vector of data.

Note: This method is only for retrieving values that already exist, the VectorPostprocessor and VectorPostprocessorInterface objects should be used rather than this method for creating and getting values within objects.

Definition at line 5021 of file FEProblemBase.C.

5024{
5026 VectorPostprocessorReporterName(object_name, vector_name), t_index);
5027}
std::vector< Real > VectorPostprocessorValue
Definition MooseTypes.h:231
A ReporterName that represents a VectorPostprocessor.

Referenced by HistogramVectorPostprocessor::execute().

◆ getVectorTag()

const VectorTag & SubProblem::getVectorTag ( const TagID  tag_id) const
virtualinherited

Get a VectorTag from a TagID.

Reimplemented in DisplacedProblem.

Definition at line 160 of file SubProblem.C.

161{
162 mooseAssert(verifyVectorTags(), "Vector tag storage invalid");
163
164 if (!vectorTagExists(tag_id))
165 mooseError("Vector tag with ID ", tag_id, " does not exist");
166
167 return _vector_tags[tag_id];
168}

Referenced by addCachedResidualDirectly(), Assembly::cacheResidual(), Assembly::cacheResidualNodes(), DisplacedProblem::getVectorTag(), SubProblem::getVectorTags(), TaggingInterface::prepareVectorTagInternal(), TaggingInterface::prepareVectorTagLower(), TaggingInterface::prepareVectorTagNeighbor(), setResidual(), and setResidualNeighbor().

◆ getVectorTagID()

TagID SubProblem::getVectorTagID ( const TagName &  tag_name) const
virtualinherited

Get a TagID from a TagName.

Reimplemented in DisplacedProblem.

Definition at line 202 of file SubProblem.C.

203{
204 mooseAssert(verifyVectorTags(), "Vector tag storage invalid");
205
206 const auto tag_name_upper = MooseUtils::toUpper(tag_name);
207 const auto search = _vector_tags_name_map.find(tag_name_upper);
208 if (search != _vector_tags_name_map.end())
209 return search->second;
210
211 std::string message =
212 tag_name_upper == "TIME"
213 ? ".\n\nThis may occur if "
214 "you have a TimeKernel in your problem but did not specify a transient executioner."
215 : "";
216 mooseError("Vector tag '", tag_name_upper, "' does not exist", message);
217}

Referenced by Coupleable::coupledVectorTagArrayGradient(), Coupleable::coupledVectorTagArrayGradients(), Coupleable::coupledVectorTagArrayValues(), Coupleable::coupledVectorTagDofValues(), Coupleable::coupledVectorTagGradient(), Coupleable::coupledVectorTagGradients(), Coupleable::coupledVectorTagValues(), MultiAppVariableValueSamplePostprocessorTransfer::execute(), DisplacedProblem::getVectorTagID(), MooseVariableDataBase< OutputType >::MooseVariableDataBase(), ReferenceResidualConvergence::ReferenceResidualConvergence(), SolverSystem::setSolution(), TaggingInterface::TaggingInterface(), TagVectorAux::TagVectorAux(), MultiAppDofCopyTransfer::transfer(), TaggingInterface::useVectorTag(), Coupleable::vectorTagDofValueHelper(), and Coupleable::vectorTagValueHelper().

◆ getVectorTags() [1/2]

const std::vector< VectorTag > & SubProblem::getVectorTags ( const Moose::VectorTagType  type = Moose::VECTOR_TAG_ANY) const
virtualinherited

Return all vector tags, where a tag is represented by a map from name to ID.

Can optionally be limited to a vector tag type.

Reimplemented in DisplacedProblem.

Definition at line 183 of file SubProblem.C.

184{
185 mooseAssert(verifyVectorTags(), "Vector tag storage invalid");
186
188 return _vector_tags;
189 else
190 return _typed_vector_tags[type];
191}

◆ getVectorTags() [2/2]

std::vector< VectorTag > SubProblem::getVectorTags ( const std::set< TagID > &  tag_ids) const
inherited

Definition at line 171 of file SubProblem.C.

172{
173 mooseAssert(verifyVectorTags(), "Vector tag storage invalid");
174
175 std::vector<VectorTag> tags;
176 tags.reserve(tag_ids.size());
177 for (const auto & tag_id : tag_ids)
178 tags.push_back(getVectorTag(tag_id));
179 return tags;
180}

Referenced by computeLinearSystemSys(), NonlinearSystemBase::computeNodalBCsResidual(), EigenProblem::computeResidualAB(), computeResidualAndJacobian(), EigenProblem::computeResidualTag(), ComputeResidualAndJacobianThread::determineObjectWarehouses(), DisplacedProblem::getVectorTags(), SubProblem::numVectorTags(), ComputeMortarFunctor::operator()(), and setCurrentResidualVectorTags().

◆ getVectorVariable()

VectorMooseVariable & FEProblemBase::getVectorVariable ( const THREAD_ID  tid,
const std::string &  var_name 
)
overridevirtual

Returns the variable reference for requested VectorMooseVariable which may be in any system.

Implements SubProblem.

Definition at line 6589 of file FEProblemBase.C.

6590{
6591 for (auto & sys : _solver_systems)
6592 if (sys->hasVariable(var_name))
6593 return sys->getFieldVariable<RealVectorValue>(tid, var_name);
6594 if (_aux->hasVariable(var_name))
6595 return _aux->getFieldVariable<RealVectorValue>(tid, var_name);
6596
6597 mooseError("Unknown variable " + var_name);
6598}
VectorValue< Real > RealVectorValue
Definition SubProblem.h:34

◆ getXFEM()

std::shared_ptr< XFEMInterface > FEProblemBase::getXFEM ( )
inline

Get a pointer to the XFEM controller object.

Definition at line 2182 of file FEProblemBase.h.

2182{ return _xfem; }
std::shared_ptr< XFEMInterface > _xfem
Pointer to XFEM controller.

◆ ghostedElems()

virtual std::set< dof_id_type > & SubProblem::ghostedElems ( )
inlinevirtualinherited

Return the list of elements that should have their DoFs ghosted to this processor.

Returns
The list

Reimplemented in DisplacedProblem.

Definition at line 680 of file SubProblem.h.

680{ return _ghosted_elems; }

Referenced by SystemBase::augmentSendList(), NearestNodeLocator::findNodes(), DisplacedProblem::ghostedElems(), and NearestNodeLocator::updatePatch().

◆ ghostGhostedBoundaries()

void FEProblemBase::ghostGhostedBoundaries ( )
overridevirtual

Causes the boundaries added using addGhostedBoundary to actually be ghosted.

Implements SubProblem.

Definition at line 2324 of file FEProblemBase.C.

2325{
2326 TIME_SECTION("ghostGhostedBoundaries", 3, "Ghosting Ghosted Boundaries");
2327
2329
2332}
void ghostGhostedBoundaries()
Actually do the ghosting of boundaries that need to be ghosted to this processor.
Definition MooseMesh.C:3378

Referenced by DisplacedProblem::ghostGhostedBoundaries(), init(), and meshChanged().

◆ handleException()

void FEProblemBase::handleException ( const std::string &  calling_method)
private

Handle exceptions.

Note that the result of this call will be a thrown MooseException. The caller of this method must determine how to handle the thrown exception

Definition at line 8019 of file FEProblemBase.C.

8020{
8021 auto create_exception_message =
8022 [&calling_method](const std::string & exception_type, const auto & exception)
8023 {
8024 return std::string("A " + exception_type + " was raised during FEProblemBase::" +
8025 calling_method + "\n" + std::string(exception.what()));
8026 };
8027
8028 try
8029 {
8030 throw;
8031 }
8032 catch (const MooseException & e)
8033 {
8034 setException(create_exception_message("MooseException", e));
8035 }
8036 catch (const MetaPhysicL::LogicError & e)
8037 {
8039 }
8040 catch (const libMesh::PetscSolverException & e)
8041 {
8042 // One PETSc solver exception that we cannot currently recover from are new nonzero errors. In
8043 // particular I have observed the following scenario in a parallel test:
8044 // - Both processes throw because of a new nonzero during MOOSE's computeJacobianTags
8045 // - We potentially handle the exceptions nicely here
8046 // - When the matrix is closed in libMesh's libmesh_petsc_snes_solver, there is a new nonzero
8047 // throw which we do not catch here in MOOSE and the simulation terminates. This only appears
8048 // in parallel (and not all the time; a test I was examining threw with distributed mesh, but
8049 // not with replicated). In serial there are no new throws from libmesh_petsc_snes_solver.
8050 // So for uniformity of behavior across serial/parallel, we will choose to abort here and always
8051 // produce a non-zero exit code
8052 mooseError(create_exception_message("libMesh::PetscSolverException", e));
8053 }
8054 catch (const std::exception & e)
8055 {
8056 // This might be libMesh detecting a degenerate Jacobian or matrix
8057 if (strstr(e.what(), "Jacobian") || strstr(e.what(), "singular") ||
8058 strstr(e.what(), "det != 0"))
8059 setException(create_exception_message("libMesh DegenerateMap", e));
8060 else
8061 {
8062 const auto message = create_exception_message("std::exception", e);
8064 mooseError(message);
8065 else
8066 setException(message);
8067 }
8068 }
8069
8071}
virtual void setException(const std::string &message)
Set an exception, which is stored at this point by toggling a member variable in this class,...
void translateMetaPhysicLError(const MetaPhysicL::LogicError &)
emit a relatively clear error message when we catch a MetaPhysicL logic error
Definition MooseError.C:153

Referenced by computeBounds(), computeJacobianTags(), computeResidualAndJacobian(), computeResidualTags(), and computeUserObjectsInternal().

◆ hasActiveElementalMooseVariables()

bool SubProblem::hasActiveElementalMooseVariables ( const THREAD_ID  tid) const
virtualinherited

Whether or not a list of active elemental moose variables has been set.

Returns
True if there has been a list of active elemental moose variables set, False otherwise

Definition at line 459 of file SubProblem.C.

460{
462}
std::vector< unsigned int > _has_active_elemental_moose_variables
Whether or not there is currently a list of active elemental moose variables.

Referenced by SystemBase::prepare(), SystemBase::prepareFace(), and SystemBase::reinitElem().

◆ hasActiveMaterialProperties()

bool FEProblemBase::hasActiveMaterialProperties ( const THREAD_ID  tid) const

Method to check whether or not a list of active material roperties has been set.

This method is called by reinitMaterials to determine whether Material computeProperties methods need to be called. If the return is False, this check prevents unnecessary material property computation

Parameters
tidThe thread id
Returns
True if there has been a list of active material properties set, False otherwise

Definition at line 6763 of file FEProblemBase.C.

6764{
6766}

Referenced by ComputeMarkerThread::onElement(), reinitMaterials(), reinitMaterialsBoundary(), reinitMaterialsFace(), reinitMaterialsFaceOnBoundary(), reinitMaterialsInterface(), reinitMaterialsNeighbor(), and reinitMaterialsNeighborOnBoundary().

◆ hasAuxiliaryVariable()

bool SubProblem::hasAuxiliaryVariable ( const std::string &  var_name) const
virtualinherited

◆ hasBase()

bool MooseBase::hasBase ( ) const
inlineinherited
Returns
Whether or not this object has a registered base (set via InputParameters::registerBase())

Definition at line 142 of file MooseBase.h.

142{ return _pars.hasBase(); }
bool hasBase() const

◆ hasBlockMaterialProperty()

bool SubProblem::hasBlockMaterialProperty ( SubdomainID  block_id,
const std::string &  prop_name 
)
virtualinherited

Check if a material property is defined on a block.

Definition at line 510 of file SubProblem.C.

511{
512 auto it = _map_block_material_props.find(bid);
513 if (it == _map_block_material_props.end())
514 return false;
515
516 if (it->second.count(prop_name) > 0)
517 return true;
518 else
519 return false;
520}

◆ hasBoundaryMaterialProperty()

bool SubProblem::hasBoundaryMaterialProperty ( BoundaryID  boundary_id,
const std::string &  prop_name 
)
virtualinherited

Check if a material property is defined on a block.

Definition at line 569 of file SubProblem.C.

570{
571 auto it = _map_boundary_material_props.find(bid);
572 if (it == _map_boundary_material_props.end())
573 return false;
574
575 if (it->second.count(prop_name) > 0)
576 return true;
577 else
578 return false;
579}

◆ hasConvergence()

bool FEProblemBase::hasConvergence ( const std::string &  name,
const THREAD_ID  tid = 0 
) const
virtual

Returns true if the problem has a Convergence object of the given name.

Definition at line 2829 of file FEProblemBase.C.

2830{
2831 return _convergences.hasActiveObject(name, tid);
2832}
bool hasActiveObject(const std::string &name, THREAD_ID tid=0) const
Convenience functions for checking/getting specific objects.

Referenced by ParsedConvergence::initializeSymbols().

◆ hasDampers()

bool FEProblemBase::hasDampers ( )
inline

Whether or not this system has dampers.

Definition at line 1652 of file FEProblemBase.h.

1652{ return _has_dampers; }

Referenced by NonlinearSystemBase::preInit(), and NonlinearSystem::solve().

◆ hasDistribution()

bool FEProblemBase::hasDistribution ( const std::string &  name) const
virtual

Definition at line 2905 of file FEProblemBase.C.

2906{
2907 std::vector<Distribution *> objs;
2908 theWarehouse()
2909 .query()
2910 .condition<AttribSystem>("Distribution")
2911 .condition<AttribName>(name)
2912 .queryInto(objs);
2913 return !objs.empty();
2914}

◆ hasException()

virtual bool FEProblemBase::hasException ( )
inlinevirtual

Whether or not an exception has occurred.

Definition at line 533 of file FEProblemBase.h.

533{ return _has_exception; }

Referenced by NonlinearSystem::converged(), ThreadedNodeLoop< RangeType, IteratorType >::keepGoing(), and ThreadedElementLoop< RangeType >::keepGoing().

◆ hasFunction()

bool FEProblemBase::hasFunction ( const std::string &  name,
const THREAD_ID  tid = 0 
)
virtual

◆ hasFunctor()

bool SubProblem::hasFunctor ( const std::string &  name,
const THREAD_ID  tid 
) const
inherited

checks whether we have a functor corresponding to name on the thread id tid

Definition at line 1289 of file SubProblem.C.

1290{
1291 mooseAssert(tid < _functors.size(), "Too large a thread ID");
1292 auto & functors = _functors[tid];
1293 return (functors.find("wraps_" + name) != functors.end());
1294}

Referenced by FunctorInterface::isFunctor().

◆ hasFunctorWithType()

template<typename T >
bool SubProblem::hasFunctorWithType ( const std::string &  name,
const THREAD_ID  tid 
) const
inherited

checks whether we have a functor of type T corresponding to name on the thread id tid

Definition at line 1338 of file SubProblem.h.

1339{
1340 mooseAssert(tid < _functors.size(), "Too large a thread ID");
1341 auto & functors = _functors[tid];
1342
1343 const auto & it = functors.find("wraps_" + name);
1344 constexpr bool requested_functor_is_ad =
1345 !std::is_same<T, typename MetaPhysicL::RawType<T>::value_type>::value;
1346
1347 if (it == functors.end())
1348 return false;
1349 else
1350 return dynamic_cast<Moose::Functor<T> *>(
1351 requested_functor_is_ad ? std::get<2>(it->second).get() : std::get<1>(it->second).get());
1352}

◆ hasFVGradientMethod()

bool FEProblemBase::hasFVGradientMethod ( const GradientMethodName &  name) const

Check if an FV gradient method with a given name exists.

Definition at line 4884 of file FEProblemBase.C.

4885{
4886 std::vector<FVGradientMethod *> methods;
4887 theWarehouse()
4888 .query()
4889 .condition<AttribSystem>("FVGradientMethod")
4890 .condition<AttribThread>(0)
4891 .condition<AttribName>(name)
4892 .queryInto(methods);
4893 return !methods.empty();
4894}

◆ hasFVInterpolationMethod()

bool FEProblemBase::hasFVInterpolationMethod ( const InterpolationMethodName &  name) const

Check if an FV interpolation method with a given name exists.

Definition at line 4958 of file FEProblemBase.C.

4959{
4960 std::vector<FVInterpolationMethod *> methods;
4961 theWarehouse()
4962 .query()
4963 .condition<AttribSystem>("FVInterpolationMethod")
4964 .condition<AttribThread>(0)
4965 .condition<AttribName>(name)
4966 .queryInto(methods);
4967 return !methods.empty();
4968}

Referenced by FVInterpolationMethodInterface::hasFVInterpolationMethod().

◆ hasInitialAdaptivity() [1/2]

bool FEProblemBase::hasInitialAdaptivity ( ) const
inline

Return a Boolean indicating whether initial AMR is turned on.

Definition at line 2170 of file FEProblemBase.h.

2170{ return _adaptivity.getInitialSteps() > 0; }
unsigned int getInitialSteps() const
Pull out the number of initial steps previously set by calling init()
Definition Adaptivity.h:112

◆ hasInitialAdaptivity() [2/2]

bool FEProblemBase::hasInitialAdaptivity ( ) const
inline

Return a Boolean indicating whether initial AMR is turned on.

Definition at line 2175 of file FEProblemBase.h.

2175{ return false; }

◆ hasJacobian()

bool FEProblemBase::hasJacobian ( ) const

Returns _has_jacobian.

Definition at line 9818 of file FEProblemBase.C.

9819{
9820 return _has_jacobian;
9821}

Referenced by DisplacedProblem::prepare().

◆ hasKokkosFunction()

virtual bool FEProblemBase::hasKokkosFunction ( const std::string &  name) const
virtual

Get whether a Kokkos function exists.

Parameters
nameThe Kokkos function name
Returns
Whether a Kokkos function exists

Referenced by getKokkosFunction().

◆ hasKokkosObjects()

bool FEProblemBase::hasKokkosObjects ( ) const
inline
Returns
whether any Kokkos object was added in the problem

Definition at line 3054 of file FEProblemBase.h.

3054{ return _has_kokkos_objects; }
bool _has_kokkos_objects
Whether we have any Kokkos objects.

Referenced by MooseMesh::update().

◆ hasKokkosResidualObjects()

bool FEProblemBase::hasKokkosResidualObjects ( ) const
inline

◆ hasKokkosUserObject()

bool FEProblemBase::hasKokkosUserObject ( const std::string &  name) const

Check if there if a Kokkos user object of given name.

Parameters
nameThe name of the Kokkos user object being checked for
Returns
true if the Kokkos user object exists, false otherwise

Referenced by checkUserObjectNameCollision(), UserObjectInterface::getUserObjectFromFEProblem(), and UserObjectInterface::hasUserObjectByName().

◆ hasLinearConvergenceObjects()

bool FEProblemBase::hasLinearConvergenceObjects ( ) const

Whether we have linear convergence objects.

Definition at line 10152 of file FEProblemBase.C.

10153{
10154 // If false,this means we have not set one, not that we are querying this too early
10155 // TODO: once there is a default linear CV object, error on the 'not set' case
10156 return _linear_convergence_names.has_value();
10157}

Referenced by Moose::PetscSupport::petscSetDefaults().

◆ hasLinearVariable()

bool SubProblem::hasLinearVariable ( const std::string &  var_name) const
virtualinherited

Whether or not this problem has this linear variable.

Definition at line 801 of file SubProblem.C.

802{
803 for (const auto i : make_range(numLinearSystems()))
804 if (systemBaseLinear(i).hasVariable(var_name))
805 return true;
806 return false;
807}
virtual std::size_t numLinearSystems() const =0
virtual const SystemBase & systemBaseLinear(const unsigned int sys_num) const =0
Return the linear system object as a base class reference given the system number.

Referenced by SubProblem::getFunctor().

◆ hasMortarCoupling()

virtual bool FEProblemBase::hasMortarCoupling ( ) const
inlinevirtual

Whether the simulation has mortar coupling.

Definition at line 2743 of file FEProblemBase.h.

2743{ return _has_mortar; }

◆ hasMultiApp()

bool FEProblemBase::hasMultiApp ( const std::string &  name) const

Definition at line 5966 of file FEProblemBase.C.

5967{
5968 return _multi_apps.hasActiveObject(multi_app_name);
5969}

Referenced by getMultiApp().

◆ hasMultiApps() [1/2]

bool FEProblemBase::hasMultiApps ( ) const
inline

◆ hasMultiApps() [2/2]

bool FEProblemBase::hasMultiApps ( ExecFlagType  type) const

Definition at line 5960 of file FEProblemBase.C.

5961{
5963}

◆ hasNeighborCoupling()

virtual bool FEProblemBase::hasNeighborCoupling ( ) const
inlinevirtual

Whether the simulation has neighbor coupling.

Definition at line 2738 of file FEProblemBase.h.

◆ hasNonlocalCoupling()

virtual bool FEProblemBase::hasNonlocalCoupling ( ) const
inlineoverridevirtual

Whether the simulation has active nonlocal coupling which should be accounted for in the Jacobian.

For this to return true, there must be at least one active nonlocal kernel or boundary condition

Implements SubProblem.

Definition at line 3009 of file FEProblemBase.h.

3009{ return _has_nonlocal_coupling; }

Referenced by DisplacedProblem::hasNonlocalCoupling().

◆ hasPostprocessor()

bool FEProblemBase::hasPostprocessor ( const std::string &  name) const

Deprecated.

Use hasPostprocessorValueByName

Definition at line 5013 of file FEProblemBase.C.

5014{
5015 mooseDeprecated("FEProblemBase::hasPostprocssor is being removed; use "
5016 "hasPostprocessorValueByName instead.");
5018}
bool hasPostprocessorValueByName(const PostprocessorName &name) const
Whether or not a Postprocessor value exists by a given name.

Referenced by GenericFunctorTimeDerivativeMaterialTempl< is_ad >::GenericFunctorTimeDerivativeMaterialTempl().

◆ hasPostprocessorValueByName()

bool FEProblemBase::hasPostprocessorValueByName ( const PostprocessorName &  name) const

Whether or not a Postprocessor value exists by a given name.

Parameters
nameThe name of the Postprocessor
Returns
True if a Postprocessor value exists

Note: You should prioritize the use of PostprocessorInterface::hasPostprocessor and PostprocessorInterface::hasPostprocessorByName over this method when possible.

Definition at line 4971 of file FEProblemBase.C.

4972{
4974}
bool hasReporterValue(const ReporterName &reporter_name) const
Return True if a Reporter value with the given type and name have been created.

Referenced by DiffusionCG::addFEBCs(), DiffusionCG::addFEKernels(), DiffusionFV::addFVKernels(), FunctorExtremaPositions::FunctorExtremaPositions(), hasPostprocessor(), MooseParsedFunction::initialSetup(), and FunctorIC::value().

◆ hasScalarVariable()

bool FEProblemBase::hasScalarVariable ( const std::string &  var_name) const
overridevirtual

Returns a Boolean indicating whether any system contains a variable with the name provided.

Implements SubProblem.

Definition at line 6613 of file FEProblemBase.C.

6614{
6615 for (auto & sys : _solver_systems)
6616 if (sys->hasScalarVariable(var_name))
6617 return true;
6618 if (_aux->hasScalarVariable(var_name))
6619 return true;
6620
6621 return false;
6622}

Referenced by addInitialCondition(), addObjectParamsHelper(), EigenProblem::adjustEigenVector(), checkDuplicatePostprocessorVariableNames(), AdvancedOutput::initAvailableLists(), MooseParsedFunctionWrapper::initialize(), ChainControlParsedFunctionWrapper::initializeFunctionInputs(), MooseParsedFunction::initialSetup(), AdvancedOutput::initShowHideLists(), and Split::setup().

◆ hasScalingVector()

void SubProblem::hasScalingVector ( const unsigned int  nl_sys_num)
inherited

Tells this problem that the assembly associated with the given nonlinear system number involves a scaling vector.

Definition at line 1185 of file SubProblem.C.

1186{
1187 for (const THREAD_ID tid : make_range(libMesh::n_threads()))
1188 assembly(tid, nl_sys_num).hasScalingVector();
1189}
void hasScalingVector(const unsigned int nl_sys_num)
Tells this problem that the assembly associated with the given nonlinear system number involves a sca...
virtual Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num)=0

Referenced by SystemBase::addScalingVector().

◆ hasSetMultiAppFixedPointConvergenceName()

bool FEProblemBase::hasSetMultiAppFixedPointConvergenceName ( ) const
inline

Returns true if the problem has set the fixed point convergence name.

Definition at line 776 of file FEProblemBase.h.

777 {
779 }

◆ hasSetSteadyStateConvergenceName()

bool FEProblemBase::hasSetSteadyStateConvergenceName ( ) const
inline

Returns true if the problem has set the steady-state detection convergence name.

Definition at line 781 of file FEProblemBase.h.

782 {
783 return _steady_state_convergence_name.has_value();
784 }

◆ hasSolutionState()

bool FEProblemBase::hasSolutionState ( unsigned int  state,
Moose::SolutionIterationType  iteration_type 
) const

Whether we need up to old (1) or older (2) solution states for a given type of iteration.

Parameters
oldest_neededoldest solution state needed
iteration_typethe type of iteration for which old/older states are needed

Definition at line 793 of file FEProblemBase.C.

795{
796 bool has_solution_state = false;
797 for (auto & sys : _solver_systems)
798 has_solution_state |= sys->hasSolutionState(state, iteration_type);
799 has_solution_state |= _aux->hasSolutionState(state, iteration_type);
800 return has_solution_state;
801}
bool hasSolutionState(unsigned int state, Moose::SolutionIterationType iteration_type) const
Whether we need up to old (1) or older (2) solution states for a given type of iteration.

◆ hasSolverVariable()

bool FEProblemBase::hasSolverVariable ( const std::string &  var_name) const

Definition at line 6545 of file FEProblemBase.C.

6546{
6547 for (auto & sys : _solver_systems)
6548 if (sys->hasVariable(var_name))
6549 return true;
6550
6551 return false;
6552}

Referenced by FunctorChangeFunctorMaterialTempl< is_ad >::FunctorChangeFunctorMaterialTempl().

◆ hasTimeIntegrator()

bool FEProblemBase::hasTimeIntegrator ( ) const
inline

Returns whether or not this Problem has a TimeIntegrator.

Definition at line 2467 of file FEProblemBase.h.

2467{ return _has_time_integrator; }

Referenced by TransientBase::setupTimeIntegrator().

◆ hasUOAuxStateCheck()

bool FEProblemBase::hasUOAuxStateCheck ( ) const
inline

Whether or not MOOSE will perform a user object/auxiliary kernel state check.

Definition at line 221 of file FEProblemBase.h.

221{ return _uo_aux_state_check; }

◆ hasUserObject()

bool FEProblemBase::hasUserObject ( const std::string &  name) const

Check if there if a user object of given name.

Parameters
nameThe name of the user object being checked for
Returns
true if the user object exists, false otherwise

Definition at line 4853 of file FEProblemBase.C.

4854{
4855 std::vector<UserObject *> objs;
4856 theWarehouse()
4857 .query()
4858 .condition<AttribSystem>("UserObject")
4859 .condition<AttribThread>(0)
4860 .condition<AttribName>(name)
4861 .queryInto(objs);
4862 return !objs.empty();
4863}

Referenced by checkUserObjectNameCollision(), DistributedPositions::DistributedPositions(), MultiAppGeneralFieldFunctorTransfer::execute(), UserObjectInterface::getUserObjectFromFEProblem(), UserObjectInterface::hasUserObjectByName(), ReporterTransferInterface::hideVariableHelper(), ParsedDownSelectionPositions::initialize(), and TransformedPositions::TransformedPositions().

◆ hasVariable()

bool FEProblemBase::hasVariable ( const std::string &  var_name) const
overridevirtual

◆ haveADObjects() [1/3]

bool SubProblem::haveADObjects ( ) const
inline

Method for reading wehther we have any ad objects.

Definition at line 779 of file SubProblem.h.

779{ return _have_ad_objects; }
bool _have_ad_objects
AD flag indicating whether any AD objects have been added.

Referenced by computeJacobianTags(), computeResidualAndJacobian(), and init().

◆ haveADObjects() [2/3]

virtual void SubProblem::haveADObjects ( bool  have_ad_objects)
inlinevirtual

Method for setting whether we have any ad objects.

Reimplemented from SubProblem.

Definition at line 775 of file SubProblem.h.

775{ _have_ad_objects = have_ad_objects; }

◆ haveADObjects() [3/3]

void FEProblemBase::haveADObjects ( bool  have_ad_objects)
overridevirtual

Method for setting whether we have any ad objects.

Reimplemented from SubProblem.

Definition at line 9886 of file FEProblemBase.C.

9887{
9888 _have_ad_objects = have_ad_objects;
9890 _displaced_problem->SubProblem::haveADObjects(have_ad_objects);
9891}

◆ haveDisplaced()

bool FEProblemBase::haveDisplaced ( ) const
inlinefinaloverridevirtual

Whether we have a displaced problem in our simulation.

Implements SubProblem.

Definition at line 2843 of file FEProblemBase.h.

2843{ return _displaced_problem.get(); }

◆ haveFV()

virtual bool FEProblemBase::haveFV ( ) const
inlineoverridevirtual

◆ havePRefinement()

bool SubProblem::havePRefinement ( ) const
inlineinherited

Query whether p-refinement has been requested at any point during the simulation.

Definition at line 1024 of file SubProblem.h.

1024{ return _have_p_refinement; }
bool _have_p_refinement
Whether p-refinement has been requested at any point during the simulation.

Referenced by AdvancedOutput::initAvailableLists(), and meshChanged().

◆ haveXFEM()

bool FEProblemBase::haveXFEM ( )
inline

Find out whether the current analysis is using XFEM.

Definition at line 2185 of file FEProblemBase.h.

2185{ return _xfem != nullptr; }

Referenced by FixedPointSolve::solveStep(), TransientBase::takeStep(), and updateMeshXFEM().

◆ identifyVariableGroupsInNL()

bool FEProblemBase::identifyVariableGroupsInNL ( ) const
inline

Whether to identify variable groups in nonlinear systems.

This affects dof ordering

Definition at line 3014 of file FEProblemBase.h.

Referenced by NonlinearSystemBase::NonlinearSystemBase().

◆ ignoreZerosInJacobian()

bool FEProblemBase::ignoreZerosInJacobian ( ) const
inline

Will return true if zeros in the Jacobian are to be dropped from the sparsity pattern.

Note that this can make preserving the matrix sparsity pattern impossible.

Definition at line 2439 of file FEProblemBase.h.

2439{ return _ignore_zeros_in_jacobian; }

Referenced by NonlinearSystemBase::computeJacobianInternal(), NonlinearSystemBase::computeResidualAndJacobianInternal(), and NonlinearSystemBase::constraintJacobians().

◆ immediatelyPrintInvalidSolution()

bool FEProblemBase::immediatelyPrintInvalidSolution ( ) const
inline

Whether or not the solution invalid warnings are printed out immediately.

Definition at line 2464 of file FEProblemBase.h.

Referenced by SolutionInvalidInterface::flagInvalidSolutionInternal().

◆ incrementMultiAppTStep()

void FEProblemBase::incrementMultiAppTStep ( ExecFlagType  type)

Advance the MultiApps t_step (incrementStepOrReject) associated with the ExecFlagType.

Definition at line 6364 of file FEProblemBase.C.

6365{
6366 const auto & multi_apps = _multi_apps[type].getActiveObjects();
6367
6368 if (multi_apps.size())
6369 for (const auto & multi_app : multi_apps)
6370 multi_app->incrementTStep(_time);
6371}

Referenced by TransientBase::incrementStepOrReject().

◆ init()

void FEProblemBase::init ( )
overridevirtual

Implements Problem.

Reimplemented in EigenProblem, and FEProblem.

Definition at line 7037 of file FEProblemBase.C.

7038{
7039 if (_initialized)
7040 return;
7041
7042 TIME_SECTION("init", 2, "Initializing");
7043
7044 // call executioner's preProblemInit so that it can do some setups before problem init
7046
7047 // If we have AD and we are doing global AD indexing, then we should by default set the matrix
7048 // coupling to full. If the user has told us to trust their coupling matrix, then this call will
7049 // not do anything
7052
7053 for (const auto i : index_range(_nl))
7054 {
7055 auto & nl = _nl[i];
7056 auto & cm = _cm[i];
7057
7058 unsigned int n_vars = nl->nVariables();
7059 {
7060 TIME_SECTION("fillCouplingMatrix", 3, "Filling Coupling Matrix");
7061
7062 switch (_coupling)
7063 {
7065 cm = std::make_unique<CouplingMatrix>(n_vars);
7066 for (unsigned int i = 0; i < n_vars; i++)
7067 (*cm)(i, i) = 1;
7068 break;
7069
7070 // for full jacobian
7072 cm = std::make_unique<CouplingMatrix>(n_vars);
7073 for (unsigned int i = 0; i < n_vars; i++)
7074 for (unsigned int j = 0; j < n_vars; j++)
7075 (*cm)(i, j) = 1;
7076 break;
7077
7079 // do nothing, _cm was already set through couplingMatrix() call
7080 break;
7081 }
7082 }
7083
7084 nl->dofMap()._dof_coupling = cm.get();
7085
7086 // If there are no variables, make sure to pass a nullptr coupling
7087 // matrix, to avoid warnings about non-nullptr yet empty
7088 // CouplingMatrices.
7089 if (n_vars == 0)
7090 nl->dofMap()._dof_coupling = nullptr;
7091
7092 nl->dofMap().attach_extra_sparsity_function(&extraSparsity, nl.get());
7093 nl->dofMap().attach_extra_send_list_function(&extraSendList, nl.get());
7094 _aux->dofMap().attach_extra_send_list_function(&extraSendList, _aux.get());
7095
7096 if (!_skip_nl_system_check && _solve && n_vars == 0)
7097 mooseError("No variables specified in nonlinear system '", nl->name(), "'.");
7098 }
7099
7100 ghostGhostedBoundaries(); // We do this again right here in case new boundaries have been added
7101
7102 // We may have added element/nodes to the mesh in ghostGhostedBoundaries so we need to update
7103 // all of our mesh information. We need to make sure that mesh information is up-to-date before
7104 // EquationSystems::init because that will call through to updateGeomSearch (for sparsity
7105 // augmentation) and if we haven't added back boundary node information before that latter call,
7106 // then we're screwed. We'll get things like "Unable to find closest node!"
7110
7111 if (_mesh.doingPRefinement())
7112 {
7115 _displaced_problem->preparePRefinement();
7116 }
7117
7118 // do not assemble system matrix for JFNK solve
7119 for (auto & nl : _nl)
7120 if (solverParams(nl->number())._type == Moose::ST_JFNK)
7121 nl->turnOffJacobian();
7122
7123 for (auto & sys : _solver_systems)
7124 sys->preInit();
7125 _aux->preInit();
7126
7127 // Build the mortar segment meshes, if they haven't been already, for a couple reasons:
7128 // 1) Get the ghosting correct for both static and dynamic meshes
7129 // 2) Make sure the mortar mesh is built for mortar constraints that live on the static mesh
7130 //
7131 // It is worth-while to note that mortar meshes that live on a dynamic mesh will be built
7132 // during residual and Jacobian evaluation because when displacements are solution variables
7133 // the mortar mesh will move and change during the course of a non-linear solve. We DO NOT
7134 // redo ghosting during non-linear solve, so for purpose 1) the below call has to be made
7135 if (!_mortar_data->initialized())
7137
7138 {
7139 TIME_SECTION("EquationSystems::Init", 2, "Initializing Equation Systems");
7140 es().init();
7141 }
7142
7143 for (auto & sys : _solver_systems)
7144 sys->postInit();
7145 _aux->postInit();
7146
7147 // Now that the equation system and the dof distribution is done, we can generate the
7148 // finite volume-related parts if needed.
7149 if (haveFV())
7151
7152 for (auto & sys : _solver_systems)
7153 sys->update();
7154 _aux->update();
7155
7156 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); ++tid)
7157 for (const auto i : index_range(_nl))
7158 {
7159 mooseAssert(
7160 _cm[i],
7161 "Coupling matrix not set for system "
7162 << i
7163 << ". This should only happen if a preconditioner was not setup for this system");
7164 _assembly[tid][i]->init(_cm[i].get());
7165 }
7166
7168 _displaced_problem->init();
7169
7170#ifdef MOOSE_KOKKOS_ENABLED
7172 initKokkos();
7173#endif
7174
7175 _initialized = true;
7176}
void extraSendList(std::vector< dof_id_type > &send_list, void *context)
///< Type of coordinate system
Definition SystemBase.C:38
void extraSparsity(libMesh::SparsityPattern::Graph &sparsity, std::vector< dof_id_type > &n_nz, std::vector< dof_id_type > &n_oz, void *context)
Free function used for a libMesh callback.
Definition SystemBase.C:46
virtual void preProblemInit()
Perform initializations during executing actions right before init_problem task.
Definition Executioner.h:57
virtual bool haveFV() const override
returns true if this problem includes/needs finite volume functionality.
void setCoupling(Moose::CouplingType type)
Set the coupling between variables TODO: allow user-defined coupling.
SolverParams & solverParams(unsigned int solver_sys_num=0)
Get the solver parameters.
void initKokkos()
Construct Kokkos assembly and systems and allocate Kokkos material property storages.
virtual void ghostGhostedBoundaries() override
Causes the boundaries added using addGhostedBoundary to actually be ghosted.
Executioner * getExecutioner() const
Retrieve the Executioner for this App.
Definition MooseApp.C:2020
const std::string & _type
The type of this class.
Definition MooseBase.h:378
void setupFiniteVolumeMeshData() const
Sets up the additional data needed for finite volume computations.
Definition MooseMesh.C:4156
void meshChanged()
Declares that the MooseMesh has changed, invalidates cached data and rebuilds caches.
Definition MooseMesh.C:894
void preparePRefinement()
Prepare DofMap and Assembly classes with our p-refinement information.
@ ST_JFNK
Jacobian-Free Newton Krylov.
Definition MooseTypes.h:899
@ COUPLING_FULL
Definition MooseTypes.h:787
@ COUPLING_CUSTOM
Definition MooseTypes.h:788
bool globalADIndexing()
Whether we are using global AD indexing.
Definition ADUtils.h:28

Referenced by EigenProblem::init(), and FEProblem::init().

◆ initElementStatefulProps()

void FEProblemBase::initElementStatefulProps ( const libMesh::ConstElemRange elem_range,
const bool  threaded 
)

Initialize stateful properties for elements in a specific elem_range This is needed when elements/boundary nodes are added to a specific subdomain at an intermediate step.

Definition at line 9197 of file FEProblemBase.C.

9198{
9201 if (threaded)
9202 Threads::parallel_reduce(elem_range, cmt);
9203 else
9204 cmt(elem_range, true);
9205
9206#ifdef MOOSE_KOKKOS_ENABLED
9209#endif
9210}
void initKokkosStatefulProps()

Referenced by ActivateElementsUserObjectBase::finalize(), and ElementSubdomainModifierBase::initElementStatefulProps().

◆ initialAdaptMesh()

void FEProblemBase::initialAdaptMesh ( )
virtual

Definition at line 8857 of file FEProblemBase.C.

8858{
8859 unsigned int n = adaptivity().getInitialSteps();
8861 if (n)
8862 {
8863 if (!_mesh.interiorLowerDBlocks().empty() || !_mesh.boundaryLowerDBlocks().empty())
8864 mooseError("HFEM does not support mesh adaptivity currently.");
8865
8866 TIME_SECTION("initialAdaptMesh", 2, "Performing Initial Adaptivity");
8867
8868 for (unsigned int i = 0; i < n; i++)
8869 {
8872
8874 {
8876 /*intermediate_change=*/false, /*contract_mesh=*/true, /*clean_refinement_flags=*/true);
8877
8878 // reproject the initial condition
8880
8882 }
8883 else
8884 {
8885 _console << "Mesh unchanged, skipping remaining steps..." << std::endl;
8886 return;
8887 }
8888 }
8889 }
8890}
bool initialAdaptMesh()
Used during initial adaptivity.
Definition Adaptivity.C:295
Adaptivity & adaptivity()

◆ initialized()

bool FEProblemBase::initialized ( ) const
inline
Returns
Whether the problem was initialized, i.e. whether init() has executed

Definition at line 169 of file FEProblemBase.h.

169{ return _initialized; }

Referenced by MooseMesh::update().

◆ initialSetup()

void FEProblemBase::initialSetup ( )
overridevirtual

If this is a restart run, the user may want to override the start time, which we already set in the constructor. "_time" however will have been "restored" from the restart file. We need to honor the original request of the developer now that the restore has been completed.

If we are not recovering but we are doing restart (_app.getExodusFileRestart() == true) with additional uniform refinements. We have to delay the refinement until this point in time so that the equation systems are initialized and projections can be performed.

Reimplemented from SubProblem.

Reimplemented in MFEMProblem.

Definition at line 943 of file FEProblemBase.C.

944{
945 TIME_SECTION("initialSetup", 2, "Performing Initial Setup");
946
948
950 mooseError("Checkpoint recovery and restart and exodus restart are all mutually exclusive.");
951
953 mooseWarning("MOOSE may fail to catch an exception when the \"skip_exception_check\" parameter "
954 "is used. If you receive a terse MPI error during execution, remove this "
955 "parameter and rerun your simulation");
956
957 // set state flag indicating that we are in or beyond initialSetup.
958 // This can be used to throw errors in methods that _must_ be called at construction time.
961
962 // Setup the solution states (current, old, etc) in each system based on
963 // its default and the states requested of each of its variables
964 for (const auto i : index_range(_solver_systems))
965 {
966 _solver_systems[i]->initSolutionState();
968 getDisplacedProblem()->solverSys(i).initSolutionState();
969 }
970 _aux->initSolutionState();
972 getDisplacedProblem()->auxSys().initSolutionState();
973
974 // always execute to get the max number of DoF per element and node needed to initialize phi_zero
975 // variables
976 dof_id_type global_max_var_n_dofs_per_elem = 0;
977 for (const auto i : index_range(_solver_systems))
978 {
979 auto & sys = *_solver_systems[i];
980 dof_id_type max_var_n_dofs_per_elem;
981 dof_id_type max_var_n_dofs_per_node;
982 {
983 TIME_SECTION("computingMaxDofs", 3, "Computing Max Dofs Per Element");
984
985 MaxVarNDofsPerElem mvndpe(*this, sys);
987 max_var_n_dofs_per_elem = mvndpe.max();
988 _communicator.max(max_var_n_dofs_per_elem);
989
990 MaxVarNDofsPerNode mvndpn(*this, sys);
992 max_var_n_dofs_per_node = mvndpn.max();
993 _communicator.max(max_var_n_dofs_per_node);
994 global_max_var_n_dofs_per_elem =
995 std::max(global_max_var_n_dofs_per_elem, max_var_n_dofs_per_elem);
996 }
997
998 {
999 TIME_SECTION("assignMaxDofs", 5, "Assigning Maximum Dofs Per Elem");
1000
1001 sys.assignMaxVarNDofsPerElem(max_var_n_dofs_per_elem);
1004 displaced_problem->solverSys(i).assignMaxVarNDofsPerElem(max_var_n_dofs_per_elem);
1005
1006 sys.assignMaxVarNDofsPerNode(max_var_n_dofs_per_node);
1008 displaced_problem->solverSys(i).assignMaxVarNDofsPerNode(max_var_n_dofs_per_node);
1009 }
1010 }
1011
1012 {
1013 TIME_SECTION("resizingVarValues", 5, "Resizing Variable Values");
1014
1015 for (unsigned int tid = 0; tid < libMesh::n_threads(); ++tid)
1016 {
1017 _phi_zero[tid].resize(global_max_var_n_dofs_per_elem, std::vector<Real>(getMaxQps(), 0.));
1018 _grad_phi_zero[tid].resize(global_max_var_n_dofs_per_elem,
1019 std::vector<RealGradient>(getMaxQps(), RealGradient(0.)));
1020 _second_phi_zero[tid].resize(global_max_var_n_dofs_per_elem,
1021 std::vector<RealTensor>(getMaxQps(), RealTensor(0.)));
1022 }
1023 }
1024
1025 // Set up stateful material property redistribution, if we suspect
1026 // it may be necessary later.
1028
1030 {
1031 // Only load all of the vectors if we're recovering
1033
1034 // This forces stateful material property loading to be an exact one-to-one match
1035 if (_app.isRecovering())
1036 {
1038 props->setRecovering();
1039
1040#ifdef MOOSE_KOKKOS_ENABLED
1041 for (auto props :
1043 props->setRecovering();
1044#endif
1045 }
1046
1047 TIME_SECTION("restore", 3, "Restoring from backup");
1048
1049 // We could have a cached backup when this app is a sub-app and has been given a Backup
1050 if (!_app.hasInitialBackup())
1052 else
1054
1060 if (_app.isRestarting())
1061 {
1062 if (_app.hasStartTime())
1064 else
1065 {
1067 _time_old = _time;
1068 }
1069 }
1070 }
1071 else
1072 {
1074
1075 if (reader)
1076 {
1077 TIME_SECTION("copyingFromExodus", 3, "Copying Variables From Exodus");
1078
1079 for (auto & sys : _solver_systems)
1080 sys->copyVars(*reader);
1081 _aux->copyVars(*reader);
1082 }
1083 else
1084 {
1085 if (_solver_systems[0]->hasVarCopy() || _aux->hasVarCopy())
1086 mooseError("Need Exodus reader to restart variables but the reader is not available\n"
1087 "Use either FileMesh with an Exodus mesh file or FileMeshGenerator with an "
1088 "Exodus mesh file and with use_for_exodus_restart equal to true");
1089 }
1090 }
1091
1092 // Perform output related setups
1094
1095 // Flush all output to _console that occur during construction and initialization of objects
1097
1098 // Build Refinement and Coarsening maps for stateful material projections if necessary
1099 if ((_adaptivity.isOn() || _num_grid_steps) &&
1102 {
1104 mooseError("Stateful neighbor material properties do not work with mesh adaptivity");
1105
1107 }
1108
1109 if (!_app.isRecovering())
1110 {
1117 {
1118 if (!_app.isUltimateMaster())
1119 mooseError(
1120 "Doing extra refinements when restarting is NOT supported for sub-apps of a MultiApp");
1121
1123 }
1124 }
1125
1126 unsigned int n_threads = libMesh::n_threads();
1127
1128 // Convergence initial setup
1129 {
1130 TIME_SECTION("convergenceInitialSetup", 5, "Initializing Convergence objects");
1131
1132 for (THREAD_ID tid = 0; tid < n_threads; tid++)
1134 }
1135
1136 // UserObject initialSetup
1137 std::set<std::string> depend_objects_ic = _ics.getDependObjects();
1138 std::set<std::string> depend_objects_aux = _aux->getDependObjects();
1139
1140 std::map<int, std::vector<UserObjectBase *>> group_userobjs;
1141
1142 // This replaces all prior updateDependObjects calls on the old user object warehouses.
1143 TheWarehouse::Query uo_query = theWarehouse().query().condition<AttribSystem>("UserObject");
1144 std::vector<UserObjectBase *> userobjs;
1145 uo_query.queryInto(userobjs);
1147 theWarehouse(), getAuxiliarySystem(), _app.getExecuteOnEnum(), userobjs, depend_objects_ic);
1148
1149 for (auto obj : userobjs)
1150 group_userobjs[obj->getParam<int>("execution_order_group")].push_back(obj);
1151
1152#ifdef MOOSE_KOKKOS_ENABLED
1153 {
1154 TheWarehouse::Query uo_query =
1155 theWarehouse().query().condition<AttribSystem>("KokkosUserObject");
1156 std::vector<UserObjectBase *> userobjs;
1157 uo_query.queryInto(userobjs);
1159 theWarehouse(), getAuxiliarySystem(), _app.getExecuteOnEnum(), userobjs, depend_objects_ic);
1160
1161 for (auto obj : userobjs)
1162 group_userobjs[obj->getParam<int>("execution_order_group")].push_back(obj);
1163 }
1164#endif
1165
1166 for (auto & [group, objs] : group_userobjs)
1167 for (auto obj : objs)
1168 obj->initialSetup();
1169
1170 // check if jacobian calculation is done in userobject
1171 for (THREAD_ID tid = 0; tid < n_threads; ++tid)
1173
1174 // Check whether nonlocal coupling is required or not
1178
1179 {
1180 TIME_SECTION("initializingFunctions", 5, "Initializing Functions");
1181
1182 // Call the initialSetup methods for functions
1183 for (THREAD_ID tid = 0; tid < n_threads; tid++)
1184 {
1185 reinitScalars(tid); // initialize scalars so they are properly sized for use as input into
1186 // ParsedFunctions
1188 }
1189
1190#ifdef MOOSE_KOKKOS_ENABLED
1192#endif
1193 }
1194
1195 {
1196 TIME_SECTION("initializingRandomObjects", 5, "Initializing Random Objects");
1197
1198 // Random interface objects
1199 for (const auto & it : _random_data_objects)
1200 it.second->updateSeeds(EXEC_INITIAL);
1201 }
1202
1203 if (!_app.isRecovering())
1204 {
1206
1207 {
1208 TIME_SECTION("ICinitialSetup", 5, "Setting Up Initial Conditions");
1209
1210 for (THREAD_ID tid = 0; tid < n_threads; tid++)
1211 {
1212 _ics.initialSetup(tid);
1213 _fv_ics.initialSetup(tid);
1214 }
1215
1217 }
1218
1220 }
1221
1222 // Materials
1224 {
1225 TIME_SECTION("materialInitialSetup", 3, "Setting Up Materials");
1226
1227 for (THREAD_ID tid = 0; tid < n_threads; tid++)
1228 {
1229 // Sort the Material objects, these will be actually computed by MOOSE in reinit methods.
1230 _materials.sort(tid);
1232
1233 // Call initialSetup on all material objects
1235
1236 // Discrete materials may insert additional dependencies on materials during the initial
1237 // setup. Therefore we resolve the dependencies once more, now with the additional
1238 // dependencies due to discrete materials.
1240 {
1241 _materials.sort(tid);
1243 }
1244 }
1245
1246#ifdef MOOSE_KOKKOS_ENABLED
1247 _kokkos_materials.sort(0, true);
1248#endif
1249
1250 {
1251 TIME_SECTION("computingInitialStatefulProps", 3, "Computing Initial Material Values");
1252
1254
1258#ifdef MOOSE_KOKKOS_ENABLED
1263#endif
1264 }
1265 }
1266
1267 // setRestartInPlace() is set because the property maps have now been setup and we can
1268 // dataLoad() them directly in place
1269 // setRecovering() is set because from now on we require a one-to-one mapping of
1270 // stateful properties because we shouldn't be declaring any more
1272 {
1273 props->setRestartInPlace();
1274 props->setRecovering();
1275 }
1276
1277 for (THREAD_ID tid = 0; tid < n_threads; tid++)
1278 {
1281 _markers.sort(tid);
1283 }
1284
1285#ifdef LIBMESH_ENABLE_AMR
1286
1288 {
1289 unsigned int n = adaptivity().getInitialSteps();
1290 if (n && !_app.isUltimateMaster() && _app.isRestarting())
1291 mooseError("Cannot perform initial adaptivity during restart on sub-apps of a MultiApp!");
1292
1294 }
1295
1296#endif // LIBMESH_ENABLE_AMR
1297
1298 if (!_app.isRecovering() && !_app.isRestarting())
1299 {
1300 // During initial setup the solution is copied to the older solution states (old, older, etc)
1302
1303 // Check if there are old state initial conditions
1304 auto ics = _ics.getActiveObjects();
1305 auto fv_ics = _fv_ics.getActiveObjects();
1306 auto scalar_ics = _scalar_ics.getActiveObjects();
1307 unsigned short ic_state_max = 0;
1308
1309 auto findMax = [&ic_state_max](const auto & obj_list)
1310 {
1311 for (auto ic : obj_list.getActiveObjects())
1312 ic_state_max = std::max(ic_state_max, ic->getState());
1313 };
1314 findMax(_ics);
1315 findMax(_fv_ics);
1316 findMax(_scalar_ics);
1317
1318 // if there are old state ICs, compute them and write to old states accordingly
1319 if (ic_state_max > 0)
1320 {
1321 // state 0 copy (we'll overwrite current state when evaluating ICs and need to restore it once
1322 // we're done with the old/older state ICs)
1323 std::vector<std::unique_ptr<NumericVector<Real>>> state0_sys_buffers(_solver_systems.size());
1324 std::unique_ptr<NumericVector<Real>> state0_aux_buffer;
1325
1326 // save state 0
1327 for (const auto i : index_range(_solver_systems))
1328 state0_sys_buffers[i] = _solver_systems[i]->solutionState(0).clone();
1329
1330 state0_aux_buffer = _aux->solutionState(0).clone();
1331
1332 // compute old state ICs
1333 for (_current_ic_state = 1; _current_ic_state <= ic_state_max; _current_ic_state++)
1334 {
1336
1337 for (auto & sys : _solver_systems)
1338 sys->solutionState(_current_ic_state) = sys->solutionState(0);
1339
1340 _aux->solutionState(_current_ic_state) = _aux->solutionState(0);
1341 }
1343
1344 // recover state 0
1345 for (const auto i : index_range(_solver_systems))
1346 {
1347 _solver_systems[i]->solutionState(0) = *state0_sys_buffers[i];
1348 _solver_systems[i]->solutionState(0).close();
1349 _solver_systems[i]->update();
1350 }
1351 _aux->solutionState(0) = *state0_aux_buffer;
1352 _aux->solutionState(0).close();
1353 _aux->update();
1354 }
1355 }
1356
1357 if (!_app.isRecovering())
1358 {
1359 if (haveXFEM())
1361 }
1362
1363 // Call initialSetup on the solver systems
1364 for (auto & sys : _solver_systems)
1365 sys->initialSetup();
1366
1367 // Auxilary variable initialSetup calls
1368 _aux->initialSetup();
1369
1371 // initialSetup for displaced systems
1372 _displaced_problem->initialSetup();
1373
1374 for (auto & sys : _solver_systems)
1375 sys->setSolution(*(sys->system().current_local_solution.get()));
1376
1377 // Update the nearest node searches (has to be called after the problem is all set up)
1378 // We do this here because this sets up the Element's DoFs to ghost
1380
1382 if (_displaced_mesh)
1384
1385 // We need to move the mesh in order to build a map between mortar secondary and primary
1386 // interfaces. This map will then be used by the AgumentSparsityOnInterface ghosting functor to
1387 // know which dofs we need ghosted when we call EquationSystems::reinit
1388 if (_displaced_problem && _mortar_data->hasDisplacedObjects())
1389 {
1390 _displaced_problem->updateMesh();
1391 // if displacements were applied to the mesh, the mortar mesh should be updated too
1393 }
1394
1395 // Possibly reinit one more time to get ghosting correct
1397
1398 if (_displaced_mesh)
1399 _displaced_problem->updateMesh();
1400
1401 updateGeomSearch(); // Call all of the rest of the geometric searches
1402
1403 for (auto & sys : _solver_systems)
1404 {
1405 const auto & tis = sys->getTimeIntegrators();
1406
1407 {
1408 TIME_SECTION("timeIntegratorInitialSetup", 5, "Initializing Time Integrator");
1409 for (auto & ti : tis)
1410 ti->initialSetup();
1411 }
1412 }
1413
1414 // HUGE NOTE: MultiApp initialSetup() MUST... I repeat MUST be _after_ main-app restartable data
1415 // has been restored
1416
1417 // Call initialSetup on the MultiApps
1418 if (_multi_apps.hasObjects())
1419 {
1420 TIME_SECTION("initialSetupMultiApps", 2, "Initializing MultiApps", false);
1421 // Assign concurrent multiapps their disjoint rank partitions before the sub-apps are created
1422 // so that each is created on the communicator it will actually run on
1425 }
1426
1427 // Call initialSetup on the transfers
1428 {
1429 TIME_SECTION("initialSetupTransfers", 2, "Initializing Transfers");
1430
1432
1433 // Call initialSetup on the MultiAppTransfers to be executed on TO_MULTIAPP
1434 const auto & to_multi_app_objects = _to_multi_app_transfers.getActiveObjects();
1435 for (const auto & transfer : to_multi_app_objects)
1436 {
1437 transfer->setCurrentDirection(Transfer::DIRECTION::TO_MULTIAPP);
1438 transfer->initialSetup();
1439 }
1440
1441 // Call initialSetup on the MultiAppTransfers to be executed on FROM_MULTIAPP
1442 const auto & from_multi_app_objects = _from_multi_app_transfers.getActiveObjects();
1443 for (const auto & transfer : from_multi_app_objects)
1444 {
1445 transfer->setCurrentDirection(Transfer::DIRECTION::FROM_MULTIAPP);
1446 transfer->initialSetup();
1447 }
1448
1449 // Call initialSetup on the MultiAppTransfers to be executed on BETWEEN_MULTIAPP
1450 const auto & between_multi_app_objects = _between_multi_app_transfers.getActiveObjects();
1451 for (const auto & transfer : between_multi_app_objects)
1452 {
1453 transfer->setCurrentDirection(Transfer::DIRECTION::BETWEEN_MULTIAPP);
1454 transfer->initialSetup();
1455 }
1456 }
1457
1459 {
1460 TIME_SECTION("BoundaryRestrictedNodeIntegrityCheck", 5);
1461
1462 // check that variables are defined along boundaries of boundary restricted nodal objects
1463 const auto & bnd_nodes = getCurrentAlgebraicBndNodeRange();
1464 BoundaryNodeIntegrityCheckThread bnict(*this, uo_query);
1465 Threads::parallel_reduce(bnd_nodes, bnict);
1466
1467 // Nodal bcs aren't threaded
1468 for (auto & nl : _nl)
1469 {
1470 const auto & nodal_bcs = nl->getNodalBCWarehouse();
1471 if (!nodal_bcs.hasBoundaryObjects())
1472 continue;
1473
1474 for (const auto & bnode : bnd_nodes)
1475 {
1476 const auto boundary_id = bnode->_bnd_id;
1477 const Node * const node = bnode->_node;
1478
1479 if (node->processor_id() != this->processor_id())
1480 continue;
1481
1482 const auto & bnd_name = _mesh.getBoundaryName(boundary_id);
1483
1484 // Avoid assertion in getBoundaryObjects that we have boundary objects for this boundary ID
1485 if (!nodal_bcs.hasBoundaryObjects(boundary_id))
1486 continue;
1487
1488 const auto & bnd_objects = nodal_bcs.getBoundaryObjects(boundary_id);
1489 for (const auto & bnd_object : bnd_objects)
1490 {
1491 const auto & bnd_variable = bnd_object->variable();
1492 // Skip if this object uses geometric search because coupled variables may be defined on
1493 // paired boundaries instead of the boundary this node is on. Also skip if this boundary
1494 // condition isn't applicable to the current node, e.g. if the node doesn't have any
1495 // degrees of freedom for the boundary condition's variable
1496 if (!bnd_object->requiresGeometricSearch() &&
1497 bnd_object->checkVariableBoundaryIntegrity() &&
1498 node->n_dofs(nl->number(), bnd_variable.number()))
1499 {
1500 std::set<MooseVariableFieldBase *> vars_to_omit = {
1501 &cast_ref<MooseVariableFieldBase &>(const_cast<MooseVariableBase &>(bnd_variable))};
1502
1504 *bnd_object, bnd_object->checkAllVariables(*node, vars_to_omit), bnd_name);
1505 }
1506 }
1507 }
1508 }
1509 }
1510
1512 {
1513 TIME_SECTION("BoundaryRestrictedElemIntegrityCheck", 5);
1514
1515 // check that variables are defined along boundaries of boundary restricted elemental objects
1517 BoundaryElemIntegrityCheckThread beict(*this, uo_query);
1518 Threads::parallel_reduce(bnd_elems, beict);
1519 }
1520
1522 {
1523 TIME_SECTION("FVFaceIntegrityCheck", 5);
1524
1525 auto check_fv_face_integrity = [this](MooseMesh & fv_mesh, const bool on_displaced)
1526 {
1527 auto flux_bc_base_query = theWarehouse()
1528 .query()
1529 .condition<AttribSystem>("FVFluxBC")
1530 .condition<AttribDisplaced>(on_displaced)
1531 .condition<AttribThread>(0);
1532 TheWarehouse::QueryCache<AttribBoundaries> flux_bc_query(flux_bc_base_query);
1533
1534 auto interface_kernel_base_query = theWarehouse()
1535 .query()
1536 .condition<AttribSystem>("FVInterfaceKernel")
1537 .condition<AttribDisplaced>(on_displaced)
1538 .condition<AttribThread>(0);
1539 TheWarehouse::QueryCache<AttribBoundaries> interface_kernel_query(
1540 interface_kernel_base_query);
1541
1542 std::vector<FVFluxBC *> flux_bcs;
1543 std::vector<FVInterfaceKernel *> interface_kernels;
1544
1545 for (auto face_it = fv_mesh.ownedFaceInfoBegin(); face_it != fv_mesh.ownedFaceInfoEnd();
1546 ++face_it)
1547 {
1548 const FaceInfo & fi = **face_it;
1549
1550 for (const auto boundary_id : fi.boundaryIDs())
1551 {
1552 auto boundary_key = std::make_tuple(boundary_id, false);
1553
1554 flux_bc_query.queryInto(flux_bcs, boundary_key);
1555 for (const auto * const flux_bc : flux_bcs)
1556 if (flux_bc->checkVariableBoundaryIntegrity())
1557 flux_bc->checkFaceIntegrity(fi);
1558
1559 interface_kernel_query.queryInto(interface_kernels, boundary_key);
1560 for (const auto * const interface_kernel : interface_kernels)
1561 interface_kernel->checkFaceIntegrity(fi);
1562 }
1563 }
1564 };
1565
1566 if (haveFV())
1567 check_fv_face_integrity(mesh(), false);
1568
1569 if (_displaced_problem && _displaced_problem->haveFV())
1570 check_fv_face_integrity(_displaced_problem->mesh(), true);
1571 }
1572
1573 if (!_app.isRecovering())
1574 {
1576 if (!converged)
1577 mooseError("failed to converge initial MultiApp");
1578
1579 // We'll backup the Multiapp here
1581
1582 for (THREAD_ID tid = 0; tid < n_threads; tid++)
1583 reinitScalars(tid);
1584
1586
1587 // The FEProblemBase::execute method doesn't call all the systems on EXEC_INITIAL, but it does
1588 // set/unset the current flag. Therefore, this resets the current flag to EXEC_INITIAL so that
1589 // subsequent calls (e.g., executeControls) have the proper flag.
1591 }
1592
1593 // Here we will initialize the stateful properties once more since they may have been updated
1594 // during initialSetup by calls to computeProperties.
1595 //
1596 // It's really bad that we don't allow this during restart. It means that we can't add new
1597 // stateful materials
1598 // during restart. This is only happening because this _has_ to be below initial userobject
1599 // execution.
1600 // Otherwise this could be done up above... _before_ restoring restartable data... which would
1601 // allow you to have
1602 // this happen during restart. I honestly have no idea why this has to happen after initial user
1603 // object computation.
1604 // THAT is something we should fix... so I've opened this ticket: #5804
1605 if (!_app.isRecovering() && !_app.isRestarting())
1606 {
1609 {
1610 TIME_SECTION("computeMaterials", 2, "Computing Initial Material Properties");
1611
1613 }
1614#ifdef MOOSE_KOKKOS_ENABLED
1618 {
1619 TIME_SECTION("computeMaterials", 2, "Computing Initial Material Properties");
1620
1622 }
1623#endif
1624 }
1625
1626 // Control Logic
1629
1630 // Scalar variables need to reinited for the initial conditions to be available for output
1631 for (unsigned int tid = 0; tid < n_threads; tid++)
1632 reinitScalars(tid);
1633
1634 if (_displaced_mesh)
1635 _displaced_problem->syncSolutions();
1636
1637 // Writes all calls to _console from initialSetup() methods
1639
1641 {
1643 for (THREAD_ID tid = 0; tid < n_threads; ++tid)
1644 for (auto & assembly : _assembly[tid])
1645 assembly->initNonlocalCoupling();
1646 }
1647
1648 {
1649 TIME_SECTION("lineSearchInitialSetup", 5, "Initializing Line Search");
1650
1651 if (_line_search)
1652 _line_search->initialSetup();
1653 }
1654
1655 // Perform Reporter get/declare check
1657
1658 // We do this late to allow objects to get late restartable data
1661
1663}
void boundaryIntegrityCheckError(const MooseObject &object, const std::set< MooseVariableFieldBase * > &variables, const BoundaryName &boundary_name)
Compose boundary restricted error message for the provided object, variables, and boundary_name if th...
void groupUserObjects(TheWarehouse &w, AuxiliarySystem &aux, const ExecFlagEnum &execute_flags, const std::vector< T * > &objs, const std::set< std::string > &ic_deps)
void uniformRefineWithProjection()
Performs uniform refinement on the meshes in the current object.
Definition Adaptivity.C:328
unsigned int getMaxQps() const
virtual bool updateMeshXFEM()
Update the mesh due to changing XFEM cuts.
bool haveXFEM()
Find out whether the current analysis is using XFEM.
void addAnyRedistributers()
void initElementStatefulProps(const libMesh::ConstElemRange &elem_range, const bool threaded)
Initialize stateful properties for elements in a specific elem_range This is needed when elements/bou...
void checkNonlocalCoupling()
virtual std::shared_ptr< const DisplacedProblem > getDisplacedProblem() const
void reinitBecauseOfGhostingOrNewGeomObjects(bool mortar_changed=false)
Call when it is possible that the needs for ghosted elements has changed.
const ConstBndNodeRange & getCurrentAlgebraicBndNodeRange()
void setNonlocalCouplingMatrix()
Set custom coupling matrix for variables requiring nonlocal contribution.
void setVariableAllDoFMap(const std::vector< const MooseVariableFEBase * > &moose_vars)
void checkUserObjectJacobianRequirement(THREAD_ID tid)
virtual void initialAdaptMesh()
void backupMultiApps(ExecFlagType type)
Backup the MultiApps associated with the ExecFlagType.
virtual void updateGeomSearch(GeometricSearchData::GeometricSearchType type=GeometricSearchData::ALL) override
Update this object's geometric search data as well as the displaced problem's if it exists.
virtual Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) override
void partitionConcurrentMultiApps()
Assign each multiapp that shares an 'execution_order_group' with others a disjoint subset of the rank...
virtual void copySolutionsBackwards()
void initialSetup() override
void initialSetup(THREAD_ID tid)
Initial setup.
This data structure is used to store geometric and variable related metadata about each cell face in ...
Definition FaceInfo.h:38
std::set< std::string > getDependObjects() const
Get a list of dependent UserObjects for this exec type.
void initialSetup(THREAD_ID tid)
Initial setup.
void sort(THREAD_ID tid=0, bool sort_all_objects=false)
By default, this method only sorts block and boundary-wise object storages that are used by the MOOSE...
virtual void initialSetup(THREAD_ID tid=0) const override
Convenience methods for calling object setup methods that handle the extra neighbor and face objects.
bool restoredInitialBackupMesh() const
Whether this app has restored mesh topology from its initial Backup object.
Definition MooseApp.h:750
void restoreFromInitialBackup(const bool for_restart)
Restores from a "initial" backup, that is, one set in _initial_backup.
Definition MooseApp.C:1805
bool hasStartTime() const
Definition MooseApp.h:301
std::unique_ptr< Backup > finalizeRestore()
Finalizes (closes) the restoration process done in restore().
Definition MooseApp.C:1812
void restore(const std::filesystem::path &folder_base, const bool for_restart)
Restore an application from file.
Definition MooseApp.C:1761
std::string getRestartRecoverFileBase() const
The file_base for the recovery file.
Definition MooseApp.h:500
const ExecFlagEnum & getExecuteOnEnum() const
Return the app level ExecFlagEnum, this contains all the available flags for the app.
Definition MooseApp.h:1040
bool getExodusFileRestart() const
Whether or not we need to use a separate Exodus reader to read the mesh BEFORE we create the mesh.
Definition MooseApp.h:436
bool isRecovering() const
Whether or not this is a "recover" calculation.
Definition MooseApp.C:1674
bool hasInitialBackup() const
Definition MooseApp.h:1047
Real getStartTime() const
Definition MooseApp.h:306
std::filesystem::path restartFolderBase(const std::filesystem::path &folder_base) const
The file suffix for restartable data.
Definition MooseApp.C:3059
face_info_iterator ownedFaceInfoEnd()
Definition MooseMesh.C:1467
unsigned int uniformRefineLevel() const
Returns the level of uniform refinement requested (zero if AMR is disabled).
Definition MooseMesh.C:3280
void buildRefinementAndCoarseningMaps(Assembly *assembly)
Create the refinement and coarsening maps necessary for projection of stateful material properties wh...
Definition MooseMesh.C:2476
const std::string & getBoundaryName(const BoundaryID boundary_id) const
Return the name of the boundary given the id.
Definition MooseMesh.C:1743
face_info_iterator ownedFaceInfoBegin()
Iterators to owned faceInfo objects.
Definition MooseMesh.C:1458
void updateActiveSemiLocalNodeRange(std::set< dof_id_type > &ghosted_elems)
Clears the "semi-local" node list and rebuilds it.
Definition MooseMesh.C:962
libMesh::StoredRange< MooseMesh::const_bnd_elem_iterator, const BndElement * > * getBoundaryElementRange()
Definition MooseMesh.C:1303
void sort(THREAD_ID tid=0)
Sort the objects using the DependencyResolver.
bool hasObjects(THREAD_ID tid=0) const
Convenience functions for determining if objects exist.
virtual void initialSetup(THREAD_ID tid=0) const
Convenience methods for calling object setup methods.
Base variable class.
void initialSetup()
Calls the initialSetup function for each of the output objects.
void check() const
Perform integrity check for get/declare calls.
void setLoadAllVectors(const bool load_all_vectors)
Sets whether or not all vectors are to be loaded.
virtual void initialSetup()
virtual bool converged(const unsigned int sys_num)
Eventually we want to convert this virtual over to taking a solver system number argument.
Definition SubProblem.h:113
std::vector< T * > & queryInto(std::vector< T * > &results, Args &&... args)
queryInto executes the query and stores the results in the given vector.
RealTensorValue RealTensor
uint8_t dof_id_type
RealVectorValue RealGradient

Referenced by EigenExecutionerBase::init(), Eigenvalue::init(), Steady::init(), TransientBase::init(), and MFEMProblem::initialSetup().

◆ initKokkos()

void FEProblemBase::initKokkos ( )

Construct Kokkos assembly and systems and allocate Kokkos material property storages.

Referenced by init().

◆ initKokkosStatefulProps()

void FEProblemBase::initKokkosStatefulProps ( )

◆ initNullSpaceVectors()

void FEProblemBase::initNullSpaceVectors ( const InputParameters parameters,
std::vector< std::shared_ptr< NonlinearSystemBase > > &  nl 
)
virtual

Definition at line 818 of file FEProblemBase.C.

820{
821 TIME_SECTION("initNullSpaceVectors", 5, "Initializing Null Space Vectors");
822
823 unsigned int dimNullSpace = parameters.get<unsigned int>("null_space_dimension");
824 unsigned int dimTransposeNullSpace =
825 parameters.get<unsigned int>("transpose_null_space_dimension");
826 unsigned int dimNearNullSpace = parameters.get<unsigned int>("near_null_space_dimension");
827 for (unsigned int i = 0; i < dimNullSpace; ++i)
828 {
829 std::ostringstream oss;
830 oss << "_" << i;
831 // do not project, since this will be recomputed, but make it ghosted, since the near nullspace
832 // builder might march over all nodes
833 for (auto & nl : nls)
834 nl->addVector("NullSpace" + oss.str(), false, libMesh::GHOSTED);
835 }
836 _subspace_dim["NullSpace"] = dimNullSpace;
837 for (unsigned int i = 0; i < dimTransposeNullSpace; ++i)
838 {
839 std::ostringstream oss;
840 oss << "_" << i;
841 // do not project, since this will be recomputed, but make it ghosted, since the near nullspace
842 // builder might march over all nodes
843 for (auto & nl : nls)
844 nl->addVector("TransposeNullSpace" + oss.str(), false, libMesh::GHOSTED);
845 }
846 _subspace_dim["TransposeNullSpace"] = dimTransposeNullSpace;
847 for (unsigned int i = 0; i < dimNearNullSpace; ++i)
848 {
849 std::ostringstream oss;
850 oss << "_" << i;
851 // do not project, since this will be recomputed, but make it ghosted, since the near-nullspace
852 // builder might march over all semilocal nodes
853 for (auto & nl : nls)
854 nl->addVector("NearNullSpace" + oss.str(), false, libMesh::GHOSTED);
855 }
856 _subspace_dim["NearNullSpace"] = dimNearNullSpace;
857}
std::map< std::string, unsigned int > _subspace_dim
Dimension of the subspace spanned by the vectors with a given prefix.

Referenced by EigenProblem::EigenProblem(), and FEProblem::FEProblem().

◆ initPetscOutputAndSomeSolverSettings()

void FEProblemBase::initPetscOutputAndSomeSolverSettings ( )
virtual

Reinitialize PETSc output for proper linear/nonlinear iteration display.

This also may be used for some PETSc-related solver settings

Reimplemented in EigenProblem.

Definition at line 7603 of file FEProblemBase.C.

7604{
7607}
void solveSetup()
Calls the timestepSetup function for each of the output objects.
void petscSetDefaults(FEProblemBase &problem)
Sets the default options for PETSc.

Referenced by possiblyRebuildGeomSearchPatches(), AStableDirk4::solve(), ExplicitRK2::solve(), ExplicitTVDRK2::solve(), ImplicitMidpoint::solve(), LStableDirk2::solve(), LStableDirk3::solve(), LStableDirk4::solve(), and solve().

◆ initXFEM()

void FEProblemBase::initXFEM ( std::shared_ptr< XFEMInterface xfem)

Create XFEM controller object.

Definition at line 8955 of file FEProblemBase.C.

8956{
8957 _xfem = xfem;
8958 _xfem->setMesh(&_mesh);
8959 if (_displaced_mesh)
8960 _xfem->setDisplacedMesh(_displaced_mesh);
8961
8962 auto fill_data = [](auto & storage)
8963 {
8964 std::vector<MaterialData *> data(libMesh::n_threads());
8965 for (const auto tid : make_range(libMesh::n_threads()))
8966 data[tid] = &storage.getMaterialData(tid);
8967 return data;
8968 };
8969 _xfem->setMaterialData(fill_data(_material_props));
8970 _xfem->setBoundaryMaterialData(fill_data(_bnd_material_props));
8971
8972 unsigned int n_threads = libMesh::n_threads();
8973 for (unsigned int i = 0; i < n_threads; ++i)
8974 for (const auto nl_sys_num : index_range(_nl))
8975 {
8976 _assembly[i][nl_sys_num]->setXFEM(_xfem);
8978 _displaced_problem->assembly(i, nl_sys_num).setXFEM(_xfem);
8979 }
8980}
MaterialData & getMaterialData(Moose::MaterialDataType type, const THREAD_ID tid=0, const MooseObject *object=nullptr) const
void fill_data(std::map< processor_id_type, std::vector< std::set< unsigned int > > > &data, int M)

◆ isKokkosObject()

bool MooseObject::isKokkosObject ( ) const
inlineinherited

Get whether this object is a Kokkos functor The parameter MooseBase::kokkos_object_param is set by the Kokkos base classes.

Definition at line 63 of file MooseObject.h.

63{ return parameters().isKokkosObject(); }

Referenced by AttribKokkos::initFrom(), BlockRestrictable::initializeBlockRestrictable(), and BoundaryRestrictable::initializeBoundaryRestrictable().

◆ isMatPropRequested()

bool SubProblem::isMatPropRequested ( const std::string &  prop_name) const
virtualinherited

Find out if a material property has been requested by any object.

Definition at line 729 of file SubProblem.C.

730{
731 return _material_property_requested.find(prop_name) != _material_property_requested.end();
732}
std::set< std::string > _material_property_requested
set containing all material property names that have been requested by getMaterialProperty*

◆ isParamSetByUser()

bool MooseBase::isParamSetByUser ( const std::string &  name) const
inlineinherited

Test if the supplied parameter is set by a user, as opposed to not set or set to default.

Parameters
nameThe name of the parameter to test

Definition at line 205 of file MooseBase.h.

206 {
208 }

Referenced by DiffusionCG::addFEBCs(), DiffusionPhysicsBase::addInitialConditions(), CylinderComponent::addMeshGenerators(), AdvancedExtruderGenerator::AdvancedExtruderGenerator(), MFEMMesh::buildMesh(), MFEMBoundarySubMesh::buildSubMesh(), MFEMDomainSubMesh::buildSubMesh(), SurfaceDelaunayGeneratorBase::checkBoundaryAndHolesParams(), LibtorchNeuralNetControl::conditionalParameterError(), ConservativeAdvectionBCTempl< is_ad >::ConservativeAdvectionBCTempl(), MooseApp::copyInputs(), DiffusionPhysicsBase::DiffusionPhysicsBase(), MooseApp::errorCheck(), FileMesh::FileMesh(), FullSolveMultiApp::FullSolveMultiApp(), MeshDiagnosticsGenerator::generate(), OrientSurfaceMeshGenerator::generate(), SurfaceSubdomainsFromAllNormalsGenerator::generate(), MFEMVectorFESpace::getFECName(), MooseBase::getRenamedParam(), DefaultConvergenceBase::getSharedExecutionerParam(), AddVariableAction::init(), MFEMMesh::init(), PhysicsBase::initializePhysics(), ElementSubdomainModifierBase::initialSetup(), MatrixSymmetryCheck::MatrixSymmetryCheck(), MeshDiagnosticsGenerator::MeshDiagnosticsGenerator(), MFEMGeneratedMeshGenerator::MFEMGeneratedMeshGenerator(), MFEMVariable::MFEMVariable(), MortarConstraintBase::MortarConstraintBase(), MoveNodesByParsedExpressionModifier::moveNodes(), MultiAppGeneralFieldFunctorTransfer::MultiAppGeneralFieldFunctorTransfer(), MultiAppGeneralFieldTransfer::MultiAppGeneralFieldTransfer(), OrientSurfaceMeshGenerator::OrientSurfaceMeshGenerator(), SolutionInvalidityOutput::output(), Output::Output(), MultiAppGeneralFieldTransfer::outputValueConflicts(), PetscExternalPartitioner::partition(), PolyLineMeshFollowingNodeSetGenerator::PolyLineMeshFollowingNodeSetGenerator(), MooseMesh::prepare(), SolutionUserObjectBase::readXda(), ReferenceResidualConvergence::ReferenceResidualConvergence(), PhysicsBase::reportPotentiallyMissedParameters(), MooseApp::run(), MooseApp::runInputFile(), MooseApp::runInputs(), Moose::MFEM::LinearSolverBase::SetPreconditioner(), SetupMeshAction::setupMesh(), MooseApp::setupOptions(), SideSetsFromBoundingBoxGenerator::SideSetsFromBoundingBoxGenerator(), SmoothMeshGenerator::SmoothMeshGenerator(), SurfaceSubdomainsDelaunayRemesher::SurfaceSubdomainsDelaunayRemesher(), SurfaceSubdomainsFromAllNormalsGenerator::SurfaceSubdomainsFromAllNormalsGenerator(), TagVectorAux::TagVectorAux(), TimedSubdomainModifier::TimedSubdomainModifier(), TimeIntegratedPostprocessor::TimeIntegratedPostprocessor(), TriToQuadConverter::TriToQuadConverter(), XYFrontalDelaunayGenerator::XYFrontalDelaunayGenerator(), and XYZDelaunayGenerator::XYZDelaunayGenerator().

◆ isParamValid()

bool MooseBase::isParamValid ( const std::string &  name) const
inlineinherited

Test if the supplied parameter is valid.

Parameters
nameThe name of the parameter to test

Definition at line 199 of file MooseBase.h.

199{ return _pars.isParamValid(name); }

Referenced by GridPartitioner::_do_partition(), HierarchicalGridPartitioner::_do_partition(), AddVariableAction::act(), AutoCheckpointAction::act(), CommonOutputAction::act(), ComposeTimeStepperAction::act(), CopyNodalVarsAction::act(), CreateDisplacedProblemAction::act(), SetAdaptivityOptionsAction::act(), SetupDebugAction::act(), SetupMeshCompleteAction::act(), DiffusionCG::addFEKernels(), DiffusionFV::addFVBCs(), DiffusionFV::addFVKernels(), DiffusionPhysicsBase::addInitialConditions(), ComponentJunction::addMeshGenerators(), CylinderComponent::addMeshGenerators(), DiffusionPhysicsBase::addPostprocessors(), AdvancedExtruderGenerator::AdvancedExtruderGenerator(), AdvectiveFluxAux::AdvectiveFluxAux(), ArrayHFEMDirichletBC::ArrayHFEMDirichletBC(), ArrayVarReductionAux::ArrayVarReductionAux(), BicubicSplineFunction::BicubicSplineFunction(), BlockDeletionGenerator::BlockDeletionGenerator(), BSplineCurveGenerator::BSplineCurveGenerator(), TimedSubdomainModifier::buildFromFile(), ParsedChainControl::buildFunction(), GeneratedMesh::buildMesh(), MooseMesh::buildTypedMesh(), CartesianGridDivision::CartesianGridDivision(), CartesianMeshGenerator::CartesianMeshGenerator(), SurfaceDelaunayGeneratorBase::checkBoundaryAndHolesParams(), MultiAppTransfer::checkParentAppUserObjectExecuteOn(), LibmeshPartitioner::clone(), SampledOutput::cloneMesh(), CombinedVectorPostprocessor::CombinedVectorPostprocessor(), CombinerGenerator::CombinerGenerator(), ComponentJunction::ComponentJunction(), ConservativeAdvectionBCTempl< is_ad >::ConservativeAdvectionBCTempl(), ConservativeAdvectionTempl< is_ad >::ConservativeAdvectionTempl(), FEProblemSolve::convergenceSetup(), CopyMeshPartitioner::CopyMeshPartitioner(), CSVReaderVectorPostprocessor::CSVReaderVectorPostprocessor(), CutMeshByLevelSetGeneratorBase::CutMeshByLevelSetGeneratorBase(), ConstantReporter::declareConstantReporterValue(), ConstantReporter::declareConstantReporterValues(), DGKernelBase::DGKernelBase(), DiffusionFluxAux::DiffusionFluxAux(), DomainUserObject::DomainUserObject(), DynamicObjectRegistrationAction::DynamicObjectRegistrationAction(), EigenProblemSolve::EigenProblemSolve(), ElementGenerator::ElementGenerator(), ElementGroupCentroidPositions::ElementGroupCentroidPositions(), PIDTransientControl::execute(), MultiAppNearestNodeTransfer::execute(), MultiAppUserObjectTransfer::execute(), Exodus::Exodus(), ExtraIDIntegralReporter::ExtraIDIntegralReporter(), ExtraIDIntegralVectorPostprocessor::ExtraIDIntegralVectorPostprocessor(), FEProblemBase(), FEProblemSolve::FEProblemSolve(), FileOutput::FileOutput(), SurfaceDelaunayGeneratorBase::fillDelaunayOptions(), SpatialUserObjectVectorPostprocessor::fillPoints(), CombinerGenerator::fillPositions(), MultiApp::fillPositions(), FiniteDifferencePreconditioner::FiniteDifferencePreconditioner(), FixedPointSolve::FixedPointSolve(), FunctionDT::FunctionDT(), FunctionValuePostprocessor::FunctionValuePostprocessor(), FVInterfaceKernel::FVInterfaceKernel(), FVMassMatrix::FVMassMatrix(), SurfaceSubdomainsDelaunayRemesher::General2DDelaunay(), AddMetaDataGenerator::generate(), BlockDeletionGenerator::generate(), BreakBoundaryOnSubdomainGenerator::generate(), BSplineCurveGenerator::generate(), ConcentricCircleMeshGenerator::generate(), DistributedRectilinearMeshGenerator::generate(), ElementGenerator::generate(), ExtraNodesetGenerator::generate(), FileMeshGenerator::generate(), GeneratedMeshGenerator::generate(), LowerDBlockFromSidesetGenerator::generate(), ManifoldSubdomainGenerator::generate(), MeshExtruderGenerator::generate(), OrientSurfaceMeshGenerator::generate(), ParsedExtraElementIDGenerator::generate(), ParsedSubdomainGeneratorBase::generate(), RenumberBySubdomainGenerator::generate(), SideSetsFromNodeSetsGenerator::generate(), SphereMeshGenerator::generate(), SubdomainBoundingBoxGenerator::generate(), SubdomainPerElementGenerator::generate(), XYDelaunayGenerator::generate(), XYMeshLineCutter::generate(), XYZDelaunayGenerator::generate(), PropertyReadFile::getFileNames(), MultiAppNearestNodeTransfer::getLocalEntitiesAndComponents(), MeshGenerator::getMeshGeneratorNameFromParam(), MeshGenerator::getMeshGeneratorNamesFromParam(), MooseBase::getRenamedParam(), MultiAppNearestNodeTransfer::getTargetLocalNodes(), AddPeriodicBCAction::getVariables(), Terminator::handleMessage(), HFEMDirichletBC::HFEMDirichletBC(), EigenExecutionerBase::init(), IterationAdaptiveDT::init(), AdvancedOutput::initAvailableLists(), AdvancedOutput::initExecutionTypes(), BlockRestrictable::initializeBlockRestrictable(), BoundaryRestrictable::initializeBoundaryRestrictable(), SolutionAux::initialSetup(), SolutionScalarAux::initialSetup(), PIDTransientControl::initialSetup(), ParsedConvergence::initialSetup(), EigenProblemSolve::initialSetup(), MooseParsedFunction::initialSetup(), MooseParsedGradFunction::initialSetup(), MooseParsedVectorFunction::initialSetup(), PiecewiseTabularBase::initialSetup(), SolutionIC::initialSetup(), Console::initialSetup(), MultiAppCloneReporterTransfer::initialSetup(), MultiAppGeneralFieldTransfer::initialSetup(), MultiAppVariableValueSampleTransfer::initialSetup(), SampledOutput::initSample(), IterationAdaptiveDT::IterationAdaptiveDT(), LeastSquaresFit::LeastSquaresFit(), LibmeshPartitioner::LibmeshPartitioner(), LibtorchNeuralNetControl::LibtorchNeuralNetControl(), PNGOutput::makePNG(), MassMatrix::MassMatrix(), MatCoupledForce::MatCoupledForce(), MeshGeneratorComponent::MeshGeneratorComponent(), MFEMProblemSolve::MFEMProblemSolve(), MooseMesh::MooseMesh(), MoosePreconditioner::MoosePreconditioner(), MooseStaticCondensationPreconditioner::MooseStaticCondensationPreconditioner(), MooseVariableBase::MooseVariableBase(), MortarConstraintBase::MortarConstraintBase(), MoveNodeGenerator::MoveNodeGenerator(), MultiApp::MultiApp(), MultiAppCloneReporterTransfer::MultiAppCloneReporterTransfer(), MultiAppGeneralFieldKDTreeTransferBase::MultiAppGeneralFieldKDTreeTransferBase(), MultiAppGeneralFieldShapeEvaluationTransfer::MultiAppGeneralFieldShapeEvaluationTransfer(), MultiAppGeneralFieldTransfer::MultiAppGeneralFieldTransfer(), MultiAppGeneralFieldUserObjectTransfer::MultiAppGeneralFieldUserObjectTransfer(), MultiAppPostprocessorInterpolationTransfer::MultiAppPostprocessorInterpolationTransfer(), MultiAppPostprocessorTransfer::MultiAppPostprocessorTransfer(), MultiAppReporterTransfer::MultiAppReporterTransfer(), MultiAppTransfer::MultiAppTransfer(), MultiAppUserObjectTransfer::MultiAppUserObjectTransfer(), MultiAppVariableValueSampleTransfer::MultiAppVariableValueSampleTransfer(), MultiPostprocessorConvergence::MultiPostprocessorConvergence(), MultiSystemSolveObject::MultiSystemSolveObject(), NodeSetsGeneratorBase::NodeSetsGeneratorBase(), EigenExecutionerBase::normalizeSolution(), OrientSurfaceMeshGenerator::OrientSurfaceMeshGenerator(), Output::Output(), ParsedCurveGenerator::ParsedCurveGenerator(), ParsedSubdomainGeneratorBase::ParsedSubdomainGeneratorBase(), PetscOutput::PetscOutput(), PhysicsBasedPreconditioner::PhysicsBasedPreconditioner(), EqualValueBoundaryConstraint::pickPrimaryNode(), PIDTransientControl::PIDTransientControl(), PiecewiseTabularBase::PiecewiseTabularBase(), PlaneIDMeshGenerator::PlaneIDMeshGenerator(), EqualValueBoundaryConstraint::populateSecondaryNodes(), MooseMesh::prepare(), MultiApp::readCommandLineArguments(), SolutionUserObjectBase::readExodusIIOrNemesis(), ReferenceResidualInterface::ReferenceResidualInterface(), RenameBlockGenerator::RenameBlockGenerator(), ReporterPointSource::ReporterPointSource(), PhysicsBase::reportPotentiallyMissedParameters(), ParsedSubdomainMeshGenerator::setBlockName(), MooseMesh::setCoordSystem(), FileOutput::setFileBaseInternal(), SideSetsGeneratorBase::setup(), SurfaceMeshGeneratorBase::setup(), Split::setup(), SetupMeshAction::setupMesh(), MooseApp::setupOptions(), Output::setWallTimeIntervalFromCommandLineParam(), SideDiffusiveFluxIntegralTempl< is_ad, T >::SideDiffusiveFluxIntegralTempl(), SideSetsGeneratorBase::SideSetsGeneratorBase(), SolutionUserObjectBase::SolutionUserObjectBase(), Terminator::Terminator(), TimeIntervalTimes::TimeIntervalTimes(), TimePeriod::TimePeriod(), PIDTransientControl::timestepSetup(), MultiAppDofCopyTransfer::transfer(), TransformGenerator::TransformGenerator(), TransientBase::TransientBase(), VariableCondensationPreconditioner::VariableCondensationPreconditioner(), VectorMagnitudeFunctorMaterialTempl< is_ad >::VectorMagnitudeFunctorMaterialTempl(), XYQuadrilateralMeshFromBoundaryCurve::XYQuadrilateralMeshFromBoundaryCurve(), and XYZDelaunayGenerator::XYZDelaunayGenerator().

◆ isSNESMFReuseBaseSetbyUser()

bool FEProblemBase::isSNESMFReuseBaseSetbyUser ( )
inline

Return a flag to indicate if _snesmf_reuse_base is set by users.

Definition at line 2664 of file FEProblemBase.h.

◆ isSolverSystemNonlinear()

bool FEProblemBase::isSolverSystemNonlinear ( const unsigned int  sys_num)
inline

◆ isSolveTerminationRequested()

virtual bool Problem::isSolveTerminationRequested ( ) const
inlinevirtualinherited

Check of termination has been requested.

This should be called by transient Executioners in the keepGoing() member.

Definition at line 43 of file Problem.h.

43{ return _termination_requested; };
bool _termination_requested
True if termination of the solve has been requested.
Definition Problem.h:58

Referenced by WebServerControl::execute(), and TransientBase::keepGoing().

◆ isTransient()

virtual bool FEProblemBase::isTransient ( ) const
inlineoverridevirtual

◆ jacobianSetup()

void FEProblemBase::jacobianSetup ( )
overridevirtual

Reimplemented from SubProblem.

Definition at line 10208 of file FEProblemBase.C.

10209{
10211 // We need to setup all the nonlinear systems other than our current one which actually called
10212 // this method (so we have to make sure we don't go in a circle)
10213 for (const auto i : make_range(numNonlinearSystems()))
10214 if (i != currentNlSysNum())
10215 _nl[i]->jacobianSetup();
10216 // We don't setup the aux sys because that's been done elsewhere
10218 _displaced_problem->jacobianSetup();
10219}
virtual unsigned int currentNlSysNum() const override
virtual void jacobianSetup()

Referenced by jacobianSetup(), and NonlinearSystemBase::jacobianSetup().

◆ joinAndFinalize()

void FEProblemBase::joinAndFinalize ( TheWarehouse::Query  query,
bool  isgen = false 
)
private

Definition at line 5329 of file FEProblemBase.C.

5330{
5331 std::vector<UserObject *> objs;
5332 query.queryInto(objs);
5333 if (!isgen)
5334 {
5335 // join all threaded user objects (i.e. not regular general user objects) to the primary
5336 // thread
5337 for (auto obj : objs)
5338 if (obj->primaryThreadCopy())
5339 obj->primaryThreadCopy()->threadJoin(*obj);
5340 }
5341
5342 query.condition<AttribThread>(0).queryInto(objs);
5343
5344 // finalize objects and retrieve/store any postprocessor values
5345 for (auto obj : objs)
5346 {
5347 if (isgen && dynamic_cast<ThreadedGeneralUserObject *>(obj))
5348 continue;
5349 if (isgen)
5350 {
5351 // general user objects are not run in their own threaded loop object - so run them here
5352 if (shouldPrintExecution(0))
5353 _console << "[DBG] Initializing, executing & finalizing general UO '" << obj->name()
5354 << "' on " << _current_execute_on_flag.name() << std::endl;
5355 obj->initialize();
5356 obj->execute();
5357 }
5358
5359 obj->finalize();
5360
5361 // These have to be stored piecemeal (with every call to this function) because general
5362 // postprocessors (which run last after other userobjects have been completed) might depend on
5363 // them being stored. This wouldn't be a problem if all userobjects satisfied the dependency
5364 // resolver interface and could be sorted appropriately with the general userobjects, but they
5365 // don't.
5366 auto pp = dynamic_cast<const Postprocessor *>(obj);
5367 if (pp)
5368 {
5369 _reporter_data.finalize(obj->name());
5370 setPostprocessorValueByName(obj->name(), pp->getValue());
5371 }
5372
5373 auto vpp = dynamic_cast<VectorPostprocessor *>(obj);
5374 if (vpp)
5375 _reporter_data.finalize(obj->name());
5376
5377 // Update Reporter data
5378 auto reporter = dynamic_cast<Reporter *>(obj);
5379 if (reporter)
5380 _reporter_data.finalize(obj->name());
5381 }
5382}
void setPostprocessorValueByName(const PostprocessorName &name, const PostprocessorValue &value, std::size_t t_index=0)
Set the value of a PostprocessorValue.
bool shouldPrintExecution(const THREAD_ID tid) const
Check whether the problem should output execution orders at this time.
const std::string & name() const
Base class for all Postprocessors.
void finalize(const std::string &object_name)
Helper function for performing post calculation actions via the ReporterContext objects.
Reporter objects allow for the declaration of arbitrary data types that are aggregate values for a si...
Definition Reporter.h:48
An instance of this object type has one copy per thread that runs on each thread.
Base class for Postprocessors that produce a vector of values.

Referenced by computeUserObjectsInternal().

◆ kokkosAssembly() [1/2]

Moose::Kokkos::Assembly & FEProblemBase::kokkosAssembly ( )
inline

Definition at line 363 of file FEProblemBase.h.

363{ return _kokkos_assembly; }

◆ kokkosAssembly() [2/2]

const Moose::Kokkos::Assembly & FEProblemBase::kokkosAssembly ( ) const
inline

Definition at line 364 of file FEProblemBase.h.

364{ return _kokkos_assembly; }

◆ kokkosJoinAndFinalize()

void FEProblemBase::kokkosJoinAndFinalize ( const std::vector< Moose::Kokkos::UserObject * > &  userobjs)
private

◆ linearSysNum()

unsigned int FEProblemBase::linearSysNum ( const LinearSystemName &  linear_sys_name) const
overridevirtual
Returns
the linear system number corresponding to the provided linear_sys_name

Implements SubProblem.

Definition at line 7190 of file FEProblemBase.C.

7191{
7192 std::istringstream ss(linear_sys_name);
7193 unsigned int linear_sys_num;
7194 if (!(ss >> linear_sys_num) || !ss.eof())
7195 linear_sys_num = libmesh_map_find(_linear_sys_name_to_num, linear_sys_name);
7196
7197 return linear_sys_num;
7198}

Referenced by Moose::compute_linear_system(), computeLinearSystemSys(), LinearSystem::computeLinearSystemTags(), and DisplacedProblem::linearSysNum().

◆ lineSearch()

void FEProblemBase::lineSearch ( )
virtual

execute MOOSE line search

Definition at line 2875 of file FEProblemBase.C.

2876{
2877 _line_search->lineSearch();
2878}

Referenced by ComputeLineSearchObjectWrapper::linesearch().

◆ logAdd()

void FEProblemBase::logAdd ( const std::string &  system,
const std::string &  name,
const std::string &  type,
const InputParameters params 
) const

◆ makeLinearSolverParams()

SolverParams FEProblemBase::makeLinearSolverParams ( )
staticprivate

Make basic solver params for linear solves.

Definition at line 10435 of file FEProblemBase.C.

10436{
10437 SolverParams solver_params;
10438 solver_params._type = Moose::SolveType::ST_LINEAR;
10440 return solver_params;
10441}
Moose::LineSearchType _line_search
Moose::SolveType _type
@ ST_LINEAR
Solving a linear problem.
Definition MooseTypes.h:902
@ LS_NONE
Definition MooseTypes.h:983

Referenced by FEProblemBase().

◆ markFamilyPRefinement()

void SubProblem::markFamilyPRefinement ( const InputParameters params)
inherited

Mark a variable family for either disabling or enabling p-refinement with valid parameters of a variable.

Definition at line 1386 of file SubProblem.C.

1387{
1388 auto family = Utility::string_to_enum<FEFamily>(params.get<MooseEnum>("family"));
1389 bool flag = _default_families_without_p_refinement.count(family);
1390 if (params.isParamValid("disable_p_refinement"))
1391 flag = params.get<bool>("disable_p_refinement");
1392
1393 auto [it, inserted] = _family_for_p_refinement.emplace(family, flag);
1394 if (!inserted && flag != it->second)
1395 mooseError("'disable_p_refinement' not set consistently for variables in ", family);
1396}
std::unordered_map< FEFamily, bool > _family_for_p_refinement
Indicate whether a family is disabled for p-refinement.
static const std::unordered_set< FEFamily > _default_families_without_p_refinement
The set of variable families by default disable p-refinement.
Definition SubProblem.h:48

Referenced by addAuxArrayVariable(), addAuxVariable(), and addVariable().

◆ markMatPropRequested()

void SubProblem::markMatPropRequested ( const std::string &  prop_name)
virtualinherited

Helper method for adding a material property name to the _material_property_requested set.

Definition at line 723 of file SubProblem.C.

724{
725 _material_property_requested.insert(prop_name);
726}

Referenced by MaterialPropertyInterface::markMatPropRequested(), and MaterialBase::markMatPropRequested().

◆ matrixTagExists() [1/2]

bool SubProblem::matrixTagExists ( const TagName &  tag_name) const
virtualinherited

◆ matrixTagExists() [2/2]

bool SubProblem::matrixTagExists ( TagID  tag_id) const
virtualinherited

Check to see if a particular Tag exists.

Reimplemented in DisplacedProblem.

Definition at line 335 of file SubProblem.C.

336{
337 return _matrix_tag_id_to_tag_name.find(tag_id) != _matrix_tag_id_to_tag_name.end();
338}

◆ matrixTagName()

TagName SubProblem::matrixTagName ( TagID  tag)
virtualinherited

Retrieve the name associated with a TagID.

Reimplemented in DisplacedProblem.

Definition at line 356 of file SubProblem.C.

357{
358 return _matrix_tag_id_to_tag_name[tag];
359}

Referenced by SystemBase::addMatrix(), DisplacedProblem::matrixTagName(), and SystemBase::removeMatrix().

◆ mesh() [1/4]

virtual const MooseMesh & FEProblemBase::mesh ( ) const
inlineoverridevirtual

Implements SubProblem.

Reimplemented in MFEMProblem.

Definition at line 183 of file FEProblemBase.h.

183{ return _mesh; }

◆ mesh() [2/4]

virtual MooseMesh & FEProblemBase::mesh ( )
inlineoverridevirtual

Implements SubProblem.

Reimplemented in MFEMProblem.

Definition at line 182 of file FEProblemBase.h.

182{ return _mesh; }

Referenced by Adaptivity::adaptMesh(), addAnyRedistributers(), MultiAppConservativeTransfer::adjustTransferredSolution(), MultiAppConservativeTransfer::adjustTransferredSolutionNearestPoint(), PhysicsBasedPreconditioner::apply(), MultiAppGeneralFieldFunctorTransfer::buildKDTrees(), MultiAppGeneralFieldNearestLocationTransfer::buildKDTrees(), MultiAppVariableValueSamplePostprocessorTransfer::cacheElemToPostprocessorData(), SampledOutput::cloneMesh(), NonlinearSystemBase::computeJacobianInternal(), LinearSystem::computeLinearSystemInternal(), ComputeFullJacobianThread::computeOnInternalFace(), NonlinearSystemBase::computeResidualAndJacobianInternal(), NonlinearSystemBase::computeResidualInternal(), coordTransform(), MultiApp::createApp(), DMMooseGetEmbedding_Private(), ElementsAlongLine::ElementsAlongLine(), ElementsAlongPlane::ElementsAlongPlane(), MultiAppUserObjectTransfer::execute(), MultiAppVariableValueSamplePostprocessorTransfer::execute(), MultiAppVariableValueSampleTransfer::execute(), ElementsAlongLine::execute(), ElementsAlongPlane::execute(), IntersectionPointsAlongLine::execute(), WorkBalance::execute(), MultiAppMFEMTolibMeshShapeEvaluationTransfer::extractlibMeshNodePositions(), CentroidMultiApp::fillPositions(), QuadraturePointMultiApp::fillPositions(), MultiAppGeometricInterpolationTransfer::fillSourceInterpolationPoints(), FunctionPeriodicBoundary::FunctionPeriodicBoundary(), MultiApp::getBoundingBox(), EqualValueBoundaryConstraint::ghostPrimary(), Exodus::handleExodusIOMeshRenumbering(), FunctorPositions::initialize(), ParsedDownSelectionPositions::initialize(), FunctorTimes::initialize(), BlockRestrictable::initializeBlockRestrictable(), BoundaryRestrictable::initializeBoundaryRestrictable(), ImageFunction::initialSetup(), PiecewiseConstantFromCSV::initialSetup(), MultiAppDofCopyTransfer::initialSetup(), SolutionUserObjectBase::initialSetup(), MultiAppGeometricInterpolationTransfer::interpolateTargetPoints(), IntersectionPointsAlongLine::IntersectionPointsAlongLine(), Moose::Mortar::loopOverMortarSegments(), ReporterPointMarker::markerSetup(), mesh(), mesh(), MultiAppGeometricInterpolationTransfer::MultiAppGeometricInterpolationTransfer(), MultiAppUserObjectTransfer::MultiAppUserObjectTransfer(), BoundaryNodeIntegrityCheckThread::onNode(), ComputeNodalUserObjectsThread::onNode(), BoundaryElemIntegrityCheckThread::operator()(), ComputeLinearFVGreenGaussGradientVolumeThread::operator()(), ComputeLinearFVLimitedGradientThread::operator()(), ComputeInitialConditionThread::operator()(), Checkpoint::output(), Output::Output(), Exodus::outputEmptyTimestep(), ConsoleUtils::outputMeshInformation(), Exodus::outputNodalVariables(), Exodus::outputSetup(), Nemesis::outputSetup(), PiecewiseConstantFromCSV::PiecewiseConstantFromCSV(), SolutionUserObjectBase::pointValueGradientWrapper(), SolutionUserObjectBase::pointValueWrapper(), MeshInfo::possiblyAddDomainInfo(), ComputeLinearFVElementalThread::printBlockExecutionInformation(), ComputeLinearFVFaceThread::printBlockExecutionInformation(), BlockRestrictionDebugOutput::printBlockRestrictionGroups(), BlockRestrictionDebugOutput::printBlockRestrictionMap(), BlockRestrictionDebugOutput::printBoundaryRestrictionGroups(), MaterialPropertyDebugOutput::printMaterialMap(), TopResidualDebugOutput::printTopResiduals(), MultiAppMFEMTolibMeshShapeEvaluationTransfer::projectlibMeshNodalValues(), SolutionUserObjectBase::readExodusIIOrNemesis(), MooseApp::restore(), TransientMultiApp::setupApp(), Moose::PeriodicBCHelper::setupManualPeriodicBoundaries(), Moose::PeriodicBCHelper::setupPeriodicBoundaries(), SolutionUserObjectBase::SolutionUserObjectBase(), FixedPointSolve::solve(), TransientMultiApp::solveStep(), Moose::PetscSupport::storePetscOptions(), MultiAppDofCopyTransfer::transfer(), MultiAppMFEMTolibMeshShapeEvaluationTransfer::transferVariables(), Checkpoint::updateCheckpointFiles(), and SampledOutput::updateSample().

◆ mesh() [3/4]

MooseMesh & FEProblemBase::mesh ( bool  use_displaced)

Definition at line 712 of file FEProblemBase.C.

713{
714 if (use_displaced && !_displaced_problem)
715 mooseWarning("Displaced mesh was requested but the displaced problem does not exist. "
716 "Regular mesh will be returned");
717 return ((use_displaced && _displaced_problem) ? _displaced_problem->mesh() : mesh());
718}

◆ mesh() [4/4]

const MooseMesh & FEProblemBase::mesh ( bool  use_displaced) const
overridevirtual

Implements SubProblem.

Definition at line 703 of file FEProblemBase.C.

704{
705 if (use_displaced && !_displaced_problem)
706 mooseWarning("Displaced mesh was requested but the displaced problem does not exist. "
707 "Regular mesh will be returned");
708 return ((use_displaced && _displaced_problem) ? _displaced_problem->mesh() : mesh());
709}

◆ meshChanged() [1/2]

virtual void FEProblemBase::meshChanged ( )
inlineprotectedvirtual

Deprecated.

Users should switch to overriding the meshChanged which takes arguments

Definition at line 3073 of file FEProblemBase.h.

3073{}

Referenced by adaptMesh(), initialAdaptMesh(), meshChanged(), timestepSetup(), uniformRefine(), and updateMeshXFEM().

◆ meshChanged() [2/2]

void FEProblemBase::meshChanged ( bool  intermediate_change,
bool  contract_mesh,
bool  clean_refinement_flags 
)
virtual

Update data after a mesh change.

Iff intermediate_change is true, only perform updates as necessary to prepare for another mesh change immediately-subsequent. An example of data that is not updated during an intermediate change is libMesh System matrix data. An example of data that \emph is updated during an intermediate change is libMesh System vectors. These vectors are projected or restricted based off of adaptive mesh refinement or the changing of element subdomain IDs. The flags contract_mesh and clean_refinement_flags should generally only be set to true when the mesh has changed due to mesh refinement. contract_mesh deletes children of coarsened elements and renumbers nodes and elements. clean_refinement_flags resets refinement flags such that any subsequent calls to System::restrict_vectors or System::prolong_vectors before another AMR step do not mistakenly attempt to re-do the restriction/prolongation which occurred in this method. The value of contract_mesh is ignored when FEProblemBase::allowMeshContractionAfterMeshChanged is set to false.

Definition at line 9013 of file FEProblemBase.C.

9016{
9017 TIME_SECTION("meshChanged", 3, "Handling Mesh Changes");
9018
9019 const bool should_contract = contract_mesh && allowMeshContractionAfterMeshChanged();
9020
9022
9025 _mesh.cacheChangedLists(); // Currently only used with adaptivity and stateful material
9026 // properties
9027
9028 // Clear these out because they corresponded to the old mesh
9029 _ghosted_elems.clear();
9031
9032 // The mesh changed. We notify the MooseMesh first, because
9033 // callbacks (e.g. for sparsity calculations) triggered by the
9034 // EquationSystems reinit may require up-to-date MooseMesh caches.
9036
9037 // If we're just going to alter the mesh again, all we need to
9038 // handle here is AMR and projections, not full system reinit
9039 if (intermediate_change)
9040 es().reinit_solutions();
9041 else
9042 es().reinit();
9043
9044 if (should_contract)
9045 // Once vectors are restricted, we can delete children of coarsened elements
9046 _mesh.getMesh().contract();
9047 if (clean_refinement_flags)
9048 {
9049 // Finally clear refinement flags so that if someone tries to project vectors again without
9050 // an intervening mesh refinement to clear flags they won't run into trouble
9052 refinement.clean_refinement_flags();
9053 }
9054
9055 if (!intermediate_change)
9056 {
9057 // Since the mesh has changed, we need to make sure that we update any of our
9058 // MOOSE-system specific data.
9059 for (auto & sys : _solver_systems)
9060 sys->reinit();
9061 _aux->reinit();
9062 }
9063
9064 // Updating MooseMesh first breaks other adaptivity code, unless we
9065 // then *again* update the MooseMesh caches. E.g. the definition of
9066 // "active" and "local" may have been *changed* by refinement and
9067 // repartitioning done in EquationSystems::reinit().
9069
9070 // If we have finite volume variables, we will need to recompute additional elemental/face
9071 // quantities
9074
9075 // Let the meshChangedInterface notify the mesh changed event before we update the active
9076 // semilocal nodes, because the set of ghosted elements may potentially be updated during a mesh
9077 // changed event.
9078 for (const auto & mci : _notify_when_mesh_changes)
9079 mci->meshChanged();
9080
9081 // Since the Mesh changed, update the PointLocator object used by DiracKernels.
9083
9084 // Need to redo ghosting
9086
9088 {
9089 // Mesh contraction is necessary when a displaced problem is used.
9091 mooseError("Disabling mesh contraction is not implemented when a displaced problem is used. "
9092 "Please contact a "
9093 "developer of this application to discuss the combination of these features.");
9094
9095 _displaced_problem->meshChanged(should_contract, clean_refinement_flags);
9097 }
9098
9100
9103
9104 // Just like we reinitialized our geometric search objects, we also need to reinitialize our
9105 // mortar meshes. Note that this needs to happen after DisplacedProblem::meshChanged because the
9106 // mortar mesh discretization will depend necessarily on the displaced mesh being re-displaced
9107 _mortar_data->meshChanged();
9108
9109 // Nonlinear systems hold the mortar mesh functors. The domains of definition of the mortar
9110 // functors might have changed when the mesh changed.
9111 for (auto & nl_sys : _nl)
9112 nl_sys->reinitMortarFunctors();
9113
9114 reinitBecauseOfGhostingOrNewGeomObjects(/*mortar_changed=*/true);
9115
9116 // We need to create new storage for newly active elements, and copy
9117 // stateful properties from the old elements.
9120 {
9121 if (havePRefinement())
9123
9124 // Prolong properties onto newly refined elements' children
9125 {
9127 /* refine = */ true, *this, _material_props, _bnd_material_props, _assembly);
9128 const auto & range = *_mesh.refinedElementRange();
9129 Threads::parallel_reduce(range, pmp);
9130
9131 // Concurrent erasure from the shared hash map is not safe while we are reading from it in
9132 // ProjectMaterialProperties, so we handle erasure here. Moreover, erasure based on key is
9133 // not thread safe in and of itself because it is a read-write operation. Note that we do not
9134 // do the erasure for p-refinement because the coarse level element is the same as our active
9135 // refined level element
9136 if (!doingPRefinement())
9137 for (const auto & elem : range)
9138 {
9142 }
9143 }
9144
9145 // Restrict properties onto newly coarsened elements
9146 {
9148 /* refine = */ false, *this, _material_props, _bnd_material_props, _assembly);
9149 const auto & range = *_mesh.coarsenedElementRange();
9150 Threads::parallel_reduce(range, pmp);
9151 // Note that we do not do the erasure for p-refinement because the coarse level element is the
9152 // same as our active refined level element
9153 if (!doingPRefinement())
9154 for (const auto & elem : range)
9155 {
9156 auto && coarsened_children = _mesh.coarsenedElementChildren(elem);
9157 for (auto && child : coarsened_children)
9158 {
9162 }
9163 }
9164 }
9165 }
9166
9169
9170 _has_jacobian = false; // we have to recompute jacobian when mesh changed
9171
9172 // Now for backwards compatibility with user code that overrode the old no-arg meshChanged we must
9173 // call it here
9174 meshChanged();
9175}
void updatePointLocator(const MooseMesh &mesh)
Called during FEProblemBase::meshChanged() to update the PointLocator object used by the DiracKernels...
virtual bool allowMeshContractionAfterMeshChanged() const
Whether meshChanged() should allow the mesh to be contracted (deletes children of coarsened elements ...
std::vector< MeshChangedInterface * > _notify_when_mesh_changes
Objects to be notified when the mesh changes.
void reinit()
Completely redo all geometric search objects.
void eraseProperty(const Elem *elem)
Remove the property storage and element pointer from internal data structures Use this when elements ...
void markMeshChangedForBackup()
Mark this app as requiring mesh topology data in its next Backup object.
Definition MooseApp.h:755
const std::vector< const Elem * > & coarsenedElementChildren(const Elem *elem) const
Get the newly removed children element ids for an element that was just coarsened.
Definition MooseMesh.C:954
ConstElemPointerRange * refinedElementRange() const
Return a range that is suitable for threaded execution over elements that were just refined.
Definition MooseMesh.C:942
bool isFiniteVolumeInfoDirty() const
Definition MooseMesh.h:1459
void cacheChangedLists()
Cache information about what elements were refined and coarsened in the previous step.
Definition MooseMesh.C:924
ConstElemPointerRange * coarsenedElementRange() const
Return a range that is suitable for threaded execution over elements that were just coarsened.
Definition MooseMesh.C:948
void buildPRefinementAndCoarseningMaps(Assembly *assembly)
Definition MooseMesh.C:2382
bool havePRefinement() const
Query whether p-refinement has been requested at any point during the simulation.
bool doingPRefinement() const

Referenced by MoveNodesByParsedExpressionModifier::execute(), ActivateElementsUserObjectBase::finalize(), SidesetAroundSubdomainUpdater::finalize(), Exodus::handleExodusIOMeshRenumbering(), ElementSubdomainModifierBase::modify(), MooseApp::restore(), TransientMultiApp::setupApp(), and Adaptivity::uniformRefineWithProjection().

◆ meshDisplaced()

void FEProblemBase::meshDisplaced ( )
protectedvirtual

Update data after a mesh displaced.

Definition at line 9190 of file FEProblemBase.C.

9191{
9192 for (const auto & mdi : _notify_when_mesh_displaces)
9193 mdi->meshDisplaced();
9194}
std::vector< MeshDisplacedInterface * > _notify_when_mesh_displaces
Objects to be notified when the mesh displaces.
virtual void meshDisplaced()
Update data after a mesh displaced.

Referenced by DisplacedProblem::updateMesh(), and DisplacedProblem::updateMesh().

◆ messagePrefix() [1/2]

std::string MooseBase::messagePrefix ( const bool  hit_prefix = true) const
inlineinherited
Returns
A prefix to be used in messages that contain the input file location associated with this object (if any) and the name and type of the object.

Definition at line 256 of file MooseBase.h.

257 {
258 return messagePrefix(_pars, hit_prefix);
259 }

Referenced by MooseBase::callMooseError(), MooseBase::errorPrefix(), MooseBase::messagePrefix(), MooseBase::mooseDeprecated(), MooseBase::mooseDeprecatedNoTrace(), MooseBase::mooseInfo(), and MooseBase::mooseWarning().

◆ messagePrefix() [2/2]

std::string MooseBase::messagePrefix ( const InputParameters params,
const bool  hit_prefix 
)
staticprivateinherited

Internal method for getting the message prefix for an object (object type, name, etc).

Needs to be static so that we can call it externally from InputParameters for errors that do not have context of the MooseBase

Definition at line 140 of file MooseBase.C.

141{
142 std::string prefix = "";
143
144 if (hit_prefix)
145 if (const auto node = MooseBase::getHitNode(params))
146 prefix += Moose::hitMessagePrefix(*node);
147
148 // Don't have context without type and name
149 if (!params.isMooseBaseObject())
150 return prefix;
151
152 const auto & name = params.getObjectName();
153 const std::string base = params.hasBase() ? params.getBase() : "object";
154 const bool is_main_app = base == "Application" && name == AppFactory::main_app_name;
155 prefix += "The following occurred in the ";
156 if (is_main_app)
157 prefix += "main " + base;
158 else
159 prefix += base;
160 if (base != params.getObjectName() && name.size() && !is_main_app)
161 prefix += " '" + name + "'";
162 prefix += " of type " + params.getObjectType() + ".";
163 return prefix + "\n\n";
164}
static const std::string main_app_name
The name for the "main" moose application.
Definition AppFactory.h:68
bool isMooseBaseObject() const
const std::string & getObjectType() const
std::string hitMessagePrefix(const hit::Node &node)
Get the prefix to be associated with a hit node for a message.
Definition Moose.C:898

◆ mooseDeprecated() [1/2]

template<typename... Args>
void MooseBase::mooseDeprecated ( Args &&...  args) const
inlineinherited

Emits a deprecation warning prefixed with the object name and type, and a stack trace.

Definition at line 317 of file MooseBase.h.

318 {
320 _console, false, true, true, messagePrefix(true), std::forward<Args>(args)...);
321 }
void mooseDeprecatedStream(S &oss, const bool expired, const bool print_title, const bool show_trace, Args &&... args)
Definition MooseError.h:252

Referenced by MooseApp::addCapability(), DataFileInterface::getDataFileName(), DataFileInterface::getDataFileNameByName(), MooseApp::getRecoverFileBase(), MooseApp::hasRecoverFileBase(), and MooseApp::setupOptions().

◆ mooseDeprecated() [2/2]

template<typename... Args>
void SolutionInvalidInterface::mooseDeprecated ( Args &&...  args) const
inlineinherited

◆ mooseDeprecatedNoTrace()

template<typename... Args>
void MooseBase::mooseDeprecatedNoTrace ( Args &&...  args) const
inlineinherited

Emits a deprecation warning prefixed with the object name and type, and no stack trace.

Definition at line 327 of file MooseBase.h.

328 {
330 _console, false, true, false, messagePrefix(true), std::forward<Args>(args)...);
331 }

◆ mooseDocumentedError()

template<typename... Args>
void MooseBase::mooseDocumentedError ( const std::string &  repo_name,
const unsigned int  issue_num,
Args &&...  args 
) const
inlineinherited

Definition at line 277 of file MooseBase.h.

280 {
282 repo_name, issue_num, argumentsToString(std::forward<Args>(args)...)),
283 /* with_prefix = */ true);
284 }
std::string formatMooseDocumentedError(const std::string &repo_name, const unsigned int issue_num, const std::string &msg)
Formats a documented error.
Definition MooseError.C:140

Referenced by ManifoldSubdomainGenerator::ManifoldSubdomainGenerator().

◆ mooseError()

template<typename... Args>
void MooseBase::mooseError ( Args &&...  args) const
inlineinherited

Emits an error prefixed with object name and type and optionally a file path to the top-level block parameter if available.

Definition at line 271 of file MooseBase.h.

272 {
273 callMooseError(argumentsToString(std::forward<Args>(args)...), /* with_prefix = */ true);
274 }

Referenced by CopyMeshPartitioner::_do_partition(), GridPartitioner::_do_partition(), HierarchicalGridPartitioner::_do_partition(), PetscExternalPartitioner::_do_partition(), AdaptivityAction::act(), AddBoundsVectorsAction::act(), AddFVICAction::act(), AddICAction::act(), AddMeshGeneratorAction::act(), AddPeriodicBCAction::act(), AddTimeStepperAction::act(), AddVectorPostprocessorAction::act(), ChainControlSetupAction::act(), CheckFVBCAction::act(), CheckIntegrityAction::act(), CombineComponentsMeshes::act(), CommonOutputAction::act(), CreateDisplacedProblemAction::act(), CreateExecutionerAction::act(), CreateProblemAction::act(), CreateProblemDefaultAction::act(), CSGOnlyAction::act(), DeprecatedBlockAction::act(), InitProblemAction::act(), MaterialDerivativeTestAction::act(), MaterialOutputAction::act(), SetAdaptivityOptionsAction::act(), SetupDebugAction::act(), SetupMeshAction::act(), SetupMeshCompleteAction::act(), SetupPredictorAction::act(), SetupTimeStepperAction::act(), SplitMeshAction::act(), Action::Action(), AddActionComponentAction::AddActionComponentAction(), PhysicsComponentInterface::addBoundaryConditionsFromComponents(), MooseApp::addCapabilityInternal(), DistributedRectilinearMeshGenerator::addElement(), MooseApp::addExecutor(), SubProblem::addFunctor(), PhysicsComponentInterface::addInitialConditionsFromComponents(), ComponentJunction::addMeshGenerators(), MeshGenerator::addMeshSubgenerator(), SubProblem::addPiecewiseByBlockLambdaFunctor(), DistributedRectilinearMeshGenerator::addPoint(), DiracKernelBase::addPointWithValidId(), CreateDisplacedProblemAction::addProxyRelationshipManagers(), MooseMesh::addQuadratureNode(), AddActionComponentAction::addRelationshipManagers(), WebServerControl::addServerAction(), AddVariableAction::addVariable(), SubProblem::addVectorTag(), MooseVariableScalar::adUDot(), Output::advancedExecuteOn(), MooseVariableBase::allDofIndices(), MooseApp::appNameToLibName(), MultiApp::appPostprocessorValue(), MultiApp::appProblem(), MultiApp::appProblemBase(), MultiApp::appUserObjectBase(), MooseApp::attachRelationshipManagers(), MooseApp::attachRelationshipManagers(), automaticScaling(), Function::average(), BatchMeshGeneratorAction::BatchMeshGeneratorAction(), MooseMesh::buildCoarseningMap(), MultiApp::buildComm(), DistributedRectilinearMeshGenerator::buildCube(), PiecewiseTabularInterface::buildFromFile(), PiecewiseTabularInterface::buildFromJSON(), PiecewiseTabularInterface::buildFromXY(), MooseMesh::buildLowerDMesh(), GeneratedMesh::buildMesh(), MeshGeneratorMesh::buildMesh(), SpiralAnnularMesh::buildMesh(), TiledMesh::buildMesh(), MooseMesh::buildRefinementMap(), MaterialBase::buildRequiredMaterials(), MooseMesh::buildTypedMesh(), MooseMesh::cacheFaceInfoVariableOwnership(), CartesianGridDivision::CartesianGridDivision(), CartesianMeshGenerator::CartesianMeshGenerator(), EigenExecutionerBase::chebyshev(), SubProblem::checkBlockMatProps(), PhysicsBase::checkBlockRestrictionIdentical(), ComponentBoundaryConditionInterface::checkBoundaryConditionsAllRequested(), SubProblem::checkBoundaryMatProps(), PhysicsBase::checkComponentType(), IterationCountConvergence::checkConvergence(), MooseMesh::checkCoordinateSystems(), DiffusionLHDGAssemblyHelper::checkCoupling(), DefaultConvergenceBase::checkDuplicateSetSharedExecutionerParams(), MooseMesh::checkDuplicateSubdomainNames(), MaterialBase::checkExecutionStage(), FVFluxBC::checkFaceIntegrity(), FVInterfaceKernel::checkFaceIntegrity(), MeshGenerator::checkGetMesh(), ReporterTransferInterface::checkHasReporterValue(), EigenExecutionerBase::checkIntegrity(), Eigenvalue::checkIntegrity(), ExplicitTimeIntegrator::checkLinearConvergence(), MooseApp::checkMetaDataIntegrity(), MeshDiagnosticsGenerator::checkNonConformalMeshFromAdaptivity(), MeshDiagnosticsGenerator::checkNonMatchingEdges(), PostprocessorInterface::checkParam(), Moose::PeriodicBCHelper::checkPeriodicParams(), Sampler::checkReinitStatus(), MultiAppTransfer::checkSiblingsTransferSupported(), MaterialBase::checkStatefulSanity(), AddDefaultConvergenceAction::checkUnusedMultiAppFixedPointConvergenceParameters(), AddDefaultConvergenceAction::checkUnusedNonlinearConvergenceParameters(), AddDefaultConvergenceAction::checkUnusedSteadyStateConvergenceParameters(), Moose::PetscSupport::checkUserProvidedPetscOption(), MultiAppTransfer::checkVariable(), MeshDiagnosticsGenerator::checkWatertightNodesets(), MeshDiagnosticsGenerator::checkWatertightSidesets(), MooseMesh::clone(), LibmeshPartitioner::clone(), CombinerGenerator::CombinerGenerator(), MooseVariableFieldBase::componentName(), VariableCondensationPreconditioner::computeDInverseDiag(), CompositionDT::computeDT(), MooseVariableFieldBase::computeFaceValues(), TimeStepper::computeFailedDT(), IterationAdaptiveDT::computeFailedDT(), MooseMesh::computeFiniteVolumeCoords(), Moose::Kokkos::ResidualObject::computeOffDiagJacobian(), MaterialBase::computeProperties(), ResidualObject::computeResidualAndJacobian(), TimeStepper::computeStep(), AStableDirk4::computeTimeDerivatives(), BDF2::computeTimeDerivatives(), CrankNicolson::computeTimeDerivatives(), ExplicitEuler::computeTimeDerivatives(), ExplicitRK2::computeTimeDerivatives(), ExplicitTVDRK2::computeTimeDerivatives(), ImplicitEuler::computeTimeDerivatives(), ImplicitMidpoint::computeTimeDerivatives(), LStableDirk2::computeTimeDerivatives(), LStableDirk3::computeTimeDerivatives(), LStableDirk4::computeTimeDerivatives(), NewmarkBeta::computeTimeDerivatives(), ConcentricCircleMesh::ConcentricCircleMesh(), ConditionalEnableControl::ConditionalEnableControl(), TimeStepper::constrainStep(), LibtorchNeuralNetControl::controlNeuralNet(), TransientBase::convergedToSteadyState(), ParsedConvergence::convertRealToBool(), MooseApp::copyInputs(), CopyMeshPartitioner::CopyMeshPartitioner(), MultiApp::createApp(), MooseApp::createExecutors(), AddVariableAction::createInitialConditionAction(), MooseApp::createRMFromTemplateAndInit(), Function::curl(), ReporterTransferInterface::declareClone(), Moose::Kokkos::MaterialBase::declareKokkosPropertyInternal(), MeshGenerator::declareMeshProperty(), ReporterTransferInterface::declareVectorClone(), FunctorRelationshipManager::delete_remote_elements(), MooseMesh::deleteRemoteElements(), MooseApp::determineLibtorchDeviceType(), MeshDiagnosticsGenerator::diagnosticsLog(), Function::div(), FunctorBinnedValuesDivision::divisionIndex(), FunctorRelationshipManager::dofmap_reinit(), MooseApp::dynamicAllRegistration(), MooseApp::dynamicAppRegistration(), DistributedRectilinearMeshGenerator::elemId(), MooseApp::errorCheck(), MooseMesh::errorIfDistributedMesh(), MultiAppTransfer::errorIfObjectExecutesOnTransferInSourceApp(), FixedPointSolve::examineFixedPointConvergence(), Eigenvalue::execute(), TransientBase::execute(), WebServerControl::execute(), MooseApp::executeExecutioner(), FVInterfaceKernel::faceArg1(), FVInterfaceKernel::faceArg2(), MultiApp::fillPositions(), MooseApp::finalizeRestore(), Transfer::find_sys(), DiracKernelInfo::findPoint(), FixedPointSolve::findTransformedSystem(), FixedPointSolve::FixedPointSolve(), FunctionDT::FunctionDT(), FunctionScalarAux::FunctionScalarAux(), FunctionScalarIC::FunctionScalarIC(), LinearFVBoundaryCondition::functorFaceArg(), FVInitialConditionTempl< T >::FVInitialConditionTempl(), FVScalarLagrangeMultiplierInterface::FVScalarLagrangeMultiplierInterface(), AdvancedExtruderGenerator::generate(), BoundingBoxNodeSetGenerator::generate(), CoarsenBlockGenerator::generate(), CombinerGenerator::generate(), CutMeshByLevelSetGeneratorBase::generate(), DistributedRectilinearMeshGenerator::generate(), ElementOrderConversionGenerator::generate(), ExtraNodesetGenerator::generate(), FileMeshGenerator::generate(), FlipSidesetGenerator::generate(), GeneratedMeshGenerator::generate(), LowerDBlockFromSidesetGenerator::generate(), MeshCollectionGenerator::generate(), MeshDiagnosticsGenerator::generate(), MeshExtruderGenerator::generate(), MeshRepairGenerator::generate(), MoveNodeGenerator::generate(), PlaneIDMeshGenerator::generate(), PolyLineMeshFollowingNodeSetGenerator::generate(), ProjectSideSetOntoLevelSetGenerator::generate(), RenameBlockGenerator::generate(), RenameBoundaryGenerator::generate(), RenumberBySubdomainGenerator::generate(), SmoothMeshGenerator::generate(), SpiralAnnularMeshGenerator::generate(), StackGenerator::generate(), SubdomainBoundingBoxGenerator::generate(), SubdomainPerElementGenerator::generate(), TiledMeshGenerator::generate(), XYMeshLineCutter::generate(), XYZDelaunayGenerator::generate(), PatternedMeshGenerator::generate(), MeshGenerator::generateCSG(), MeshGenerator::generateData(), GeneratedMesh::GeneratedMesh(), GeneratedMeshGenerator::GeneratedMeshGenerator(), MeshGenerator::generateInternal(), MeshGenerator::generateInternalCSG(), CircularBoundaryCorrectionGenerator::generateRadialCorrectionFactor(), MooseMesh::getAxisymmetricRadialCoord(), MooseMesh::getBlockConnectedBlocks(), MooseMesh::getBoundaryID(), MultiApp::getBoundingBox(), ChainControl::getChainControlDataByName(), WebServerControl::getClientInfo(), MooseMesh::getCoarseningMap(), MultiApp::getCommandLineArgs(), MooseVariableBase::getContinuity(), Control::getControllableParameterByName(), MooseMesh::getCoordSystem(), PhysicsBase::getCoupledPhysics(), PhysicsBase::getCoupledPhysics(), DataFileInterface::getDataFilePath(), TransfiniteMeshGenerator::getDiscreteEdge(), MooseVariableBase::getDofIndices(), VariableCondensationPreconditioner::getDofToCondense(), TransfiniteMeshGenerator::getEdge(), EigenExecutionerBase::getEigenSystemConvergence(), MooseMesh::getElementIDIndex(), Material::getElementIDNeighbor(), Material::getElementIDNeighborByName(), MooseMesh::getElemIDMapping(), MooseMesh::getElemIDsOnBlocks(), WebServerControl::Response::getError(), MultiApp::getExecutioner(), MooseApp::getExecutor(), MultiAppTransfer::getFromMultiApp(), MultiAppTransfer::getFromMultiAppInfo(), SubProblem::getFunctor(), MooseMesh::getGeneralAxisymmetricCoordAxis(), MaterialPropertyInterface::getGenericMaterialPropertyByName(), DistributedRectilinearMeshGenerator::getGhostNeighbors(), DistributedRectilinearMeshGenerator::getIndices(), MaterialPropertyInterface::getKokkosBlockMaterialProperty(), FunctionInterface::getKokkosFunctionByName(), MaterialPropertyInterface::getKokkosMaterialPropertyByName(), Material::getMaterialByName(), SubProblem::getMatrixTagID(), AnnularMesh::getMaxInDimension(), GeneratedMesh::getMaxInDimension(), MeshGenerator::getMeshGeneratorNameFromParam(), MeshGenerator::getMeshGeneratorNamesFromParam(), AnnularMesh::getMinInDimension(), GeneratedMesh::getMinInDimension(), MultiAppTransfer::getMultiApp(), DistributedRectilinearMeshGenerator::getNeighbors(), MooseMesh::getNodeBlockIds(), MooseMesh::getNodeList(), MooseMesh::getPairedBoundaryMapping(), MaterialOutputAction::getParams(), PlaneIDMeshGenerator::getPlaneID(), PostprocessorInterface::getPostprocessorValueByNameInternal(), ComponentMaterialPropertyInterface::getPropertyValue(), MooseMesh::getRefinementMap(), MooseBase::getRenamedParam(), ReporterInterface::getReporterContextBaseByName(), ReporterInterface::getReporterName(), Reporter::getReporterValueName(), MooseApp::getRestartableDataMap(), MooseApp::getRestartableDataMapName(), MooseApp::getRestartableMetaData(), MooseApp::getRMClone(), MooseObject::getSharedPtr(), MooseObject::getSharedPtr(), PhysicsBase::getSolverSystem(), MooseMesh::getSubdomainBoundaryIds(), TransientBase::getTimeIntegratorNames(), MultiAppTransfer::getToMultiApp(), MultiAppTransfer::getToMultiAppInfo(), MooseMesh::getUniqueCoordSystem(), UserObjectInterface::getUserObjectBaseByName(), UserObjectInterface::getUserObjectName(), AddPeriodicBCAction::getVariables(), VectorPostprocessorInterface::getVectorPostprocessorName(), SubProblem::getVectorTag(), SubProblem::getVectorTagID(), MultiApp::globalAppToLocal(), Function::gradient(), MooseVariableBase::hasDoFsOnNodes(), PostprocessorInterface::hasPostprocessor(), PostprocessorInterface::hasPostprocessorByName(), ReporterInterface::hasReporterValue(), ReporterInterface::hasReporterValueByName(), VectorPostprocessorInterface::hasVectorPostprocessor(), VectorPostprocessorInterface::hasVectorPostprocessor(), VectorPostprocessorInterface::hasVectorPostprocessorByName(), VectorPostprocessorInterface::hasVectorPostprocessorByName(), TransientBase::incrementStepOrReject(), NEML2Action::inferMOOSEIOType(), AddVariableAction::init(), MooseMesh::init(), Sampler::init(), EigenExecutionerBase::init(), TransientBase::init(), MFEMMesh::init(), CrankNicolson::init(), ExplicitTimeIntegrator::init(), FixedPointIterationAdaptiveDT::init(), IterationAdaptiveDT::init(), MultiApp::init(), NestedDivision::initialize(), ParsedConvergence::initializeConstantSymbol(), PhysicsBase::initializePhysics(), SubProblem::initialSetup(), AuxKernelBase::initialSetup(), SolutionScalarAux::initialSetup(), FullSolveMultiApp::initialSetup(), ExplicitTimeIntegrator::initialSetup(), Function::integral(), InternalSideIndicatorBase::InternalSideIndicatorBase(), EigenExecutionerBase::inversePowerIteration(), Sampler::isAdaptiveSamplingCompleted(), MooseMesh::isBoundaryFullyExternalToSubdomains(), MooseVariableBase::isNodal(), IterationAdaptiveDT::IterationAdaptiveDT(), IterationCountConvergence::IterationCountConvergence(), LibmeshPartitioner::LibmeshPartitioner(), MooseApp::libNameToAppName(), LibtorchNeuralNetControl::LibtorchNeuralNetControl(), LineSearch::lineSearch(), MooseApp::loadLibraryAndDependencies(), ReporterPointMarker::markerSetup(), SubProblem::markFamilyPRefinement(), Material::Material(), Distribution::median(), FunctorRelationshipManager::mesh_reinit(), MeshDiagnosticsGenerator::MeshDiagnosticsGenerator(), MeshExtruderGenerator::MeshExtruderGenerator(), MeshRepairGenerator::MeshRepairGenerator(), SetupMeshAction::modifyParamsForUseSplit(), MeshMetaDataInterface::mooseErrorInternal(), MooseMesh::MooseMesh(), MooseObject::MooseObject(), UserObjectInterface::mooseObjectError(), MooseVariableBase::MooseVariableBase(), MoveNodeGenerator::MoveNodeGenerator(), MultiApp::MultiApp(), MultiAppTransfer::MultiAppTransfer(), NewmarkBeta::NewmarkBeta(), DistributedRectilinearMeshGenerator::nodeId(), DistributedRectilinearMeshGenerator::numNeighbors(), Output::onInterval(), FunctorRelationshipManager::operator()(), RelationshipManager::operator==(), ActionComponent::outerSurfaceArea(), ActionComponent::outerSurfaceBoundaries(), MortarNodalGeometryOutput::output(), Output::Output(), MooseApp::outputMachineReadableData(), DistributedRectilinearMeshGenerator::paritionSquarely(), ParsedConvergence::ParsedConvergence(), ParsedCurveGenerator::ParsedCurveGenerator(), ExplicitTimeIntegrator::performExplicitSolve(), PetscExternalPartitioner::PetscExternalPartitioner(), PhysicsBasedPreconditioner::PhysicsBasedPreconditioner(), PIDTransientControl::PIDTransientControl(), PiecewiseTabularInterface::PiecewiseTabularInterface(), CutMeshByLevelSetGeneratorBase::pointPairLevelSetInterception(), ProjectSideSetOntoLevelSetGenerator::pointPairLevelSetInterception(), ReporterInterface::possiblyCheckHasReporter(), VectorPostprocessorInterface::possiblyCheckHasVectorPostprocessorByName(), AStableDirk4::postResidual(), ExplicitRK2::postResidual(), ExplicitTVDRK2::postResidual(), ImplicitMidpoint::postResidual(), LStableDirk2::postResidual(), LStableDirk3::postResidual(), LStableDirk4::postResidual(), VariableCondensationPreconditioner::preallocateCondensedJacobian(), Predictor::Predictor(), TransientBase::preExecute(), MooseMesh::prepare(), MooseMesh::prepared(), FixedPointSolve::printFixedPointConvergenceReason(), MultiApp::readCommandLineArguments(), CoarsenBlockGenerator::recursiveCoarsen(), MooseApp::recursivelyCreateExecutors(), FunctorRelationshipManager::redistribute(), MooseApp::registerRestartableData(), MooseApp::registerRestartableNameWithFilter(), Sampler::reinit(), MooseApp::removeRelationshipManager(), PhysicsBase::reportPotentiallyMissedParameters(), MooseApp::restore(), RinglebMesh::RinglebMesh(), RinglebMeshGenerator::RinglebMeshGenerator(), MooseApp::run(), MooseApp::runInputs(), ScalarComponentIC::ScalarComponentIC(), DistributedRectilinearMeshGenerator::scaleNodalPositions(), FunctorRelationshipManager::set_mesh(), MooseVariableBase::setActiveTags(), DistributedRectilinearMeshGenerator::setBoundaryNames(), MooseMesh::setCoordSystem(), MooseMesh::setGeneralAxisymmetricCoordAxes(), MeshGenerator::setMeshProperty(), MooseApp::setMFEMDevice(), Sampler::setNumberOfCols(), Sampler::setNumberOfRandomSeeds(), Sampler::setNumberOfRows(), Moose::MFEM::LinearSolverBase::SetPreconditioner(), Split::setup(), TransientMultiApp::setupApp(), Moose::PeriodicBCHelper::setupAutoPeriodicBoundaries(), Moose::PeriodicBCHelper::setupManualPeriodicBoundaries(), SetupMeshAction::setupMesh(), MooseApp::setupOptions(), TimeSequenceStepperBase::setupSequence(), TransientBase::setupTimeIntegrator(), PhysicsBase::shouldCreateIC(), PhysicsBase::shouldCreateTimeDerivative(), PhysicsBase::shouldCreateVariable(), SingleMatrixPreconditioner::SingleMatrixPreconditioner(), MooseVariableBase::sizeMatrixTagData(), SmoothMeshGenerator::SmoothMeshGenerator(), SolutionTimeAdaptiveDT::SolutionTimeAdaptiveDT(), Moose::MFEM::LinearSolverBase::Solve(), TimeIntegrator::solve(), ExplicitRK2::solve(), ExplicitTVDRK2::solve(), FullSolveMultiApp::solveStep(), UserObject::spatialPoints(), UserObject::spatialValue(), SpiralAnnularMesh::SpiralAnnularMesh(), SpiralAnnularMeshGenerator::SpiralAnnularMeshGenerator(), MeshRepairGenerator::splitNonConvexPolygons(), WebServerControl::startServer(), StitchedMesh::StitchedMesh(), MaterialBase::subdomainSetup(), CutMeshByLevelSetGeneratorBase::tet4ElemCutter(), Action::timedAct(), Function::timeDerivative(), Function::timeIntegral(), ParsedCurveGenerator::tSectionSpaceDefiner(), MooseVariableScalar::uDot(), MooseVariableScalar::uDotDot(), MooseVariableScalar::uDotDotOld(), MooseVariableScalar::uDotOld(), MooseBase::uniqueName(), AuxScalarKernel::uOld(), ScalarKernelBase::uOld(), Function::value(), VariableCondensationPreconditioner::VariableCondensationPreconditioner(), PhysicsBase::variableExists(), MultiAppTransfer::variableIntegrityCheck(), AddVariableAction::variableType(), SubProblem::vectorTagName(), SubProblem::vectorTagType(), Function::vectorValue(), SubProblem::verifyVectorTags(), ActionComponent::volume(), WebServerControl::WebServerControl(), MFEMMesh::writeRecoveryFiles(), and MooseApp::writeRestartableMetaData().

◆ mooseErrorNonPrefixed()

template<typename... Args>
void MooseBase::mooseErrorNonPrefixed ( Args &&...  args) const
inlineinherited

Emits an error without the prefixing included in mooseError().

Definition at line 290 of file MooseBase.h.

291 {
292 callMooseError(argumentsToString(std::forward<Args>(args)...), /* with_prefix = */ false);
293 }

◆ mooseInfo()

template<typename... Args>
void MooseBase::mooseInfo ( Args &&...  args) const
inlineinherited

◆ mooseWarning() [1/2]

template<typename... Args>
void MooseBase::mooseWarning ( Args &&...  args) const
inlineinherited

Emits a warning prefixed with object name and type.

Definition at line 299 of file MooseBase.h.

300 {
301 moose::internal::mooseWarningStream(_console, messagePrefix(true), std::forward<Args>(args)...);
302 }
void mooseWarningStream(S &oss, Args &&... args)
Definition MooseError.h:197

Referenced by DiracKernelInfo::findPoint(), DataFileInterface::getDataFilePath(), MooseApp::loadLibraryAndDependencies(), and MooseBase::paramWarning().

◆ mooseWarning() [2/2]

template<typename... Args>
void SolutionInvalidInterface::mooseWarning ( Args &&...  args) const
inlineinherited

Definition at line 73 of file SolutionInvalidInterface.h.

74 {
75 _si_moose_base.MooseBase::mooseWarning(std::forward<Args>(args)...);
76 flagSolutionWarningMultipleRegistration(_si_moose_base.name() + ": warning");
77 }

Referenced by CopyMeshPartitioner::_do_partition(), AddFunctionAction::act(), AddKernelAction::act(), CommonOutputAction::act(), MaterialOutputAction::act(), MeshOnlyAction::act(), MooseMesh::addPeriodicVariable(), BoundaryMarker::BoundaryMarker(), DistributedRectilinearMeshGenerator::buildCube(), CartesianMeshGenerator::CartesianMeshGenerator(), CheckOutputAction::checkConsoleOutput(), MultiAppTransfer::checkMultiAppExecuteOn(), MeshDiagnosticsGenerator::checkNonMatchingEdges(), MeshDiagnosticsGenerator::checkPolygons(), ActionComponent::checkRequiredTasks(), PhysicsBase::checkRequiredTasks(), MultiApp::createApp(), MeshDiagnosticsGenerator::diagnosticsLog(), CartesianGridDivision::divisionIndex(), CylindricalGridDivision::divisionIndex(), SphericalGridDivision::divisionIndex(), Postprocessor::evaluateDotWarning(), FiniteDifferencePreconditioner::FiniteDifferencePreconditioner(), FixedPointSolve::FixedPointSolve(), BSplineCurveGenerator::generate(), RenumberBySubdomainGenerator::generate(), SubdomainPerElementGenerator::generate(), SurfaceMeshGeneratorBase::get2DElemNormal(), MultiAppTransfer::getAppInfo(), FunctorBinnedValuesDivision::getBinIndex(), IndicatorMarker::IndicatorMarker(), CartesianGridDivision::initialize(), CylindricalGridDivision::initialize(), SphericalGridDivision::initialize(), MaterialBase::initStatefulProperties(), IterationAdaptiveDT::limitDTToPostprocessorValue(), MFEMRefinementMarker::MFEMRefinementMarker(), NewmarkBeta::NewmarkBeta(), Output::Output(), MaterialOutputAction::outputHelper(), Executioner::problem(), TestSourceStepper::rejectStep(), PhysicsBase::reportPotentiallyMissedParameters(), MaterialBase::resetQpProperties(), MooseMesh::setCoordSystem(), TransientMultiApp::solveStep(), MeshRepairGenerator::splitNonConvexPolygons(), and VariableCondensationPreconditioner::VariableCondensationPreconditioner().

◆ mooseWarningNonPrefixed() [1/2]

template<typename... Args>
void MooseBase::mooseWarningNonPrefixed ( Args &&...  args) const
inlineinherited

Emits a warning without the prefixing included in mooseWarning().

Definition at line 308 of file MooseBase.h.

309 {
310 moose::internal::mooseWarningStream(_console, std::forward<Args>(args)...);
311 }

◆ mooseWarningNonPrefixed() [2/2]

template<typename... Args>
void SolutionInvalidInterface::mooseWarningNonPrefixed ( Args &&...  args) const
inlineinherited

Definition at line 80 of file SolutionInvalidInterface.h.

81 {
82 _si_moose_base.MooseBase::mooseWarningNonPrefixed(std::forward<Args>(args)...);
83 flagSolutionWarningMultipleRegistration(_si_moose_base.name() + ": warning");
84 }

◆ mortarData() [1/2]

MortarInterfaceWarehouse & FEProblemBase::mortarData ( )
inline

Definition at line 2733 of file FEProblemBase.h.

2733{ return *_mortar_data; }

◆ mortarData() [2/2]

const MortarInterfaceWarehouse & FEProblemBase::mortarData ( ) const
inline

Returns the mortar data object.

Definition at line 2732 of file FEProblemBase.h.

2732{ return *_mortar_data; }

◆ name()

const std::string & MooseBase::name ( ) const
inlineinherited

Get the name of the class.

Returns
The name of the class

Definition at line 103 of file MooseBase.h.

104 {
105 mooseAssert(_name.size(), "Empty name");
106 return _name;
107 }
const std::string & _name
The name of this class.
Definition MooseBase.h:381

Referenced by AdaptivityAction::act(), AddActionComponentAction::act(), AddElementalFieldAction::act(), AddPeriodicBCAction::act(), AddTimeStepperAction::act(), CommonOutputAction::act(), CopyNodalVarsAction::act(), CSGOnlyAction::act(), DeprecatedBlockAction::act(), DisplayGhostingAction::act(), MaterialOutputAction::act(), SetupResidualDebugAction::act(), SetupTimeIntegratorAction::act(), addAnyRedistributers(), Executioner::addAttributeReporter(), addAuxKernel(), MFEMProblem::addAuxKernel(), addAuxScalarKernel(), DisplacedProblem::addAuxVariable(), addBoundaryCondition(), MFEMProblem::addBoundaryCondition(), PhysicsComponentInterface::addComponent(), addConstraint(), addConvergence(), addDamper(), addDGKernel(), addDiracKernel(), addDistribution(), MooseApp::addExecutor(), MooseApp::addExecutorParams(), MFEMProblem::addFESpace(), MFEMProblem::addFESpaceHierarchy(), addFunction(), MFEMProblem::addFunction(), SubProblem::addFunctor(), addFunctorMaterial(), MFEMProblem::addFunctorMaterial(), FunctorMaterial::addFunctorProperty(), FunctorMaterial::addFunctorPropertyByBlocks(), addFVBC(), addFVGradientMethod(), addFVInitialCondition(), addFVInterfaceKernel(), addFVInterpolationMethod(), addFVKernel(), ADDGKernel::ADDGKernel(), addHDGKernel(), MFEMProblem::addImagComponentToBC(), MFEMProblem::addImagComponentToKernel(), addIndicator(), MFEMProblem::addIndicator(), addInitialCondition(), MFEMProblem::addInitialCondition(), addInterfaceKernel(), addInterfaceMaterial(), ElementAndTraceScalarHDGAssemblyHelper::additionalROVariables(), BoundaryIntegralValueConstraint::additionalROVariables(), DiffusionLHDGKernel::additionalROVariables(), ADKernelScalarBase::additionalROVariables(), addKernel(), MFEMProblem::addKernel(), addLinearFVBC(), addLinearFVKernel(), addMarker(), MFEMProblem::addMarker(), addMaterial(), addMaterialHelper(), ComponentMaterialPropertyInterface::addMaterials(), addMeshDivision(), MooseApp::addMeshGenerator(), ComponentJunction::addMeshGenerators(), ComponentMeshTransformHelper::addMeshGenerators(), CylinderComponent::addMeshGenerators(), MeshGenerator::addMeshSubgenerator(), MeshGenerator::addMeshSubgenerator(), MFEMProblem::addMFEMProblemComposer(), MFEMProblem::addMFEMSolver(), addMultiApp(), addNodalKernel(), addObject(), InitialConditionWarehouse::addObject(), ComponentPhysicsInterface::addPhysics(), SubProblem::addPiecewiseByBlockLambdaFunctor(), addPostprocessor(), MFEMProblem::addPostprocessor(), UserObjectBase::addPostprocessorDependencyHelper(), AuxKernelBase::addPostprocessorDependencyHelper(), InitialConditionBase::addPostprocessorDependencyHelper(), addPredictor(), CreateDisplacedProblemAction::addProxyRelationshipManagers(), MFEMProblem::addRealComponentToBC(), MFEMProblem::addRealComponentToKernel(), AddActionComponentAction::addRelationshipManagers(), addReporter(), addSampler(), addScalarKernel(), WebServerControl::addServerActionsInternal(), addTimeIntegrator(), addTransfer(), MFEMProblem::addTransfer(), PhysicsBase::addUserObject(), addUserObject(), UserObjectBase::addUserObjectDependencyHelper(), AuxKernelBase::addUserObjectDependencyHelper(), InitialConditionBase::addUserObjectDependencyHelper(), DisplacedProblem::addVariable(), addVectorPostprocessor(), MFEMProblem::addVectorPostprocessor(), UserObjectBase::addVectorPostprocessorDependencyHelper(), AuxKernelBase::addVectorPostprocessorDependencyHelper(), MooseLinearVariableFV< OutputType >::adError(), Output::advancedExecuteOn(), AdvancedExtruderGenerator::AdvancedExtruderGenerator(), NEML2ModelExecutor::advanceState(), MooseVariableBase::allDofIndices(), MooseApp::appBinaryName(), MooseApp::appendMeshGenerator(), MultiApp::appPostprocessorValue(), MultiApp::appProblem(), MultiApp::appProblemBase(), MultiApp::appUserObjectBase(), ArrayDGKernel::ArrayDGKernel(), ArrayParsedAux::ArrayParsedAux(), PhysicsBase::assignBlocks(), AStableDirk4::AStableDirk4(), Function::average(), MultiApp::backup(), CoarsenedPiecewiseLinear::buildCoarsenedGrid(), PiecewiseTabularInterface::buildFromFile(), PiecewiseTabularInterface::buildFromXY(), MFEMGeometricMultigridSolver::BuildMultigrid(), MooseMesh::buildNodeListFromSideList(), MultiAppVariableValueSamplePostprocessorTransfer::cacheElemToPostprocessorData(), MooseBase::callMooseError(), ChangeOverFixedPointPostprocessor::ChangeOverFixedPointPostprocessor(), ChangeOverTimePostprocessor::ChangeOverTimePostprocessor(), PhysicsBase::checkBlockRestrictionIdentical(), PhysicsBase::checkComponentType(), DefaultNonlinearConvergence::checkConvergence(), ParsedConvergence::checkConvergence(), checkDependMaterialsHelper(), FVFluxBC::checkFaceIntegrity(), FVInterfaceKernel::checkFaceIntegrity(), TaggingInterface::checkForNans(), SamplerBase::checkForStandardFieldVariableType(), MeshGenerator::checkGetMesh(), ReporterTransferInterface::checkHasReporterValue(), checkICRestartError(), NonlinearSystemBase::checkKernelCoverage(), Moose::Kokkos::Material::checkMaterialProperty(), Material::checkMaterialProperty(), MooseApp::checkMetaDataIntegrity(), Damper::checkMinDamping(), SideUserObject::checkNoInterfaceMaterialPropertyDependencies(), MultiAppTransfer::checkParentAppUserObjectExecuteOn(), Checkpoint::checkpointInfo(), LinearFVGradientManager::checkRestartedGradientHistory(), checkUserObjectNameCollision(), BlockRestrictable::checkVariable(), DomainUserObject::checkVariable(), Coupleable::checkWritableVar(), CoarsenSurfaceMeshAlongSidesetGenerator::coarsenAlongSidesets(), MooseVariableFieldBase::componentName(), CompositeFunction::CompositeFunction(), MaterialBase::computeProperties(), computeUserObjectByName(), VectorPostprocessorVisualizationAux::computeValue(), MooseBase::connectControllableParams(), ConstantPostprocessor::ConstantPostprocessor(), Coupleable::coupledName(), CommonOutputAction::create(), MultiApp::createApp(), MooseApp::createExecutors(), MeshGeneratorSystem::createMeshGeneratorOrder(), MooseApp::createRecoverablePerfGraph(), MoveBoundaryNodesToCurveGenerator::curveGenerator(), CutMeshByPlaneGenerator::CutMeshByPlaneGenerator(), DebugResidualAux::DebugResidualAux(), MaterialBase::declareADProperty(), MFEMComplexVariable::declareCoefficients(), MFEMVariable::declareCoefficients(), MeshInfo::declareHelper(), Moose::Kokkos::MaterialBase::declareKokkosOnDemandProperty(), Moose::Kokkos::MaterialBase::declareKokkosProperty(), MeshGenerator::declareMeshesForSubByName(), MeshGenerator::declareNullMeshName(), MaterialBase::declareProperty(), MFEMCoordinateTransformations::declareRZCoefficients(), DOFMapOutput::demangle(), DerivativeSumMaterialTempl< is_ad >::DerivativeSumMaterialTempl(), MooseMesh::detectPairedSidesets(), DGKernel::DGKernel(), DGKernelBase::DGKernelBase(), DomainUserObject::DomainUserObject(), DumpObjectsProblem::dumpObjectHelper(), ElementDamper::ElementDamper(), ElementGroupCentroidPositions::ElementGroupCentroidPositions(), ElementMaterialSampler::ElementMaterialSampler(), ElementValueSampler::ElementValueSampler(), EigenKernel::enabled(), MooseMesh::errorIfDistributedMesh(), SolutionUserObjectBase::evalMeshFunction(), SolutionUserObjectBase::evalMeshFunctionGradient(), SolutionUserObjectBase::evalMultiValuedMeshFunction(), SolutionUserObjectBase::evalMultiValuedMeshFunctionGradient(), GreaterThanLessThanPostprocessor::execute(), PointValue::execute(), RestartableDataReporter::execute(), MultiAppGeneralFieldTransfer::execute(), MultiAppNearestNodeTransfer::execute(), MultiAppProjectionTransfer::execute(), MultiAppUserObjectTransfer::execute(), SideValueSampler::execute(), WebServerControl::execute(), ActionWarehouse::executeActionsWithAction(), Exodus::Exodus(), ExtraIDIntegralVectorPostprocessor::ExtraIDIntegralVectorPostprocessor(), FVInterfaceKernel::faceArg1(), FVInterfaceKernel::faceArg2(), FEProblemBase(), NEML2ModelExecutor::fillInputs(), MultiApp::fillPositions(), MultiAppGeometricInterpolationTransfer::fillSourceInterpolationPoints(), PointSamplerBase::finalize(), ChainControl::fullControlDataName(), FunctionArrayAux::FunctionArrayAux(), FunctionDT::FunctionDT(), FVFunctionIC::functionName(), FunctionIC::functionName(), FunctorPositions::FunctorPositions(), FunctorSmootherTempl< T >::FunctorSmootherTempl(), FVInitialConditionTempl< T >::FVInitialConditionTempl(), FVOneVarDiffusionInterface::FVOneVarDiffusionInterface(), GapValueAux::GapValueAux(), BoundaryDeletionGenerator::generate(), BreakMeshByBlockGenerator::generate(), CoarsenSurfaceMeshAlongSidesetGenerator::generate(), GeneratedMeshGenerator::generate(), ManifoldSubdomainGenerator::generate(), ParsedExtraElementIDGenerator::generate(), ParsedSubdomainGeneratorBase::generate(), RenameBlockGenerator::generate(), RenameBoundaryGenerator::generate(), RenumberBySubdomainGenerator::generate(), SideSetsFromNodeSetsGenerator::generate(), StitchBoundaryMeshGenerator::generate(), StitchMeshGenerator::generate(), SubdomainBoundingBoxGenerator::generate(), SubdomainsFromPartitionerGenerator::generate(), UniqueExtraIDMeshGenerator::generate(), MeshGenerator::generateInternal(), MeshGenerator::generateInternalCSG(), InterfaceMaterial::getADMaterialProperty(), Material::getADMaterialProperty(), MultiAppTransfer::getAppInfo(), MooseMesh::getBoundaryString(), MultiApp::getBoundingBox(), MooseBase::getCheckedPointerParam(), MooseApp::getCheckpointDirectories(), MFEMProblem::getComplexGridFunction(), Control::getControllableParameterByName(), Control::getControllableValue(), Control::getControllableValueByName(), getConvergence(), MeshGenerator::getCSGBase(), MeshGenerator::getCSGBasesByName(), UserObjectBase::getDependObjects(), getDistribution(), DistributionInterface::getDistribution(), DistributionInterface::getDistributionByName(), ElementUOProvider::getElementalValueLong(), ElementUOProvider::getElementalValueReal(), MultiApp::getExecutioner(), getExecutor(), MooseApp::getExecutor(), OutputWarehouse::getFileNumbers(), getFunction(), SubProblem::getFunctor(), getFVAdvectedInterpolationMethod(), getFVFaceInterpolationMethod(), getFVGradientMethod(), getFVInterpolationMethod(), AuxKernelTempl< ComputeValueType >::getGenericMaterialProperty(), NodalPatchRecovery::getGenericMaterialProperty(), InterfaceMaterial::getGenericMaterialProperty(), Material::getGenericMaterialProperty(), InterfaceMaterial::getGenericNeighborMaterialProperty(), InterfaceMaterial::getGenericNeighborMaterialPropertyByName(), Material::getGenericOptionalMaterialProperty(), MaterialBase::getGenericZeroMaterialProperty(), MFEMProblem::getGridFunction(), getKokkosFunction(), getKokkosUserObject(), SolutionUserObjectBase::getLocalVarIndex(), Marker::getMarkerValue(), Material::getMaterial(), getMaterial(), Material::getMaterialByName(), AuxKernelTempl< ComputeValueType >::getMaterialProperty(), NodalPatchRecovery::getMaterialProperty(), InterfaceMaterial::getMaterialProperty(), Material::getMaterialProperty(), SubProblem::getMaterialPropertyBlockNames(), SubProblem::getMaterialPropertyBoundaryNames(), AuxKernelTempl< ComputeValueType >::getMaterialPropertyOld(), NodalPatchRecovery::getMaterialPropertyOld(), InterfaceMaterial::getMaterialPropertyOld(), Material::getMaterialPropertyOld(), AuxKernelTempl< ComputeValueType >::getMaterialPropertyOlder(), NodalPatchRecovery::getMaterialPropertyOlder(), InterfaceMaterial::getMaterialPropertyOlder(), Material::getMaterialPropertyOlder(), MFEMObject::getMatrixCoefficient(), MFEMObject::getMatrixCoefficientByName(), MeshGenerator::getMesh(), getMeshDivision(), MeshGenerator::getMeshesByName(), MooseApp::getMeshGenerator(), MeshGenerator::getMeshGeneratorNameFromParam(), MeshGenerator::getMeshGeneratorNamesFromParam(), MFEMProblem::getMFEMObject(), ActionWarehouse::getMooseAppName(), NEML2FEInterpolation::getMOOSEVariable(), MultiAppTransfer::getMultiApp(), InterfaceMaterial::getNeighborADMaterialProperty(), InterfaceMaterial::getNeighborMaterialProperty(), InterfaceMaterial::getNeighborMaterialPropertyOld(), InterfaceMaterial::getNeighborMaterialPropertyOlder(), Material::getOptionalADMaterialProperty(), Material::getOptionalMaterialProperty(), Material::getOptionalMaterialPropertyOld(), Material::getOptionalMaterialPropertyOlder(), MooseBase::getParam(), getPositionsObject(), getPostprocessorValueByName(), ComponentMaterialPropertyInterface::getPropertyValue(), ReporterData::getReporterInfo(), MFEMExecutedObject::getRequestedItems(), MooseApp::getRestartableDataMap(), MooseApp::getRestartableDataMapName(), MooseApp::getRestartableMetaData(), getSampler(), MFEMObject::getScalarCoefficient(), MFEMObject::getScalarCoefficientByName(), TimedSubdomainModifier::getSubdomainIDAndCheck(), MFEMExecutedObject::getSuppliedItems(), TransientBase::getTimeStepperName(), ProjectedStatefulMaterialStorageAction::getTypeEnum(), getUserObject(), getUserObjectBase(), MFEMObject::getVectorCoefficient(), MFEMObject::getVectorCoefficientByName(), LinearFVGradientManager::gradientStateVectorName(), Terminator::handleMessage(), Control::hasControllableParameterByName(), hasConvergence(), hasDistribution(), hasFunction(), SubProblem::hasFunctor(), SubProblem::hasFunctorWithType(), hasFVGradientMethod(), hasFVInterpolationMethod(), MeshInfo::hasItem(), MooseApp::hasMeshGenerator(), MFEMProblem::hasMFEMObject(), AdvancedOutput::hasOutputHelper(), hasPostprocessor(), hasPostprocessorValueByName(), MooseApp::hasRelationshipManager(), MooseApp::hasRestartableDataMap(), MooseApp::hasRestartableMetaData(), hasUserObject(), NEML2Action::inferMOOSEIOType(), AddVariableAction::init(), AdvancedOutput::init(), IterationAdaptiveDT::init(), AdvancedOutput::initAvailableLists(), MeshInfo::initCombinedInfos(), AdvancedOutput::initExecutionTypes(), AttribName::initFrom(), NestedDivision::initialize(), TransformedPositions::initialize(), BoundaryRestrictable::initializeBoundaryRestrictable(), AuxKernelBase::initialSetup(), SolutionScalarAux::initialSetup(), MFEMScalarQuadratureFunction::initialSetup(), MFEMVectorQuadratureFunction::initialSetup(), Console::initialSetup(), JSONOutput::initialSetup(), BoundaryLinearFVFluxIntegral::initialSetup(), NodalVariableValue::initialSetup(), SideFVFluxBCIntegral::initialSetup(), MultiAppGeneralFieldFunctorTransfer::initialSetup(), MultiAppProjectionTransfer::initialSetup(), BoundaryMeshBuilder::initialSetup(), SolutionUserObjectBase::initialSetup(), AdvancedOutput::initOutputList(), AdvancedOutput::initPostprocessorOrVectorPostprocessorLists(), MaterialBase::initStatefulProperties(), Function::integral(), InterfaceKernelTempl< T >::InterfaceKernelTempl(), MultiAppGeometricInterpolationTransfer::interpolateTargetPoints(), MeshGenerator::isChildMeshGenerator(), DerivativeMaterialInterface< T >::isNotObjectVariable(), MeshGenerator::isNullMeshName(), MooseBase::isParamSetByUser(), MooseBase::isParamValid(), MeshGenerator::isParentMeshGenerator(), LinearCombinationFunction::LinearCombinationFunction(), logAdd(), MooseLinearVariableFV< OutputType >::lowerDError(), Marker::Marker(), MaterialBase::markMatPropRequested(), Material::Material(), Distribution::median(), MemoryUsageReporter::MemoryUsageReporter(), NEML2ModelExecutor::meshChanged(), MeshGenerator::meshPropertyPrefix(), MooseBase::messagePrefix(), MFEMGeometricMultigridSolver::MFEMGeometricMultigridSolver(), MFEMScalarQuadratureFunction::MFEMScalarQuadratureFunction(), MFEMTransient::MFEMTransient(), MFEMVectorQuadratureFunction::MFEMVectorQuadratureFunction(), OutputWarehouse::mooseConsole(), SolutionInvalidInterface::mooseDeprecated(), MooseVariableBase::MooseVariableBase(), MooseVariableInterface< T >::MooseVariableInterface(), SolutionInvalidInterface::mooseWarning(), SolutionInvalidInterface::mooseWarningNonPrefixed(), MoveNodesByParsedExpressionModifier::MoveNodesByParsedExpressionModifier(), MultiAppGeneralFieldTransfer::MultiAppGeneralFieldTransfer(), MultiAppUserObjectTransfer::MultiAppUserObjectTransfer(), NEML2PreKernel::NEML2PreKernel(), NodalDamper::NodalDamper(), MooseLinearVariableFV< OutputType >::nodalError(), NodalPatchRecoveryAuxBase::NodalPatchRecoveryAuxBase(), NodalValueSampler::NodalValueSampler(), MeshGenerator::Comparator::operator()(), DOFMapOutput::output(), ProgressOutput::output(), Output::Output(), AdvancedOutput::outputElementalVariables(), ConsoleUtils::outputExecutionInformation(), MaterialOutputAction::outputHelper(), AdvancedOutput::outputInput(), AdvancedOutput::outputNodalVariables(), AdvancedOutput::outputPostprocessors(), Exodus::outputPostprocessors(), Nemesis::outputPostprocessors(), TableOutput::outputReporter(), AdvancedOutput::outputReporters(), AdvancedOutput::outputScalarVariables(), AdvancedOutput::outputSystemInformation(), AdvancedOutput::outputVectorPostprocessors(), SolutionInvalidInterface::paramWarning(), ParsedCurveGenerator::ParsedCurveGenerator(), ParsedODEKernel::ParsedODEKernel(), ComponentPhysicsInterface::physicsExists(), PiecewiseBilinear::PiecewiseBilinear(), PiecewiseByBlockFunctorMaterialTempl< T >::PiecewiseByBlockFunctorMaterialTempl(), PiecewiseFunction::PiecewiseFunction(), PointInUnionCheckUO::PointInUnionCheckUO(), MooseApp::possiblyLoadRestartableMetaData(), MFEMExecutedObject::postprocessorDependencyKey(), PhysicsBase::prefix(), MooseMesh::prepare(), BlockRestrictionDebugOutput::printBlockRestrictionMap(), PerfGraphLivePrint::printStats(), projectInitialConditionOnCustomRange(), MooseBase::queryParam(), MultiApp::readCommandLineArguments(), Receiver::Receiver(), Executor::Result::record(), registerRandomInterface(), MooseApp::registerRestartableDataMapName(), MooseApp::registerRestartableNameWithFilter(), MaterialBase::resetQpProperties(), MultiApp::restore(), ScalarComponentIC::ScalarComponentIC(), MultiApp::setAppOutputFileBase(), setAuxKernelParamsAndLog(), MooseMesh::setBoundaryName(), Control::setControllableValue(), Control::setControllableValueByName(), OutputWarehouse::setFileNumbers(), setPostprocessorValueByName(), setResidualObjectParamsAndLog(), MooseMesh::setSubdomainName(), MooseMesh::setSubdomainName(), NodeSetsGeneratorBase::setup(), SideSetsGeneratorBase::setup(), SurfaceMeshGeneratorBase::setup(), Split::setup(), TransientMultiApp::setupApp(), MoveNodesByParsedExpressionModifier::setupNodalOutputVariables(), NEML2Action::setupOutputMappings(), SideSetExtruderGenerator::SideSetExtruderGenerator(), TransientMultiApp::solveStep(), UserObject::spatialValue(), LinearFVGradientReader::stateComponents(), StitchedMesh::StitchedMesh(), SubProblem::storeBoundaryDelayedCheckMatProp(), SubProblem::storeBoundaryMatPropName(), MaterialBase::storeBoundaryZeroMatProp(), SubProblem::storeBoundaryZeroMatProp(), SubProblem::storeSubdomainDelayedCheckMatProp(), SubProblem::storeSubdomainMatPropName(), MaterialBase::storeSubdomainZeroMatProp(), SubProblem::storeSubdomainZeroMatProp(), ConstraintWarehouse::subdomainsCovered(), MaterialBase::subdomainSetup(), SumPostprocessor::SumPostprocessor(), MFEMPostprocessor::suppliedPostprocessorName(), MFEMVectorPostprocessor::suppliedVectorPostprocessorName(), BoundaryMeshBuilder::surfaceElementSet(), NEML2FEInterpolation::syncWithMainThread(), TaggingInterface::TaggingInterface(), MooseLinearVariableFV< OutputType >::timeIntegratorError(), VectorPostprocessorVisualizationAux::timestepSetup(), ElementSubdomainModifierBase::timestepSetup(), to_json(), MultiAppDofCopyTransfer::transfer(), MultiAppShapeEvaluationTransfer::transferVariable(), MultiAppMFEMCopyTransfer::transferVariables(), MultiAppMFEMShapeEvaluationTransfer::transferVariables(), TransientMultiApp::TransientMultiApp(), MooseBase::typeAndName(), MooseBase::uniqueParameterName(), FVQpFluxBC::uOnGhost(), FVQpFluxBC::uOnUSub(), UserObjectBase::UserObjectBase(), UserObjectInterface::userObjectName(), ParsedAux::validateGenericVectorNames(), MeshInfo::validParams(), MFEMExecutedObject::variableDependencyKey(), PhysicsBase::variableExists(), MultiAppTransfer::variableIntegrityCheck(), VectorMagnitudeFunctorMaterialTempl< is_ad >::VectorMagnitudeFunctorMaterialTempl(), MFEMExecutedObject::vectorPostprocessorDependencyKey(), Convergence::verboseOutput(), AdvancedOutput::wantOutput(), Coupleable::writableCoupledValue(), Coupleable::writableVariable(), Console::write(), MooseApp::writeRestartableMetaData(), and XYQuadrilateralMeshFromBoundaryCurve::XYQuadrilateralMeshFromBoundaryCurve().

◆ needBoundaryMaterialOnSide()

bool FEProblemBase::needBoundaryMaterialOnSide ( BoundaryID  bnd_id,
const THREAD_ID  tid 
)

These methods are used to determine whether stateful material properties need to be stored on internal sides.

There are five situations where this may be the case: 1) DGKernels 2) IntegratedBCs 3)InternalSideUserObjects 4)ElementalAuxBCs 5)InterfaceUserObjects

Method 1:

Parameters
bnd_idthe boundary id for which to see if stateful material properties need to be stored
tidthe THREAD_ID of the caller
Returns
Boolean indicating whether material properties need to be stored

Method 2:

Parameters
subdomain_idthe subdomain id for which to see if stateful material properties need to be stored
tidthe THREAD_ID of the caller
Returns
Boolean indicating whether material properties need to be stored

Definition at line 9645 of file FEProblemBase.C.

9646{
9647 if (_bnd_mat_side_cache[tid].find(bnd_id) == _bnd_mat_side_cache[tid].end())
9648 {
9649 auto & bnd_mat_side_cache = _bnd_mat_side_cache[tid][bnd_id];
9650 bnd_mat_side_cache = false;
9651
9652 // Check systems
9653 if (_aux->needMaterialOnSide(bnd_id))
9654 {
9655 bnd_mat_side_cache = true;
9656 return true;
9657 }
9658 for (auto & nl : _nl)
9659 if (nl->needBoundaryMaterialOnSide(bnd_id, tid))
9660 {
9661 bnd_mat_side_cache = true;
9662 return true;
9663 }
9664
9665 // TODO: these objects should be checked for whether they actually consume materials
9666 // NOTE: InterfaceUO can use use boundary properties too
9667 if (theWarehouse()
9668 .query()
9669 .condition<AttribThread>(tid)
9670 .condition<AttribInterfaces>(Interfaces::SideUserObject | Interfaces::DomainUserObject |
9672 .condition<AttribBoundaries>(bnd_id)
9673 .count() > 0)
9674 {
9675 bnd_mat_side_cache = true;
9676 return true;
9677 }
9678 }
9679
9680 return _bnd_mat_side_cache[tid][bnd_id];
9681}
bool needBoundaryMaterialOnSide(BoundaryID bnd_id, const THREAD_ID tid)
These methods are used to determine whether stateful material properties need to be stored on interna...
KOKKOS_INLINE_FUNCTION const T * find(const T &target, const T *const begin, const T *const end)
Find a value in an array.
Definition KokkosUtils.h:40

Referenced by ComputeMaterialsObjectThread::onBoundary(), ProjectMaterialProperties::onBoundary(), reinitMaterialsBoundary(), reinitMaterialsFaceOnBoundary(), and reinitMaterialsNeighborOnBoundary().

◆ needFV()

virtual void FEProblemBase::needFV ( )
inlineoverridevirtual

marks this problem as including/needing finite volume functionality.

Implements SubProblem.

Definition at line 3006 of file FEProblemBase.h.

3006{ _have_fv = true; }

Referenced by DiffusionFV::initializePhysicsAdditional(), and DisplacedProblem::needFV().

◆ needInterfaceMaterialOnSide()

bool FEProblemBase::needInterfaceMaterialOnSide ( BoundaryID  bnd_id,
const THREAD_ID  tid 
)

Definition at line 9684 of file FEProblemBase.C.

9685{
9686 if (_interface_mat_side_cache[tid].find(bnd_id) == _interface_mat_side_cache[tid].end())
9687 {
9688 auto & interface_mat_side_cache = _interface_mat_side_cache[tid][bnd_id];
9689 interface_mat_side_cache = false;
9690
9691 // Aux-system has not needed interface materials so far
9692 for (auto & nl : _nl)
9693 if (nl->needInterfaceMaterialOnSide(bnd_id, tid))
9694 {
9695 interface_mat_side_cache = true;
9696 return true;
9697 }
9698
9699 // TODO: these objects should be checked for whether they actually consume materials
9700 if (theWarehouse()
9701 .query()
9702 .condition<AttribThread>(tid)
9703 .condition<AttribInterfaces>(Interfaces::InterfaceUserObject |
9705 .condition<AttribBoundaries>(bnd_id)
9706 .count() > 0)
9707 {
9708 interface_mat_side_cache = true;
9709 return true;
9710 }
9711 else if (_interface_materials.hasActiveBoundaryObjects(bnd_id, tid))
9712 {
9713 interface_mat_side_cache = true;
9714 return true;
9715 }
9716 }
9717 return _interface_mat_side_cache[tid][bnd_id];
9718}
bool needInterfaceMaterialOnSide(BoundaryID bnd_id, const THREAD_ID tid)
bool hasActiveBoundaryObjects(THREAD_ID tid=0) const

Referenced by ComputeMaterialsObjectThread::onInterface(), reinitMaterialsFaceOnBoundary(), reinitMaterialsInterface(), and reinitMaterialsNeighborOnBoundary().

◆ needInternalNeighborSideMaterial()

bool FEProblemBase::needInternalNeighborSideMaterial ( SubdomainID  subdomain_id,
const THREAD_ID  tid 
)

Definition at line 9721 of file FEProblemBase.C.

9722{
9723 if (_block_mat_side_cache[tid].find(subdomain_id) == _block_mat_side_cache[tid].end())
9724 {
9725 _block_mat_side_cache[tid][subdomain_id] = false;
9726
9727 for (auto & nl : _nl)
9728 if (nl->needInternalNeighborSideMaterial(subdomain_id, tid))
9729 {
9730 _block_mat_side_cache[tid][subdomain_id] = true;
9731 return true;
9732 }
9733
9734 // TODO: these objects should be checked for whether they actually consume materials
9735 if (theWarehouse()
9736 .query()
9737 .condition<AttribThread>(tid)
9738 .condition<AttribInterfaces>(Interfaces::InternalSideUserObject |
9740 .condition<AttribSubdomains>(subdomain_id)
9741 .count() > 0)
9742 {
9743 _block_mat_side_cache[tid][subdomain_id] = true;
9744 return true;
9745 }
9746 }
9747
9748 return _block_mat_side_cache[tid][subdomain_id];
9749}
bool needInternalNeighborSideMaterial(SubdomainID subdomain_id, const THREAD_ID tid)

Referenced by reinitMaterialsFaceOnBoundary(), reinitMaterialsNeighborOnBoundary(), ComputeMaterialsObjectThread::subdomainChanged(), and ProjectMaterialProperties::subdomainChanged().

◆ needSolutionState()

void FEProblemBase::needSolutionState ( unsigned int  oldest_needed,
Moose::SolutionIterationType  iteration_type 
)

Declare that we need up to old (1) or older (2) solution states for a given type of iteration.

Parameters
oldest_neededoldest solution state needed
iteration_typethe type of iteration for which old/older states are needed

Definition at line 785 of file FEProblemBase.C.

786{
787 for (auto & sys : _solver_systems)
788 sys->needSolutionState(state, iteration_type);
789 _aux->needSolutionState(state, iteration_type);
790}

Referenced by createTagSolutions().

◆ needsPreviousMultiAppFixedPointIterationAuxiliary() [1/2]

bool FEProblemBase::needsPreviousMultiAppFixedPointIterationAuxiliary ( ) const

Check to see whether we need to compute the variable values of the previous multiapp fixed point iteration for the auxiliary system.

Returns
true if the user required values of the previous multiapp fixed point iteration from the auxiliary system

Definition at line 9786 of file FEProblemBase.C.

◆ needsPreviousMultiAppFixedPointIterationAuxiliary() [2/2]

void FEProblemBase::needsPreviousMultiAppFixedPointIterationAuxiliary ( bool  state)

Set a flag that indicated that user required values for the previous multiapp fixed point iterate for the auxiliary system.

Definition at line 9780 of file FEProblemBase.C.

Referenced by FunctorChangeFunctorMaterialTempl< is_ad >::FunctorChangeFunctorMaterialTempl(), and FixedPointSolve::initialSetup().

◆ needsPreviousMultiAppFixedPointIterationSolution() [1/2]

void FEProblemBase::needsPreviousMultiAppFixedPointIterationSolution ( bool  needed,
const unsigned int  solver_sys_num 
)

Set a flag that indicated that user required values for the previous multiapp fixed point iterate for the solver systems (not auxiliary)

Parameters
neededthe value that should be set to the flag
solver_sys_numthe index of the solver system for which the previous iteration is needed

Definition at line 9766 of file FEProblemBase.C.

9768{
9769 _previous_multiapp_fp_nl_solution_required[solver_sys_num] = needed;
9770}

Referenced by FunctorChangeFunctorMaterialTempl< is_ad >::FunctorChangeFunctorMaterialTempl(), and FixedPointSolve::initialSetup().

◆ needsPreviousMultiAppFixedPointIterationSolution() [2/2]

bool FEProblemBase::needsPreviousMultiAppFixedPointIterationSolution ( const unsigned int  solver_sys_num) const

Check to see whether we need to compute the variable values of the previous multiapp fixed point iteration for the solver systems (not auxiliary)

Parameters
solver_sys_numthe index of the solver system for which the previous iteration is needed
Returns
true if the user required values of the previous multiapp fixed point iteration

Definition at line 9773 of file FEProblemBase.C.

9775{
9776 return _previous_multiapp_fp_nl_solution_required[solver_sys_num];
9777}

◆ needsPreviousMultiSystemFixedPointIterationAuxiliary() [1/2]

bool FEProblemBase::needsPreviousMultiSystemFixedPointIterationAuxiliary ( ) const

Check to see whether we need to compute the variable values of the previous multi-system fixed point iteration for the auxiliary system.

Returns
true if the user required values of the previous multi-system fixed point iteration from the auxiliary system

Definition at line 9812 of file FEProblemBase.C.

◆ needsPreviousMultiSystemFixedPointIterationAuxiliary() [2/2]

void FEProblemBase::needsPreviousMultiSystemFixedPointIterationAuxiliary ( bool  state)

Set a flag that indicates that user requires values for the previous multi-system fixed point iterate for the auxiliary system.

Definition at line 9806 of file FEProblemBase.C.

Referenced by FunctorChangeFunctorMaterialTempl< is_ad >::FunctorChangeFunctorMaterialTempl(), and FEProblemSolve::initialSetup().

◆ needsPreviousMultiSystemFixedPointIterationSolution() [1/2]

void FEProblemBase::needsPreviousMultiSystemFixedPointIterationSolution ( bool  needed,
const unsigned int  solver_sys_num 
)

Set a flag that indicates that user requires values for the previous multi-system fixed point iterate for the solver systems (not auxiliary)

Parameters
neededthe value that should be set to the flag
solver_sys_numthe index of the solver system for which the previous iteration is needed

Definition at line 9792 of file FEProblemBase.C.

9794{
9795 _previous_multisystem_fp_nl_solution_required[solver_sys_num] = needed;
9796}

Referenced by FunctorChangeFunctorMaterialTempl< is_ad >::FunctorChangeFunctorMaterialTempl(), and FEProblemSolve::initialSetup().

◆ needsPreviousMultiSystemFixedPointIterationSolution() [2/2]

bool FEProblemBase::needsPreviousMultiSystemFixedPointIterationSolution ( const unsigned int  solver_sys_num) const

Check to see whether we need to compute the variable values of the previous multi-system fixed point iteration for the solver systems (not auxiliary)

Parameters
solver_sys_numthe index of the solver system for which the previous iteration is needed
Returns
true if the user required values of the previous multi-system fixed point iteration

Definition at line 9799 of file FEProblemBase.C.

9801{
9802 return _previous_multisystem_fp_nl_solution_required[solver_sys_num];
9803}

◆ needsPreviousNewtonIteration() [1/2]

bool FEProblemBase::needsPreviousNewtonIteration ( ) const

Check to see whether we need to compute the variable values of the previous Newton iterate.

Returns
true if the user required values of the previous Newton iterate

Definition at line 9752 of file FEProblemBase.C.

◆ needsPreviousNewtonIteration() [2/2]

void FEProblemBase::needsPreviousNewtonIteration ( bool  state)

Set a flag that indicated that user required values for the previous Newton iterate.

Definition at line 9758 of file FEProblemBase.C.

9759{
9761 mooseError("Previous nonlinear solution is required but not added through "
9762 "Problem/previous_nl_solution_required=true");
9763}

Referenced by Coupleable::coupledGradientPreviousNL(), Coupleable::coupledNodalValuePreviousNL(), Coupleable::coupledSecondPreviousNL(), Coupleable::coupledValuePreviousNL(), and NonlinearSystem::solve().

◆ needToAddDefaultMultiAppFixedPointConvergence()

bool FEProblemBase::needToAddDefaultMultiAppFixedPointConvergence ( ) const
inline

Returns true if the problem needs to add the default fixed point convergence.

Definition at line 751 of file FEProblemBase.h.

◆ needToAddDefaultNonlinearConvergence()

bool FEProblemBase::needToAddDefaultNonlinearConvergence ( ) const
inline

Returns true if the problem needs to add the default nonlinear convergence.

Definition at line 746 of file FEProblemBase.h.

◆ needToAddDefaultSteadyStateConvergence()

bool FEProblemBase::needToAddDefaultSteadyStateConvergence ( ) const
inline

Returns true if the problem needs to add the default steady-state detection convergence.

Definition at line 756 of file FEProblemBase.h.

◆ neighborSubdomainSetup()

void FEProblemBase::neighborSubdomainSetup ( SubdomainID  subdomain,
const THREAD_ID  tid 
)
virtual

Definition at line 2691 of file FEProblemBase.C.

2692{
2693 _all_materials.neighborSubdomainSetup(subdomain, tid);
2694}
virtual void neighborSubdomainSetup(THREAD_ID tid=0) const

Referenced by ThreadedFaceLoop< RangeType >::neighborSubdomainChanged().

◆ newAssemblyArray()

void FEProblemBase::newAssemblyArray ( std::vector< std::shared_ptr< SolverSystem > > &  solver_systems)
virtual

Definition at line 804 of file FEProblemBase.C.

805{
806 unsigned int n_threads = libMesh::n_threads();
807
808 _assembly.resize(n_threads);
809 for (const auto i : make_range(n_threads))
810 {
811 _assembly[i].resize(solver_systems.size());
812 for (const auto j : index_range(solver_systems))
813 _assembly[i][j] = std::make_unique<Assembly>(*solver_systems[j], i);
814 }
815}
Keeps track of stuff related to assembling.
Definition Assembly.h:101

Referenced by DumpObjectsProblem::DumpObjectsProblem(), EigenProblem::EigenProblem(), ExternalProblem::ExternalProblem(), and FEProblem::FEProblem().

◆ nlConverged()

bool SubProblem::nlConverged ( const unsigned int  nl_sys_num)
virtualinherited
Returns
whether the given nonlinear system nl_sys_num is converged.

Definition at line 715 of file SubProblem.C.

716{
717 mooseAssert(nl_sys_num < numNonlinearSystems(),
718 "The nonlinear system number is higher than the number of systems we have!");
719 return solverSystemConverged(nl_sys_num);
720}

◆ nLinearIterations()

unsigned int FEProblemBase::nLinearIterations ( const unsigned int  nl_sys_num) const
overridevirtual

Reimplemented from SubProblem.

Definition at line 7448 of file FEProblemBase.C.

7449{
7450 return _nl[nl_sys_num]->nLinearIterations();
7451}

Referenced by PiecewiseLinearFromVectorPostprocessor::valueInternal().

◆ nlSysNum()

unsigned int FEProblemBase::nlSysNum ( const NonlinearSystemName &  nl_sys_name) const
overridevirtual
Returns
the nonlinear system number corresponding to the provided nl_sys_name

Implements SubProblem.

Definition at line 7179 of file FEProblemBase.C.

7180{
7181 std::istringstream ss(nl_sys_name);
7182 unsigned int nl_sys_num;
7183 if (!(ss >> nl_sys_num) || !ss.eof())
7184 nl_sys_num = libmesh_map_find(_nl_sys_name_to_num, nl_sys_name);
7185
7186 return nl_sys_num;
7187}

Referenced by DisplacedProblem::nlSysNum().

◆ nNonlinearIterations()

unsigned int FEProblemBase::nNonlinearIterations ( const unsigned int  nl_sys_num) const
overridevirtual

Reimplemented from SubProblem.

Definition at line 7442 of file FEProblemBase.C.

7443{
7444 return _nl[nl_sys_num]->nNonlinearIterations();
7445}

Referenced by PiecewiseLinearFromVectorPostprocessor::valueInternal().

◆ nonlocalCouplingEntries()

std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & FEProblemBase::nonlocalCouplingEntries ( const THREAD_ID  tid,
const unsigned int  nl_sys_num 
)

Definition at line 7031 of file FEProblemBase.C.

7032{
7033 return _assembly[tid][nl_sys]->nonlocalCouplingEntries();
7034}

Referenced by ComputeFullJacobianThread::computeOnBoundary(), and ComputeFullJacobianThread::computeOnElement().

◆ nonlocalCouplingMatrix()

const libMesh::CouplingMatrix & FEProblemBase::nonlocalCouplingMatrix ( const unsigned  i) const
overridevirtual
Returns
the nonlocal coupling matrix for the i'th nonlinear system

Implements SubProblem.

Definition at line 10444 of file FEProblemBase.C.

10445{
10446 return _nonlocal_cm[i];
10447}

Referenced by DisplacedProblem::nonlocalCouplingMatrix().

◆ notifyWhenMeshChanges()

void FEProblemBase::notifyWhenMeshChanges ( MeshChangedInterface mci)

Register an object that derives from MeshChangedInterface to be notified when the mesh changes.

Definition at line 9178 of file FEProblemBase.C.

9179{
9180 _notify_when_mesh_changes.push_back(mci);
9181}

Referenced by MeshChangedInterface::MeshChangedInterface().

◆ notifyWhenMeshDisplaces()

void FEProblemBase::notifyWhenMeshDisplaces ( MeshDisplacedInterface mdi)

Register an object that derives from MeshDisplacedInterface to be notified when the displaced mesh gets updated.

Definition at line 9184 of file FEProblemBase.C.

9185{
9186 _notify_when_mesh_displaces.push_back(mdi);
9187}

Referenced by MeshDisplacedInterface::MeshDisplacedInterface().

◆ numConcurrentMultiApps()

unsigned int FEProblemBase::numConcurrentMultiApps ( ) const
inline
Returns
the number set for concurrent multiapp execution; greater than 1 enables running the multiapps of an 'execution_order_group' concurrently, each on its own subset of ranks

Definition at line 1708 of file FEProblemBase.h.

1708{ return _num_concurrent_multiapps; }

◆ numGridSteps()

void FEProblemBase::numGridSteps ( unsigned int  num_grid_steps)
inline

Set the number of steps in a grid sequences.

Definition at line 2754 of file FEProblemBase.h.

2754{ _num_grid_steps = num_grid_steps; }

Referenced by FEProblemSolve::FEProblemSolve().

◆ numLinearSystems()

virtual std::size_t FEProblemBase::numLinearSystems ( ) const
inlineoverridevirtual

◆ numMatrixTags()

virtual unsigned int SubProblem::numMatrixTags ( ) const
inlinevirtualinherited

◆ numNonlinearSystems()

virtual std::size_t FEProblemBase::numNonlinearSystems ( ) const
inlineoverridevirtual

◆ numSolverSystems()

virtual std::size_t FEProblemBase::numSolverSystems ( ) const
inlineoverridevirtual

◆ numVectorTags()

unsigned int SubProblem::numVectorTags ( const Moose::VectorTagType  type = Moose::VECTOR_TAG_ANY) const
virtualinherited

◆ objectExecuteHelper()

template<typename T >
void FEProblemBase::objectExecuteHelper ( const std::vector< T * > &  objects)
static

Definition at line 3786 of file FEProblemBase.h.

3787{
3788 for (T * obj_ptr : objects)
3789 obj_ptr->execute();
3790}

◆ objectSetupHelper()

template<typename T >
void FEProblemBase::objectSetupHelper ( const std::vector< T * > &  objects,
const ExecFlagType exec_flag 
)
static

Helpers for calling the necessary setup/execute functions for the supplied objects.

Definition at line 3752 of file FEProblemBase.h.

3753{
3754 if (exec_flag == EXEC_INITIAL)
3755 {
3756 for (T * obj_ptr : objects)
3757 obj_ptr->initialSetup();
3758 }
3759
3760 else if (exec_flag == EXEC_TIMESTEP_BEGIN)
3761 {
3762 for (const auto obj_ptr : objects)
3763 obj_ptr->timestepSetup();
3764 }
3765 else if (exec_flag == EXEC_SUBDOMAIN)
3766 {
3767 for (const auto obj_ptr : objects)
3768 obj_ptr->subdomainSetup();
3769 }
3770
3771 else if (exec_flag == EXEC_NONLINEAR)
3772 {
3773 for (const auto obj_ptr : objects)
3774 obj_ptr->jacobianSetup();
3775 }
3776
3777 else if (exec_flag == EXEC_LINEAR)
3778 {
3779 for (const auto obj_ptr : objects)
3780 obj_ptr->residualSetup();
3781 }
3782}
void timestepSetup() override
virtual void subdomainSetup(SubdomainID subdomain, const THREAD_ID tid)

◆ onlyAllowDefaultNonlinearConvergence()

virtual bool FEProblemBase::onlyAllowDefaultNonlinearConvergence ( ) const
inlinevirtual

Returns true if an error will result if the user supplies 'nonlinear_convergence'.

Some problems are strongly tied to their convergence, and it does not make sense to use any convergence other than their default and additionally would be error-prone.

Reimplemented in ReferenceResidualProblem.

Definition at line 800 of file FEProblemBase.h.

800{ return false; }

Referenced by FEProblemSolve::FEProblemSolve().

◆ onTimestepBegin()

void FEProblemBase::onTimestepBegin ( )
overridevirtual

Implements SubProblem.

Definition at line 7610 of file FEProblemBase.C.

7611{
7612 TIME_SECTION("onTimestepBegin", 2);
7613
7614 for (auto & nl : _nl)
7615 nl->onTimestepBegin();
7616}
virtual void onTimestepBegin() override

Referenced by TransientBase::takeStep(), and MFEMTransient::takeStep().

◆ onTimestepEnd()

void FEProblemBase::onTimestepEnd ( )
overridevirtual

◆ outputStep()

void FEProblemBase::outputStep ( ExecFlagType  type)
virtual

Output the current step.

Will ensure that everything is in the proper state to be outputted. Then tell the OutputWarehouse to do its thing

Parameters
typeThe type execution flag (see Moose.h)

Reimplemented in DumpObjectsProblem.

Definition at line 7573 of file FEProblemBase.C.

7574{
7575 TIME_SECTION("outputStep", 1, "Outputting");
7576
7578
7579 for (auto & sys : _solver_systems)
7580 sys->update();
7581 _aux->update();
7582
7584 _displaced_problem->syncSolutions();
7586
7588}
void outputStep(ExecFlagType type)
Calls the outputStep method for each output object.

Referenced by TransientBase::endStep(), Eigenvalue::execute(), SteadyBase::execute(), TransientBase::execute(), MFEMSteady::execute(), InversePowerMethod::init(), NonlinearEigen::init(), EigenExecutionerBase::postExecute(), TransientBase::preExecute(), FEProblemSolve::solve(), FixedPointSolve::solve(), FixedPointSolve::solveStep(), and TransientMultiApp::solveStep().

◆ paramError()

template<typename... Args>
void MooseBase::paramError ( const std::string &  param,
Args...  args 
) const
inherited

Emits an error prefixed with the file and line number of the given param (from the input file) along with the full parameter path+name followed by the given args as the message.

If this object's parameters were not created directly by the Parser, then this function falls back to the normal behavior of mooseError - only printing a message using the given args.

Definition at line 457 of file MooseBase.h.

458{
459 _pars.paramError(param, std::forward<Args>(args)...);
460}
void paramError(const std::string &param, Args... args) const
Emits a parameter error prefixed with the parameter location and object information if available.

Referenced by HierarchicalGridPartitioner::_do_partition(), AutoCheckpointAction::act(), CommonOutputAction::act(), SetupDebugAction::act(), DiffusionCG::addFEKernels(), DiffusionFV::addFVKernels(), NEML2ModelExecutor::addGatheredParameter(), NEML2ModelExecutor::addGatheredVariable(), ADDGKernel::ADDGKernel(), ComponentJunction::addMeshGenerators(), CylinderComponent::addMeshGenerators(), ReporterPointSource::addPoints(), ADIntegratedBCTempl< T >::ADIntegratedBCTempl(), ADKernelTempl< T >::ADKernelTempl(), ADPenaltyPeriodicSegmentalConstraint::ADPenaltyPeriodicSegmentalConstraint(), ADPeriodicSegmentalConstraint::ADPeriodicSegmentalConstraint(), AdvancedExtruderGenerator::AdvancedExtruderGenerator(), AdvectiveFluxAux::AdvectiveFluxAux(), AnnularMesh::AnnularMesh(), AnnularMeshGenerator::AnnularMeshGenerator(), ArrayBodyForce::ArrayBodyForce(), ArrayCoupledForce::ArrayCoupledForce(), ArrayDGKernel::ArrayDGKernel(), ArrayDGLowerDKernel::ArrayDGLowerDKernel(), ArrayDirichletBC::ArrayDirichletBC(), ArrayHFEMDirichletBC::ArrayHFEMDirichletBC(), ArrayIntegratedBC::ArrayIntegratedBC(), ArrayKernel::ArrayKernel(), ArrayLowerDIntegratedBC::ArrayLowerDIntegratedBC(), ArrayParsedAux::ArrayParsedAux(), ArrayPenaltyDirichletBC::ArrayPenaltyDirichletBC(), ArrayReactionNodalKernelTempl< is_ad >::ArrayReactionNodalKernelTempl(), ArrayVacuumBC::ArrayVacuumBC(), ArrayVarReductionAux::ArrayVarReductionAux(), ParsedSubdomainIDsGenerator::assignElemSubdomainID(), AuxKernelBase::AuxKernelBase(), BatchMeshGeneratorAction::BatchMeshGeneratorAction(), BlockDeletionGenerator::BlockDeletionGenerator(), BlockWeightedPartitioner::BlockWeightedPartitioner(), BoundaryIntegralValueConstraint::BoundaryIntegralValueConstraint(), BoundaryLinearFVFluxIntegral::BoundaryLinearFVFluxIntegral(), BoundsBase::BoundsBase(), BreakMeshByBlockGenerator::BreakMeshByBlockGenerator(), BSplineCurveGenerator::BSplineCurveGenerator(), BuildArrayVariableAux::BuildArrayVariableAux(), MFEMFESpaceHierarchy::buildHierarchy(), MFEMMesh::buildMesh(), MFEMGeometricMultigridSolver::BuildMultigrid(), TimeSequenceStepperBase::buildSequence(), CartesianGridDivision::CartesianGridDivision(), CartesianMeshGenerator::CartesianMeshGenerator(), SurfaceDelaunayGeneratorBase::checkBoundaryAndHolesParams(), checkComponent(), Moose::Kokkos::ParsedObjectBase::checkDuplicateSymbols(), SamplerBase::checkForStandardFieldVariableType(), MeshGenerator::checkGetMesh(), ComponentInitialConditionInterface::checkInitialConditionsAllRequested(), BatchMeshGeneratorAction::checkInputParameterType(), PhysicsBase::checkIntegrityEarly(), SurfaceDelaunayGeneratorBase::checkInteriorPoints(), SideUserObject::checkNoInterfaceMaterialPropertyDependencies(), PostprocessorInterface::checkParam(), checkProblemIntegrity(), MultiAppReporterTransfer::checkSiblingsTransferSupported(), MFEMMultiAppTransfer::checkValidTransferProblemTypes(), Coupleable::checkVar(), MultiAppTransfer::checkVariable(), CircularBoundaryCorrectionGenerator::CircularBoundaryCorrectionGenerator(), CircularBoundaryCorrectionGenerator::circularCenterCalculator(), MultiAppGeneralFieldTransfer::closestToPosition(), CoarsenBlockGenerator::CoarsenBlockGenerator(), CombinedVectorPostprocessor::CombinedVectorPostprocessor(), CombinerGenerator::CombinerGenerator(), ComponentInitialConditionInterface::ComponentInitialConditionInterface(), ComponentJunction::ComponentJunction(), ComponentMaterialPropertyInterface::ComponentMaterialPropertyInterface(), CompositionDT::CompositionDT(), ConcentricCircleMeshGenerator::ConcentricCircleMeshGenerator(), LibtorchNeuralNetControl::conditionalParameterError(), ConservativeAdvectionBCTempl< is_ad >::ConservativeAdvectionBCTempl(), ConservativeAdvectionTempl< is_ad >::ConservativeAdvectionTempl(), ConstantVectorPostprocessor::ConstantVectorPostprocessor(), ContainsPointAux::ContainsPointAux(), CopyValueAux::CopyValueAux(), MultiAppGeneralFieldTransfer::correctSolutionVectorValues(), Coupleable::Coupleable(), CoupledForceTempl< is_ad >::CoupledForceTempl(), CoupledValueFunctionMaterialTempl< is_ad >::CoupledValueFunctionMaterialTempl(), MultiApp::createApp(), MeshGeneratorSystem::createMeshGenerator(), MoveBoundaryNodesToCurveGenerator::curveGenerator(), CylindricalGridDivision::CylindricalGridDivision(), DebugResidualAux::DebugResidualAux(), ConstantReporter::declareConstantReporterValue(), ConstantReporter::declareConstantReporterValues(), AccumulateReporter::declareLateValues(), DefaultMultiAppFixedPointConvergence::DefaultMultiAppFixedPointConvergence(), DGKernel::DGKernel(), DGKernelBase::DGKernelBase(), DGLowerDKernel::DGLowerDKernel(), DiffusionFluxAux::DiffusionFluxAux(), DomainUserObject::DomainUserObject(), EigenProblem::EigenProblem(), EigenProblemSolve::EigenProblemSolve(), ElementAdaptivityLevelAux::ElementAdaptivityLevelAux(), ElementGenerator::ElementGenerator(), ElementGroupCentroidPositions::ElementGroupCentroidPositions(), ElementLengthAux::ElementLengthAux(), ElementLpNormAux::ElementLpNormAux(), ElementNormalAux::ElementNormalAux(), ExtraIDIntegralVectorPostprocessor::elementValue(), ElementValueSampler::ElementValueSampler(), ElementVectorL2Error::ElementVectorL2Error(), EqualValueEmbeddedConstraintTempl< is_ad >::EqualValueEmbeddedConstraintTempl(), ReporterPointSource::errorCheck(), StitchMeshGeneratorBase::errorMissingBoundary(), ExamplePatchMeshGenerator::ExamplePatchMeshGenerator(), FunctorNodalCorrector::execute(), MultiAppNearestNodeTransfer::execute(), MultiAppUserObjectTransfer::execute(), ExtraElementIDAux::ExtraElementIDAux(), ExtraElementIntegerDivision::ExtraElementIntegerDivision(), ExtraIDIntegralVectorPostprocessor::ExtraIDIntegralVectorPostprocessor(), FEProblemBase(), FEProblemSolve::FEProblemSolve(), FileMeshGenerator::FileMeshGenerator(), FillBetweenCurvesGenerator::FillBetweenCurvesGenerator(), FillBetweenSidesetsGenerator::FillBetweenSidesetsGenerator(), SpatialUserObjectVectorPostprocessor::fillPoints(), CombinerGenerator::fillPositions(), MultiApp::fillPositions(), InternalSideIndicatorBase::finalize(), MeshTriangulationUtils::finalizeTriangulation(), FixedPointSolve::findTransformedSystem(), FixedPointSolve::FixedPointSolve(), ForcingFunctionAux::ForcingFunctionAux(), FullSolveMultiApp::FullSolveMultiApp(), FunctionArrayAux::FunctionArrayAux(), FunctionValuePostprocessor::FunctionValuePostprocessor(), FunctorADConverterTempl< T >::FunctorADConverterTempl(), FunctorAux::FunctorAux(), FunctorBinnedValuesDivision::FunctorBinnedValuesDivision(), FunctorCoordinatesFunctionAux::FunctorCoordinatesFunctionAux(), FunctorElementalGradientAuxTempl< is_ad >::FunctorElementalGradientAuxTempl(), FunctorExtremaPositions::FunctorExtremaPositions(), FunctorIC::FunctorIC(), FunctorNodalCorrector::FunctorNodalCorrector(), FunctorPositions::FunctorPositions(), FunctorSmootherTempl< T >::FunctorSmootherTempl(), FunctorVectorElementalAuxTempl< is_ad >::FunctorVectorElementalAuxTempl(), FVAdvection::FVAdvection(), FVFluxBC::FVFluxBC(), FVInterfaceKernel::FVInterfaceKernel(), FVOneVarDiffusionInterface::FVOneVarDiffusionInterface(), FVTwoVarContinuityConstraint::FVTwoVarContinuityConstraint(), Boundary2DDelaunayGenerator::General2DDelaunay(), SurfaceSubdomainsDelaunayRemesher::General2DDelaunay(), AddMetaDataGenerator::generate(), AdvancedExtruderGenerator::generate(), BlockDeletionGenerator::generate(), BlockToMeshConverterGenerator::generate(), Boundary2DDelaunayGenerator::generate(), BoundaryDeletionGenerator::generate(), BoundaryElementConversionGenerator::generate(), BreakBoundaryOnSubdomainGenerator::generate(), BreakMeshByBlockGenerator::generate(), BreakMeshByElementGenerator::generate(), CircularBoundaryCorrectionGenerator::generate(), CoarsenBlockGenerator::generate(), CoarsenSurfaceMeshAlongSidesetGenerator::generate(), CombinerGenerator::generate(), CutMeshByLevelSetGeneratorBase::generate(), ElementsToTetrahedronsConverter::generate(), ExtraNodesetGenerator::generate(), FillBetweenCurvesGenerator::generate(), FillBetweenSidesetsGenerator::generate(), FlipSidesetGenerator::generate(), GeneratedMeshGenerator::generate(), LowerDBlockFromSidesetGenerator::generate(), ManifoldSubdomainGenerator::generate(), MeshCollectionGenerator::generate(), MeshExtruderGenerator::generate(), MoveBoundaryNodesToCurveGenerator::generate(), ParsedCurveGenerator::generate(), ParsedExtraElementIDGenerator::generate(), ParsedSubdomainGeneratorBase::generate(), PlaneIDMeshGenerator::generate(), PolyLineMeshFollowingNodeSetGenerator::generate(), ProjectSideSetOntoLevelSetGenerator::generate(), RefineBlockGenerator::generate(), RefineSidesetGenerator::generate(), RenameBlockGenerator::generate(), RenameBoundaryGenerator::generate(), RenumberBySubdomainGenerator::generate(), SideSetsFromNodeSetsGenerator::generate(), StackGenerator::generate(), SubdomainBoundingBoxGenerator::generate(), SubdomainsFromPartitionerGenerator::generate(), SurfaceSubdomainsDelaunayRemesher::generate(), TriToQuadConverter::generate(), UniqueExtraIDMeshGenerator::generate(), XYFrontalDelaunayGenerator::generate(), XYMeshLineCutter::generate(), XYZDelaunayGenerator::generate(), PatternedMeshGenerator::generate(), GeneratedMeshGenerator::GeneratedMeshGenerator(), BoundaryLayerUtils::generateOffsetPolyline(), GenericConstantStdVectorMaterialTempl< is_ad >::GenericConstantStdVectorMaterialTempl(), GenericFunctorGradientMaterialTempl< is_ad >::GenericFunctorGradientMaterialTempl(), GenericFunctorMaterialTempl< is_ad >::GenericFunctorMaterialTempl(), GenericFunctorTimeDerivativeMaterialTempl< is_ad >::GenericFunctorTimeDerivativeMaterialTempl(), GenericVectorFunctorMaterialTempl< is_ad >::GenericVectorFunctorMaterialTempl(), PropertyReadFile::getBlockData(), ComponentBoundaryConditionInterface::getBoundaryCondition(), MultiApp::getCommandLineArgs(), PropertyReadFile::getData(), PropertyReadFile::getFileNames(), Sampler::getGlobalSamples(), ComponentInitialConditionInterface::getInitialCondition(), NEML2Action::getInputParameterMapping(), MultiAppNearestNodeTransfer::getLocalEntitiesAndComponents(), Sampler::getLocalSamples(), MeshGenerator::getMeshGeneratorNameFromParam(), MeshGenerator::getMeshGeneratorNamesFromParam(), Sampler::getNextLocalRow(), FEProblemSolve::getParamFromNonlinearSystemVectorParam(), PostprocessorInterface::getPostprocessorNameInternal(), PostprocessorInterface::getPostprocessorValueInternal(), MultiAppNearestNodeTransfer::getTargetLocalNodes(), UserObjectInterface::getUserObjectBase(), UserObjectInterface::getUserObjectName(), AddPeriodicBCAction::getVariables(), HFEMDirichletBC::HFEMDirichletBC(), AddVariableAction::init(), MFEMTransient::init(), MultiApp::init(), DistributedPositions::initialize(), BlockWeightedPartitioner::initialize(), BlockRestrictable::initializeBlockRestrictable(), BoundaryRestrictable::initializeBoundaryRestrictable(), PhysicsBase::initializePhysics(), ReferenceResidualConvergence::initialSetup(), PiecewiseConstantFromCSV::initialSetup(), SolutionIC::initialSetup(), LibtorchControlValuePostprocessor::initialSetup(), ElementSubdomainModifierBase::initialSetup(), MFEMScalarCoefficientPointValueSampler::initialSetup(), FullSolveMultiApp::initialSetup(), JSONOutput::initialSetup(), BoundaryLinearFVFluxIntegral::initialSetup(), SideFVFluxBCIntegral::initialSetup(), MultiAppCloneReporterTransfer::initialSetup(), MultiAppDofCopyTransfer::initialSetup(), MultiAppGeneralFieldKDTreeTransferBase::initialSetup(), MultiAppGeneralFieldNearestLocationTransfer::initialSetup(), MultiAppGeneralFieldTransfer::initialSetup(), MultiAppVariableValueSamplePostprocessorTransfer::initialSetup(), PointInPolyhedronCheckUO::initialSetup(), HistogramVectorPostprocessor::initialSetup(), SampledOutput::initSample(), AddMetaDataGenerator::inputChecker(), IntegratedBC::IntegratedBC(), InterfaceDiffusiveFluxIntegralTempl< is_ad >::InterfaceDiffusiveFluxIntegralTempl(), InterfaceValueUserObjectAux::InterfaceValueUserObjectAux(), InternalSideIndicatorBase::InternalSideIndicatorBase(), InterpolatedStatefulMaterialTempl< T >::InterpolatedStatefulMaterialTempl(), InversePowerMethod::InversePowerMethod(), IterationAdaptiveDT::IterationAdaptiveDT(), MultiApp::keepSolutionDuringRestore(), Kernel::Kernel(), LibtorchNeuralNetControl::LibtorchNeuralNetControl(), LinearCombinationFunction::LinearCombinationFunction(), LinearFVAdvectionDiffusionFunctorRobinBC::LinearFVAdvectionDiffusionFunctorRobinBC(), LowerDIntegratedBC::LowerDIntegratedBC(), PNGOutput::makeMeshFunc(), MatCoupledForce::MatCoupledForce(), MaterialADConverterTempl< T >::MaterialADConverterTempl(), MaterialFunctorConverterTempl< T >::MaterialFunctorConverterTempl(), MatReactionTempl< is_ad >::MatReactionTempl(), MatrixSymmetryCheck::MatrixSymmetryCheck(), PatternedMeshGenerator::mergeSubdomainNameMaps(), MeshCollectionGenerator::MeshCollectionGenerator(), MeshDiagnosticsGenerator::MeshDiagnosticsGenerator(), MeshDivisionAux::MeshDivisionAux(), MeshGenerator::MeshGenerator(), MeshGeneratorComponent::MeshGeneratorComponent(), MeshInfo::MeshInfo(), MFEMComplexSumAux::MFEMComplexSumAux(), MFEMFunctorMaterial::MFEMFunctorMaterial(), MFEMGeneratedMeshGenerator::MFEMGeneratedMeshGenerator(), MFEMGenericFunctorMaterial::MFEMGenericFunctorMaterial(), MFEMGenericFunctorVectorMaterial::MFEMGenericFunctorVectorMaterial(), MFEMGeometricMultigridSolver::MFEMGeometricMultigridSolver(), MFEMMultiAppTransfer::MFEMMultiAppTransfer(), MFEMNDtoRTAux::MFEMNDtoRTAux(), MFEMSumAux::MFEMSumAux(), MFEMVariable::MFEMVariable(), MooseLinearVariableFV< OutputType >::MooseLinearVariableFV(), UserObjectInterface::mooseObjectError(), MoosePreconditioner::MoosePreconditioner(), MooseStaticCondensationPreconditioner::MooseStaticCondensationPreconditioner(), MooseVariableBase::MooseVariableBase(), MortarConstraintBase::MortarConstraintBase(), MortarNodalAuxKernelTempl< ComputeValueType >::MortarNodalAuxKernelTempl(), MultiApp::moveApp(), MoveBoundaryNodesToCurveGenerator::MoveBoundaryNodesToCurveGenerator(), MoveNodeGenerator::MoveNodeGenerator(), MoveNodesByParsedExpressionModifier::MoveNodesByParsedExpressionModifier(), TriToQuadConverter::moveSurvivingTriangles(), MultiApp::MultiApp(), MultiAppCloneReporterTransfer::MultiAppCloneReporterTransfer(), MultiAppGeneralFieldFunctorTransfer::MultiAppGeneralFieldFunctorTransfer(), MultiAppGeneralFieldKDTreeTransferBase::MultiAppGeneralFieldKDTreeTransferBase(), MultiAppGeneralFieldShapeEvaluationTransfer::MultiAppGeneralFieldShapeEvaluationTransfer(), MultiAppGeneralFieldTransfer::MultiAppGeneralFieldTransfer(), MultiAppGeneralFieldUserObjectTransfer::MultiAppGeneralFieldUserObjectTransfer(), MultiAppGeometricInterpolationTransfer::MultiAppGeometricInterpolationTransfer(), MultiAppNearestNodeTransfer::MultiAppNearestNodeTransfer(), MultiAppPostprocessorInterpolationTransfer::MultiAppPostprocessorInterpolationTransfer(), MultiAppPostprocessorToAuxScalarTransfer::MultiAppPostprocessorToAuxScalarTransfer(), MultiAppPostprocessorTransfer::MultiAppPostprocessorTransfer(), MultiAppProjectionTransfer::MultiAppProjectionTransfer(), MultiAppReporterTransfer::MultiAppReporterTransfer(), MultiAppScalarToAuxScalarTransfer::MultiAppScalarToAuxScalarTransfer(), MultiAppShapeEvaluationTransfer::MultiAppShapeEvaluationTransfer(), MultiAppTransfer::MultiAppTransfer(), MultiAppUserObjectTransfer::MultiAppUserObjectTransfer(), MultiAppVariableValueSamplePostprocessorTransfer::MultiAppVariableValueSamplePostprocessorTransfer(), MultiAppVariableValueSampleTransfer::MultiAppVariableValueSampleTransfer(), MultiAppVectorPostprocessorTransfer::MultiAppVectorPostprocessorTransfer(), MultiSystemSolveObject::MultiSystemSolveObject(), NearestNodeValueAux::NearestNodeValueAux(), NEML2Action::NEML2Action(), NEML2PreKernel::NEML2PreKernel(), NestedDivision::NestedDivision(), NodalBC::NodalBC(), NodalEqualValueConstraint::NodalEqualValueConstraint(), NodalKernel::NodalKernel(), NodalPatchRecoveryAux::NodalPatchRecoveryAux(), NodalValueSampler::NodalValueSampler(), NumDOFs::NumDOFs(), OrientSurfaceMeshGenerator::OrientSurfaceMeshGenerator(), MeshTriangulationUtils::outerBoundaryIds(), Output::Output(), ParsedCurveGenerator::ParsedCurveGenerator(), ParsedFunctorMaterialTempl< is_ad >::ParsedFunctorMaterialTempl(), ParsedPostprocessor::ParsedPostprocessor(), ParsedReporterBase::ParsedReporterBase(), ParsedScalarReporter::ParsedScalarReporter(), ParsedSubdomainGeneratorBase::ParsedSubdomainGeneratorBase(), ParsedVectorRealReductionReporter::ParsedVectorRealReductionReporter(), ParsedVectorReporter::ParsedVectorReporter(), ParsedVectorVectorRealReductionReporter::ParsedVectorVectorRealReductionReporter(), PatternedMeshGenerator::PatternedMeshGenerator(), PenaltyPeriodicSegmentalConstraint::PenaltyPeriodicSegmentalConstraint(), PeriodicSegmentalConstraint::PeriodicSegmentalConstraint(), PIDTransientControl::PIDTransientControl(), PlaneDeletionGenerator::PlaneDeletionGenerator(), PlaneIDMeshGenerator::PlaneIDMeshGenerator(), PointInPolyhedronBaseUO::PointInPolyhedronBaseUO(), PointInSignedFunctionCheckUO::PointInSignedFunctionCheckUO(), PointInUnionCheckUO::PointInUnionCheckUO(), PointwiseRenormalizeVector::PointwiseRenormalizeVector(), PolyLineMeshFollowingNodeSetGenerator::PolyLineMeshFollowingNodeSetGenerator(), EqualValueBoundaryConstraint::populateSecondaryNodes(), ReporterInterface::possiblyCheckHasReporter(), VectorPostprocessorInterface::possiblyCheckHasVectorPostprocessor(), LibmeshPartitioner::prepareBlocksForSubdomainPartitioner(), ProjectedMaterialPropertyNodalPatchRecoveryAux::ProjectedMaterialPropertyNodalPatchRecoveryAux(), ProjectSideSetOntoLevelSetGenerator::ProjectSideSetOntoLevelSetGenerator(), PropertyReadFile::PropertyReadFile(), RandomIC::RandomIC(), RankTwoTensorFromComponentProperties::RankTwoTensorFromComponentProperties(), MultiApp::readCommandLineArguments(), PropertyReadFile::readData(), SolutionUserObjectBase::readExodusIIOrNemesis(), SolutionUserObjectBase::readXda(), ReferenceResidualConvergence::ReferenceResidualConvergence(), RefineBlockGenerator::RefineBlockGenerator(), RefineSidesetGenerator::RefineSidesetGenerator(), RenameBlockGenerator::RenameBlockGenerator(), RenameBoundaryGenerator::RenameBoundaryGenerator(), ReporterPointSource::ReporterPointSource(), restoreSolutions(), SecondTimeDerivativeAux::SecondTimeDerivativeAux(), setLinearConvergenceNames(), setNonlinearConvergenceNames(), MooseMesh::setPartitioner(), NodeSetsGeneratorBase::setup(), SideSetsGeneratorBase::setup(), SurfaceMeshGeneratorBase::setup(), CylinderComponent::setupComponent(), NEML2Action::setupDerivativeMappings(), NEML2Action::setupInputMappings(), MultiSystemSolveObject::setupMultiSystemFixedPointRelaxationFactors(), MoveNodesByParsedExpressionModifier::setupNodalOutputVariables(), NEML2Action::setupParameterDerivativeMappings(), NEML2Action::setupParameterMappings(), SetupQuadratureAction::SetupQuadratureAction(), SidesetAroundSubdomainUpdater::SidesetAroundSubdomainUpdater(), SideSetsFromBoundingBoxGenerator::SideSetsFromBoundingBoxGenerator(), SideValueSampler::SideValueSampler(), SingleRankPartitioner::SingleRankPartitioner(), SphericalGridDivision::SphericalGridDivision(), StitchBoundaryMeshGenerator::StitchBoundaryMeshGenerator(), StitchMeshGenerator::StitchMeshGenerator(), SurfaceSubdomainsDelaunayRemesher::SurfaceSubdomainsDelaunayRemesher(), SymmetryTransformGenerator::SymmetryTransformGenerator(), TagVectorAux::TagVectorAux(), XYFrontalDelaunayGenerator::targetArea(), Terminator::Terminator(), TimeDerivativeAux::TimeDerivativeAux(), Transfer::Transfer(), TransformGenerator::TransformGenerator(), TransientMultiApp::TransientMultiApp(), CylinderComponent::translation(), MeshTriangulationUtils::triangulateWithDelaunay(), TriToQuadConverter::TriToQuadConverter(), ParsedCurveGenerator::tSectionSpaceDefiner(), UniqueExtraIDMeshGenerator::UniqueExtraIDMeshGenerator(), UserObjectBase::UserObjectBase(), Checkpoint::validateExecuteOn(), ParsedAux::validateGenericVectorNames(), MFEMProblem::validateVariableNumericType(), VariableCondensationPreconditioner::VariableCondensationPreconditioner(), VectorBodyForce::VectorBodyForce(), VectorFunctionDirichletBC::VectorFunctionDirichletBC(), VectorFunctionIC::VectorFunctionIC(), VolumeAux::VolumeAux(), WebServerControl::WebServerControl(), XYDelaunayGenerator::XYDelaunayGenerator(), XYFrontalDelaunayGenerator::XYFrontalDelaunayGenerator(), XYMeshLineCutter::XYMeshLineCutter(), XYQuadrilateralMeshFromBoundaryCurve::XYQuadrilateralMeshFromBoundaryCurve(), and XYZDelaunayGenerator::XYZDelaunayGenerator().

◆ parameters()

const InputParameters & MooseBase::parameters ( ) const
inlineinherited

Get the parameters of the object.

Returns
The parameters of the object

Definition at line 131 of file MooseBase.h.

131{ return _pars; }

Referenced by AddActionComponentAction::act(), CommonOutputAction::act(), CSGOnlyAction::act(), MeshOnlyAction::act(), SetupDebugAction::act(), SplitMeshAction::act(), Action::Action(), addAnyRedistributers(), addAuxKernel(), MFEMProblem::addAuxKernel(), addAuxScalarKernel(), DisplacedProblem::addAuxVariable(), MFEMProblem::addAuxVariable(), addBoundaryCondition(), MFEMProblem::addBoundaryCondition(), addConstraint(), addConvergence(), addDamper(), AddDefaultConvergenceAction::addDefaultMultiAppFixedPointConvergence(), addDefaultMultiAppFixedPointConvergence(), AddDefaultConvergenceAction::addDefaultNonlinearConvergence(), addDefaultNonlinearConvergence(), ReferenceResidualProblem::addDefaultNonlinearConvergence(), AddDefaultConvergenceAction::addDefaultSteadyStateConvergence(), addDefaultSteadyStateConvergence(), addDGKernel(), addDiracKernel(), addDistribution(), MFEMProblem::addFESpace(), MFEMProblem::addFESpaceHierarchy(), addFunction(), MFEMProblem::addFunction(), addFunctorMaterial(), MFEMProblem::addFunctorMaterial(), addFVBC(), addFVGradientMethod(), addFVInitialCondition(), addFVInterfaceKernel(), addFVInterpolationMethod(), addFVKernel(), MFEMProblem::addGridFunction(), addHDGKernel(), MFEMProblem::addImagComponentToBC(), MFEMProblem::addImagComponentToKernel(), addIndicator(), MFEMProblem::addIndicator(), addInitialCondition(), MFEMProblem::addInitialCondition(), DiffusionPhysicsBase::addInitialConditions(), addInterfaceKernel(), addInterfaceMaterial(), addKernel(), MFEMProblem::addKernel(), addLinearFVBC(), addLinearFVKernel(), FEProblem::addLineSearch(), addMarker(), MFEMProblem::addMarker(), addMaterial(), addMaterialHelper(), addMeshDivision(), MFEMProblem::addMFEMFESpaceFromMOOSEVariable(), MFEMProblem::addMFEMProblemComposer(), MFEMProblem::addMFEMSolver(), addMultiApp(), addNodalKernel(), addObject(), addObjectParamsHelper(), addOutput(), addPostprocessor(), MFEMProblem::addPostprocessor(), addPredictor(), MFEMProblem::addRealComponentToBC(), MFEMProblem::addRealComponentToKernel(), addReporter(), addSampler(), addScalarKernel(), MFEMProblem::addSubMesh(), addTimeIntegrator(), addTransfer(), MFEMProblem::addTransfer(), addUserObject(), DisplacedProblem::addVariable(), MFEMEigenproblem::addVariable(), MFEMProblem::addVariable(), addVectorPostprocessor(), MFEMProblem::addVectorPostprocessor(), ADPiecewiseLinearInterpolationMaterial::ADPiecewiseLinearInterpolationMaterial(), AdvancedOutput::AdvancedOutput(), AnnularMesh::AnnularMesh(), AnnularMeshGenerator::AnnularMeshGenerator(), assemble_l2(), Moose::assemble_matrix(), Action::associateWithParameter(), AuxKernelBase::AuxKernelBase(), AuxScalarKernel::AuxScalarKernel(), BoundsBase::BoundsBase(), MooseMesh::buildTypedMesh(), MeshGenerator::checkGetMesh(), PostprocessorInterface::checkParam(), AddDefaultConvergenceAction::checkUnusedMultiAppFixedPointConvergenceParameters(), AddDefaultConvergenceAction::checkUnusedNonlinearConvergenceParameters(), AddDefaultConvergenceAction::checkUnusedSteadyStateConvergenceParameters(), SampledOutput::cloneMesh(), Moose::compute_bounds(), Moose::compute_jacobian(), Moose::compute_nearnullspace(), Moose::compute_nullspace(), Moose::compute_postcheck(), Moose::compute_transpose_nullspace(), LibtorchNeuralNetControl::conditionalParameterError(), Console::Console(), MooseMeshUtils::copyIntoMesh(), CommonOutputAction::create(), MultiApp::createApp(), Postprocessor::declareValue(), DumpObjectsProblem::deduceNecessaryParameters(), DefaultMultiAppFixedPointConvergence::DefaultMultiAppFixedPointConvergence(), DumpObjectsProblem::dumpObjectHelper(), DumpObjectsProblem::DumpObjectsProblem(), EigenProblem::EigenProblem(), EigenProblemSolve::EigenProblemSolve(), ElementMaterialSampler::ElementMaterialSampler(), ExamplePatchMeshGenerator::ExamplePatchMeshGenerator(), Executor::Executor(), Exodus::Exodus(), ElementSubdomainModifierBase::extrapolatePolynomial(), FEProblem::FEProblem(), FixedPointSolve::FixedPointSolve(), FunctorSmootherTempl< T >::FunctorSmootherTempl(), GapValueAux::GapValueAux(), ParsedSubdomainGeneratorBase::generate(), ActionWarehouse::getCurrentActionName(), ExecutorInterface::getExecutor(), Material::getMaterial(), Moose::PeriodicBCHelper::getParams(), ReporterInterface::getReporterName(), Reporter::getReporterValueName(), UserObjectInterface::getUserObjectName(), AuxKernelBase::getVariableHelper(), VectorPostprocessorInterface::getVectorPostprocessorName(), GhostingUserObject::GhostingUserObject(), MeshGeneratorSystem::hasDataDrivenAllowed(), AttribSystem::initFrom(), AttribDisplaced::initFrom(), BlockRestrictable::initializeBlockRestrictable(), FullSolveMultiApp::initialSetup(), initNullSpaceVectors(), InterfaceDiffusiveFluxIntegralTempl< is_ad >::InterfaceDiffusiveFluxIntegralTempl(), InterfaceIntegralVariableValuePostprocessor::InterfaceIntegralVariableValuePostprocessor(), InterfaceKernelTempl< T >::InterfaceKernelTempl(), MooseObject::isKokkosObject(), isValid(), IterationAdaptiveDT::IterationAdaptiveDT(), LibtorchNeuralNetControl::LibtorchNeuralNetControl(), MooseObject::MooseObject(), UserObjectInterface::mooseObjectError(), MooseVariableInterface< T >::MooseVariableInterface(), MultiApp::MultiApp(), MultiAppGeneralFieldTransfer::MultiAppGeneralFieldTransfer(), MultiAppGeneralFieldUserObjectTransfer::MultiAppGeneralFieldUserObjectTransfer(), MultiAppTransfer::MultiAppTransfer(), MultiAppVariableValueSamplePostprocessorTransfer::MultiAppVariableValueSamplePostprocessorTransfer(), NodeFaceConstraint::NodeFaceConstraint(), ConsoleUtils::outputLegacyInformation(), OverlayMeshGenerator::OverlayMeshGenerator(), ParsedReporterBase::ParsedReporterBase(), ParsedScalarReporter::ParsedScalarReporter(), PenetrationAux::PenetrationAux(), PiecewiseBilinear::PiecewiseBilinear(), PiecewiseLinearInterpolationMaterial::PiecewiseLinearInterpolationMaterial(), NEML2Action::printSummary(), ProjectedStatefulMaterialStorageAction::processProperty(), PropertyReadFile::PropertyReadFile(), PseudoTimestep::PseudoTimestep(), RandomIC::RandomIC(), ReferenceResidualConvergence::ReferenceResidualConvergence(), InputParameterWarehouse::removeInputParameters(), setAuxKernelParamsAndLog(), setInputParametersFEProblem(), FEProblem::setInputParametersFEProblem(), setResidualObjectParamsAndLog(), SideSetsGeneratorBase::setup(), NonlinearSystemBase::shouldEvaluatePreSMOResidual(), SideSetsFromBoundingBoxGenerator::SideSetsFromBoundingBoxGenerator(), Moose::PetscSupport::storePetscOptions(), DumpObjectsProblem::stringifyParameters(), TaggingInterface::TaggingInterface(), Transfer::Transfer(), TransientBase::TransientBase(), VectorBodyForce::VectorBodyForce(), VectorFunctionDirichletBC::VectorFunctionDirichletBC(), VectorFunctionIC::VectorFunctionIC(), and VectorMagnitudeFunctorMaterialTempl< is_ad >::VectorMagnitudeFunctorMaterialTempl().

◆ paramInfo()

template<typename... Args>
void MooseBase::paramInfo ( const std::string &  param,
Args...  args 
) const
inherited

Emits an informational message prefixed with the file and line number of the given param (from the input file) along with the full parameter path+name followed by the given args as the message.

If this object's parameters were not created directly by the Parser, then this function falls back to the normal behavior of mooseInfo - only printing a message using the given args.

Definition at line 471 of file MooseBase.h.

472{
473 mooseInfo(_pars.paramMessage(param, std::forward<Args>(args)...));
474}
std::string paramMessage(const std::string &param, Args... args) const

Referenced by GridPartitioner::_do_partition(), ComboMarker::ComboMarker(), Control::Control(), execMultiApps(), FunctorIC::FunctorIC(), and TransientMultiApp::TransientMultiApp().

◆ paramWarning() [1/2]

template<typename... Args>
void MooseBase::paramWarning ( const std::string &  param,
Args...  args 
) const
inherited

Emits a warning prefixed with the file and line number of the given param (from the input file) along with the full parameter path+name followed by the given args as the message.

If this object's parameters were not created directly by the Parser, then this function falls back to the normal behavior of mooseWarning - only printing a message using the given args.

Definition at line 464 of file MooseBase.h.

465{
466 mooseWarning(_pars.paramMessage(param, std::forward<Args>(args)...));
467}

◆ paramWarning() [2/2]

template<typename... Args>
void SolutionInvalidInterface::paramWarning ( const std::string &  param,
Args...  args 
) const
inlineinherited

◆ parentOutputPositionChanged()

void FEProblemBase::parentOutputPositionChanged ( )

Calls parentOutputPositionChanged() on all sub apps.

Definition at line 5068 of file FEProblemBase.C.

5069{
5070 for (const auto & it : _multi_apps)
5071 {
5072 const auto & objects = it.second.getActiveObjects();
5073 for (const auto & obj : objects)
5075 }
5076}
void parentOutputPositionChanged()
Calls parentOutputPositionChanged() on all sub apps.

Referenced by TransientBase::parentOutputPositionChanged().

◆ partitionConcurrentMultiApps()

void FEProblemBase::partitionConcurrentMultiApps ( )

Assign each multiapp that shares an 'execution_order_group' with others a disjoint subset of the ranks so that they can be solved concurrently (at most one child app per rank at a time).

Note that each MultiApp may have multiple child applications, and each child app may use more than one rank.

  • Only does anything when 'num_concurrent_multiapps' > 1.
  • Must be called before the sub-apps are created.

Definition at line 6129 of file FEProblemBase.C.

6130{
6132 return;
6133
6134 // Group the multiapps by execution order group. Only position-based multiapps are partitioned
6135 // here; sampler-style (non-positions) multiapps assign their own rank configuration.
6136 std::map<unsigned int, std::vector<std::shared_ptr<MultiApp>>> groups;
6137 for (const auto & multi_app : _multi_apps.getActiveObjects())
6138 if (multi_app->usingPositions())
6139 groups[multi_app->getParam<unsigned int>("execution_order_group")].push_back(multi_app);
6140
6141 // For the MultiApps that are using samplers, their partitioning is already handled there
6142 // so we just skipped them. But if they were to share an execution_order_group, we would crash
6143 // if using concurrent multiapps. So let's error.
6144 // For any other MultiApps that are not using positions, we would just need them to know
6145 // numGlobalApps() to benefit from this concurrent partitioning. We can allow them here in the
6146 // future.
6147 std::map<unsigned int, std::vector<std::shared_ptr<MultiApp>>> check_groups;
6148 for (const auto & multi_app : _multi_apps.getActiveObjects())
6149 check_groups[multi_app->getParam<unsigned int>("execution_order_group")].push_back(multi_app);
6150 for (const auto & [group_id, group] : check_groups)
6151 for (const auto & multi_app : group)
6152 if (group.size() > 1 && !multi_app->usingPositions())
6153 multi_app->paramError(
6154 "execution_order_group",
6155 "This MultiApp must be placed in its own execution order group as concurrent execution "
6156 "has not been implemented for this type of app at this time");
6157
6158 const auto n_procs = n_processors();
6159 const auto my_rank = processor_id();
6160
6161 for (const auto & [group_id, group] : groups)
6162 {
6163 // Nothing to run concurrently unless the group has more than one multiapp
6164 if (group.size() < 2)
6165 continue;
6166
6167 // Number of ranks handed to each multiapp. Start each at its per-app minimum (at least one
6168 // rank), then distribute the rest; caps prevent giving a multiapp more ranks than it could
6169 // spread its apps over at 'max_procs_per_app'. With the defaults (min 1, max unbounded) this
6170 // is just an even split.
6171 std::vector<processor_id_type> count(group.size());
6172 std::vector<processor_id_type> caps(group.size());
6173 std::vector<processor_id_type> mins(group.size());
6174 std::vector<processor_id_type> maxs(group.size());
6175 processor_id_type min_total = 0;
6176 for (const auto m : index_range(group))
6177 {
6178 // Each multiapp needs at least one rank, so a 'min_procs_per_app' of 0 is treated as 1
6179 mins[m] = group[m]->getParam<processor_id_type>("min_procs_per_app");
6180 maxs[m] = group[m]->getParam<processor_id_type>("max_procs_per_app");
6181 const auto n_apps_m = cast_int<processor_id_type>(group[m]->numGlobalApps());
6182 caps[m] = (maxs[m] >= n_procs) ? n_procs : std::min(n_procs, n_apps_m * maxs[m]);
6183 count[m] = mins[m];
6184 min_total += mins[m];
6185 }
6186
6187 if (min_total > n_procs)
6188 mooseError("Not enough MPI ranks to run the ",
6189 group.size(),
6190 " multiapps of 'execution_order_group' ",
6191 group_id,
6192 " concurrently: they need at least ",
6193 min_total,
6194 " ranks (from 'min_procs_per_app') but only ",
6195 n_procs,
6196 " are available. Reduce the number of concurrent multiapps, lower "
6197 "'min_procs_per_app', or run with more processors.");
6198
6199 // Hand out the remaining ranks round-robin to multiapps still below their cap
6200 processor_id_type remaining = n_procs - min_total;
6201 bool progress = true;
6202 while (remaining > 0 && progress)
6203 {
6204 progress = false;
6205 for (const auto m : index_range(group))
6206 if (remaining > 0 && count[m] < caps[m])
6207 {
6208 count[m]++;
6209 remaining--;
6210 progress = true;
6211 }
6212 }
6213 // Any leftover ranks (all multiapps already at their cap) simply run no app in this group.
6214
6215 // Assign each multiapp a contiguous, disjoint rank range and (re)initialize it on that range.
6216 // This is collective: every rank calls init() (hence buildComm's split) for every multiapp.
6217 processor_id_type offset = 0;
6218 for (const auto m : index_range(group))
6219 {
6220 LocalRankConfig cfg{0, 0, 0, 0, false, 0};
6221 if (my_rank >= offset && my_rank < offset + count[m])
6222 cfg = rankConfig(
6223 my_rank - offset, count[m], group[m]->numGlobalApps(), mins[m], maxs[m], false);
6224 group[m]->init(group[m]->numGlobalApps(), cfg);
6225 offset += count[m];
6226 }
6227 }
6228}
LocalRankConfig rankConfig(processor_id_type rank, processor_id_type nprocs, dof_id_type napps, processor_id_type min_app_procs, processor_id_type max_app_procs, bool batch_mode=false)
Returns app partitioning information relevant to the given rank for a multiapp scenario with the give...
Definition MultiApp.C:1385
processor_id_type n_processors() const
uint8_t processor_id_type
Holds app partitioning information relevant to the a particular rank for a multiapp scenario.
Definition MultiApp.h:47

◆ perfGraph()

PerfGraph & PerfGraphInterface::perfGraph ( )
inherited

Get the PerfGraph.

Definition at line 86 of file PerfGraphInterface.C.

87{
88 return _pg_moose_app.perfGraph();
89}
PerfGraph & perfGraph()
Get the PerfGraph for this app.
Definition MooseApp.h:179
MooseApp & _pg_moose_app
The MooseApp that owns the PerfGraph.

Referenced by CommonOutputAction::act(), PerfGraphData::finalize(), PerfGraphReporter::finalize(), and PerfGraphOutput::output().

◆ petscOptionsDatabase()

PetscOptions & FEProblemBase::petscOptionsDatabase ( )
inline

◆ petscOptionsInserted()

bool & FEProblemBase::petscOptionsInserted ( )
inline

If PETSc options are already inserted.

Definition at line 2669 of file FEProblemBase.h.

Referenced by EigenProblemSolve::initialSetup().

◆ possiblyRebuildGeomSearchPatches()

void FEProblemBase::possiblyRebuildGeomSearchPatches ( )
virtual

Definition at line 8795 of file FEProblemBase.C.

8796{
8797 if (_displaced_problem) // Only need to do this if things are moving...
8798 {
8799 TIME_SECTION("possiblyRebuildGeomSearchPatches", 5, "Rebuilding Geometric Search Patches");
8800
8801 switch (_mesh.getPatchUpdateStrategy())
8802 {
8803 case Moose::Never:
8804 break;
8805 case Moose::Iteration:
8806 // Update the list of ghosted elements at the start of the time step
8809
8810 _displaced_problem->geomSearchData().updateGhostedElems();
8812
8813 // The commands below ensure that the sparsity of the Jacobian matrix is
8814 // augmented at the start of the time step using neighbor nodes from the end
8815 // of the previous time step.
8816
8818
8819 // This is needed to reinitialize PETSc output
8821
8822 break;
8823
8824 case Moose::Auto:
8825 {
8826 Real max = _displaced_problem->geomSearchData().maxPatchPercentage();
8827 _communicator.max(max);
8828
8829 // If we haven't moved very far through the patch
8830 if (max < 0.4)
8831 break;
8832 }
8833 libmesh_fallthrough();
8834
8835 // Let this fall through if things do need to be updated...
8836 case Moose::Always:
8837 // Flush output here to see the message before the reinitialization, which could take a
8838 // while
8839 _console << "\n\nUpdating geometric search patches\n" << std::endl;
8840
8843
8844 _displaced_problem->geomSearchData().clearNearestNodeLocators();
8846
8848
8849 // This is needed to reinitialize PETSc output
8851 }
8852 }
8853}
virtual void initPetscOutputAndSomeSolverSettings()
Reinitialize PETSc output for proper linear/nonlinear iteration display.
void clearNearestNodeLocators()
Clear out the Penetration Locators so they will redo the search.
void updateGhostedElems()
Updates the list of ghosted elements at the start of each time step for the nonlinear iteration patch...
const Moose::PatchUpdateType & getPatchUpdateStrategy() const
Get the current patch update strategy.
Definition MooseMesh.C:3477
@ Iteration

Referenced by solve().

◆ postExecute()

void FEProblemBase::postExecute ( )
virtual

Method called at the end of the simulation.

Definition at line 6355 of file FEProblemBase.C.

6356{
6357 const auto & multi_apps = _multi_apps.getActiveObjects();
6358
6359 for (const auto & multi_app : multi_apps)
6360 multi_app->postExecute();
6361}
virtual void postExecute()
Method called at the end of the simulation.

Referenced by Eigenvalue::execute(), SteadyBase::execute(), TransientBase::execute(), and MFEMSteady::execute().

◆ predictorCleanup()

void FEProblemBase::predictorCleanup ( NumericVector< libMesh::Number > &  ghosted_solution)
virtual

Perform cleanup tasks after application of predictor to solution vector.

Parameters
ghosted_solutionGhosted solution vector

Definition at line 8687 of file FEProblemBase.C.

8688{
8689}

Referenced by NonlinearSystemBase::setInitialSolution().

◆ prepare() [1/2]

void FEProblemBase::prepare ( const Elem *  elem,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 1894 of file FEProblemBase.C.

1895{
1896 for (const auto i : index_range(_solver_systems))
1897 {
1898 _assembly[tid][i]->reinit(elem);
1899 _solver_systems[i]->prepare(tid);
1900
1901 if (i < _num_nl_sys)
1902 {
1903 // This method is called outside of residual/Jacobian callbacks during initial condition
1904 // evaluation
1906 _assembly[tid][i]->prepareJacobianBlock();
1907 _assembly[tid][i]->prepareResidual();
1909 _assembly[tid][i]->prepareNonlocal();
1910 }
1911 }
1912 _aux->prepare(tid);
1913
1914 if (_displaced_problem &&
1915 // _reinit_displaced_neighbor applies to interface type objects which will do computations
1916 // based on both elem and neighbor. Consequently, despite what you might think by its name, we
1917 // must make sure we prepare the displaced elem
1919 {
1920 _displaced_problem->prepare(_displaced_mesh->elemPtr(elem->id()), tid);
1922 _displaced_problem->prepareNonlocal(tid);
1923 }
1924}
const bool & currentlyComputingJacobian() const
Returns true if the problem is in the process of computing the Jacobian.
Definition SubProblem.h:692

Referenced by NodalPatchRecovery::compute(), ComputeElemDampingThread::onElement(), ComputeIndicatorThread::onElement(), ComputeMarkerThread::onElement(), ComputeMaterialsObjectThread::onElement(), ComputeUserObjectsThread::onElement(), and ComputeInitialConditionThread::operator()().

◆ prepare() [2/2]

void FEProblemBase::prepare ( const Elem *  elem,
unsigned int  ivar,
unsigned int  jvar,
const std::vector< dof_id_type > &  dof_indices,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 1938 of file FEProblemBase.C.

1943{
1944 for (const auto i : index_range(_nl))
1945 {
1946 _assembly[tid][i]->reinit(elem);
1947 _nl[i]->prepare(tid);
1948 }
1949
1950 _aux->prepare(tid);
1951 const auto current_nl_sys_num = _current_nl_sys->number();
1952 _assembly[tid][current_nl_sys_num]->prepareBlock(ivar, jvar, dof_indices);
1954 if (_nonlocal_cm[current_nl_sys_num](ivar, jvar) != 0)
1955 {
1957 _assembly[tid][current_nl_sys_num]->prepareBlockNonlocal(
1958 ivar, jvar, dof_indices, jv.allDofIndices());
1959 }
1960
1962 {
1963 _displaced_problem->prepare(_displaced_mesh->elemPtr(elem->id()), ivar, jvar, dof_indices, tid);
1965 if (_nonlocal_cm[current_nl_sys_num](ivar, jvar) != 0)
1966 {
1968 _displaced_problem->prepareBlockNonlocal(ivar, jvar, dof_indices, jv.allDofIndices(), tid);
1969 }
1970 }
1971}
virtual void prepare()=0
Prepare the elemental degrees of freedom.

◆ prepareAssembly()

void FEProblemBase::prepareAssembly ( const THREAD_ID  tid)
overridevirtual

◆ prepareAssemblyNeighbor()

void FEProblemBase::prepareAssemblyNeighbor ( const THREAD_ID  tid)
virtual

Begin a fresh neighbor accumulation phase by sizing and zeroing the neighbor blocks.

Definition at line 2029 of file FEProblemBase.C.

2030{
2031 _assembly[tid][_current_nl_sys->number()]->prepareNeighbor();
2032
2034 _displaced_problem->prepareAssemblyNeighbor(tid);
2035}

Referenced by NonlinearSystemBase::constraintJacobians().

◆ prepareFace()

void FEProblemBase::prepareFace ( const Elem *  elem,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 1927 of file FEProblemBase.C.

1928{
1929 for (auto & nl : _nl)
1930 nl->prepareFace(tid, true);
1931 _aux->prepareFace(tid, false);
1932
1934 _displaced_problem->prepareFace(_displaced_mesh->elemPtr(elem->id()), tid);
1935}
virtual void prepareFace(const Elem *elem, const THREAD_ID tid) override

Referenced by ComputeUserObjectsThread::onInterface(), and ComputeUserObjectsThread::onInternalSide().

◆ prepareFaceShapes()

void FEProblemBase::prepareFaceShapes ( unsigned int  var,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 2297 of file FEProblemBase.C.

2298{
2299 _assembly[tid][_current_nl_sys->number()]->copyFaceShapes(var);
2300}

Referenced by ComputeUserObjectsThread::onBoundary().

◆ prepareKokkosMaterials()

void FEProblemBase::prepareKokkosMaterials ( const std::unordered_set< unsigned int > &  consumer_needed_mat_props)

◆ prepareMaterials()

void FEProblemBase::prepareMaterials ( const std::unordered_set< unsigned int > &  consumer_needed_mat_props,
const SubdomainID  blk_id,
const THREAD_ID  tid 
)

Add the MooseVariables and the material properties that the current materials depend on to the dependency list.

Parameters
consumer_needed_mat_propsThe material properties needed by consumer objects (other than the materials themselves)
blk_idThe subdomain ID for which we are preparing our list of needed vars and props
tidThe thread ID we are preparing the requirements for

This MUST be done after the moose variable dependency list has been set for all the other objects using the setActiveElementalMooseVariables API!

Definition at line 4319 of file FEProblemBase.C.

4322{
4323 std::set<MooseVariableFEBase *> needed_moose_vars;
4324 std::unordered_set<unsigned int> needed_mat_props;
4325
4326 if (_all_materials.hasActiveBlockObjects(blk_id, tid))
4327 {
4328 _all_materials.updateVariableDependency(needed_moose_vars, tid);
4329 _all_materials.updateBlockMatPropDependency(blk_id, needed_mat_props, tid);
4330 }
4331
4332 const auto & ids = _mesh.getSubdomainBoundaryIds(blk_id);
4333 for (const auto id : ids)
4334 {
4335 _materials.updateBoundaryVariableDependency(id, needed_moose_vars, tid);
4336 _materials.updateBoundaryMatPropDependency(id, needed_mat_props, tid);
4337 }
4338
4339 const auto & current_active_elemental_moose_variables = getActiveElementalMooseVariables(tid);
4340 needed_moose_vars.insert(current_active_elemental_moose_variables.begin(),
4341 current_active_elemental_moose_variables.end());
4342
4343 needed_mat_props.insert(consumer_needed_mat_props.begin(), consumer_needed_mat_props.end());
4344
4345 setActiveElementalMooseVariables(needed_moose_vars, tid);
4346 setActiveMaterialProperties(needed_mat_props, tid);
4347}
void setActiveMaterialProperties(const std::unordered_set< unsigned int > &mat_prop_ids, const THREAD_ID tid)
Record and set the material properties required by the current computing thread.
virtual void setActiveElementalMooseVariables(const std::set< MooseVariableFEBase * > &moose_vars, const THREAD_ID tid) override
Set the MOOSE variables to be reinited on each element.
const std::set< BoundaryID > & getSubdomainBoundaryIds(const SubdomainID subdomain_id) const
Get the list of boundary ids associated with the given subdomain id.
Definition MooseMesh.C:3561
void updateVariableDependency(std::set< MooseVariableFieldBase * > &needed_moose_vars, THREAD_ID tid=0) const
Update variable dependency vector.
void updateBlockMatPropDependency(SubdomainID id, std::unordered_set< unsigned int > &needed_mat_props, THREAD_ID tid=0, const bool producer_only=false) const
void updateBoundaryVariableDependency(std::set< MooseVariableFieldBase * > &needed_moose_vars, THREAD_ID tid=0) const
bool hasActiveBlockObjects(THREAD_ID tid=0) const
void updateBoundaryMatPropDependency(std::unordered_set< unsigned int > &needed_mat_props, THREAD_ID tid=0, const bool producer_only=false) const
virtual const std::set< MooseVariableFieldBase * > & getActiveElementalMooseVariables(const THREAD_ID tid) const
Get the MOOSE variables to be reinited on each element.
Definition SubProblem.C:453

Referenced by ComputeIndicatorThread::subdomainChanged(), ComputeMarkerThread::subdomainChanged(), and ComputeUserObjectsThread::subdomainChanged().

◆ prepareNeighborShapes()

void FEProblemBase::prepareNeighborShapes ( unsigned int  var,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 2303 of file FEProblemBase.C.

2304{
2305 _assembly[tid][_current_nl_sys->number()]->copyNeighborShapes(var);
2306}

◆ preparePRefinement()

void SubProblem::preparePRefinement ( )
inherited

Prepare DofMap and Assembly classes with our p-refinement information.

Definition at line 1351 of file SubProblem.C.

1352{
1353 std::unordered_set<FEFamily> disable_families;
1354 for (const auto & [family, flag] : _family_for_p_refinement)
1355 if (flag)
1356 disable_families.insert(family);
1357
1358 for (const auto tid : make_range(libMesh::n_threads()))
1359 for (const auto s : make_range(numNonlinearSystems()))
1360 assembly(tid, s).havePRefinement(disable_families);
1361
1362 auto & eq = es();
1363 for (const auto family : disable_families)
1364 for (const auto i : make_range(eq.n_systems()))
1365 {
1366 auto & system = eq.get_system(i);
1367 auto & dof_map = system.get_dof_map();
1368 for (const auto vg : make_range(system.n_variable_groups()))
1369 {
1370 const auto & var_group = system.variable_group(vg);
1371 if (var_group.type().family == family)
1372 dof_map.should_p_refine(vg, false);
1373 }
1374 }
1375
1376 _have_p_refinement = true;
1377}

Referenced by init().

◆ prepareShapes()

void FEProblemBase::prepareShapes ( unsigned int  var,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 2291 of file FEProblemBase.C.

2292{
2293 _assembly[tid][_current_nl_sys->number()]->copyShapes(var);
2294}

Referenced by ComputeUserObjectsThread::onElement().

◆ preserveMatrixSparsityPattern()

bool FEProblemBase::preserveMatrixSparsityPattern ( ) const
inline

Will return True if the executioner in use requires preserving the sparsity pattern of the matrices being formed during the solve.

This is usually the Jacobian.

Definition at line 2428 of file FEProblemBase.h.

◆ projectFunctionOnCustomRange()

void FEProblemBase::projectFunctionOnCustomRange ( ConstElemRange &  elem_range,
Number(*)(const Point &, const libMesh::Parameters &, const std::string &, const std::string &)  func,
Gradient(*)(const Point &, const libMesh::Parameters &, const std::string &, const std::string &)  func_grad,
const libMesh::Parameters params,
const std::vector< VariableName > &  target_vars 
)

Project a function onto a range of elements for a given variable.

Parameters
elem_rangeElement range to project on
funcFunction to project
func_gradGradient of the function
paramsParameters to pass to the function
target_varsvariable names to project

Definition at line 4029 of file FEProblemBase.C.

4040{
4041 mooseAssert(!Threads::in_threads,
4042 "We're performing a projection based on data from just the thread 0 variable, so any "
4043 "modifications to the variable solution must have been thread joined already");
4044
4045 std::unordered_map<unsigned int, std::vector<unsigned int>> sys_to_var_nums;
4046
4047 for (const auto & target_var : target_vars)
4048 {
4049 const auto sn = systemNumForVariable(target_var);
4050 const auto & var = getStandardVariable(0, target_var);
4051 sys_to_var_nums[sn].push_back(var.number());
4052 }
4053
4054 for (const auto & [sys_num, var_nums] : sys_to_var_nums)
4055 {
4056 System & libmesh_sys = getSystemBase(sys_num).system();
4057 libmesh_sys.project_solution(func, func_grad, params, elem_range, var_nums);
4058 }
4059}
virtual MooseVariable & getStandardVariable(const THREAD_ID tid, const std::string &var_name) override
Returns the variable reference for requested MooseVariable which may be in any system.
unsigned int systemNumForVariable(const VariableName &variable_name) const
void project_solution(FunctionBase< Number > *f, FunctionBase< Gradient > *g=nullptr, std::optional< ConstElemRange > active_local_range=std::nullopt, std::optional< std::vector< unsigned int > > variable_numbers=std::nullopt) const

Referenced by ElementSubdomainModifierBase::extrapolatePolynomial().

◆ projectInitialConditionOnCustomRange()

void FEProblemBase::projectInitialConditionOnCustomRange ( libMesh::ConstElemRange elem_range,
ConstBndNodeRange bnd_node_range,
const std::optional< std::set< VariableName > > &  target_vars = std::nullopt 
)

Project initial conditions for custom elem_range and bnd_node_range This is needed when elements/boundary nodes are added to a specific subdomain at an intermediate step.

Parameters
elem_rangeElement range to project on
bnd_node_rangeBoundary node range to project on
target_varsSet of variable names to project ICs

Definition at line 3954 of file FEProblemBase.C.

3958{
3959 if (target_vars)
3960 {
3961 ComputeInitialConditionThread cic(*this, &(*target_vars));
3962 Threads::parallel_reduce(elem_range, cic);
3963 }
3964 else
3965 {
3967 Threads::parallel_reduce(elem_range, cic);
3968 }
3969
3970 // Need to close the solution vector here so that boundary ICs take precendence
3971 for (auto & nl : _nl)
3972 nl->solution().close();
3973 _aux->solution().close();
3974
3975 if (target_vars)
3976 {
3977 ComputeBoundaryInitialConditionThread cbic(*this, &(*target_vars));
3978 Threads::parallel_reduce(bnd_nodes, cbic);
3979 }
3980 else
3981 {
3983 Threads::parallel_reduce(bnd_nodes, cbic);
3984 }
3985
3986 for (auto & nl : _nl)
3987 nl->solution().close();
3988 _aux->solution().close();
3989
3990 // Also, load values into the SCALAR dofs
3991 // Note: We assume that all SCALAR dofs are on the
3992 // processor with highest ID
3994 {
3995 const auto & ics = _scalar_ics.getActiveObjects();
3996 for (const auto & ic : ics)
3997 {
3998 MooseVariableScalar & var = ic->variable();
3999
4000 if (target_vars && !target_vars->count(var.name()))
4001 continue;
4002
4003 var.reinit();
4004
4005 DenseVector<Number> vals(var.order());
4006 ic->compute(vals);
4007
4008 const unsigned int n_scalar_dofs = var.dofIndices().size();
4009 for (unsigned int i = 0; i < n_scalar_dofs; i++)
4010 {
4011 const auto global_index = var.dofIndices()[i];
4012 var.sys().solution().set(global_index, vals(i));
4013 var.setValue(i, vals(i));
4014 }
4015 }
4016 }
4017
4018 for (auto & nl : _nl)
4019 {
4020 nl->solution().close();
4021 nl->solution().localize(*nl->system().current_local_solution, nl->dofMap().get_send_list());
4022 }
4023
4024 _aux->solution().close();
4025 _aux->solution().localize(*_aux->sys().current_local_solution, _aux->dofMap().get_send_list());
4026}
virtual const std::vector< dof_id_type > & dofIndices() const
Get local DoF indices.
void setValue(unsigned int i, Number value)
Set the nodal value for this variable (to keep everything up to date.
void reinit(bool reinit_for_derivative_reordering=false)
Fill out the VariableValue arrays from the system solution vector.
NumericVector< Number > & solution()
Definition SystemBase.h:212
virtual void set(const numeric_index_type i, const T value)=0

Referenced by ElementSubdomainModifierBase::applyIC(), and ActivateElementsUserObjectBase::initSolutions().

◆ projectSolution()

void FEProblemBase::projectSolution ( )

Definition at line 3888 of file FEProblemBase.C.

3889{
3890 TIME_SECTION("projectSolution", 2, "Projecting Initial Solutions")
3891
3893
3895 Threads::parallel_reduce(getCurrentAlgebraicElementRange(), cic);
3896
3897 if (haveFV())
3898 {
3899 using ElemInfoRange = StoredRange<MooseMesh::const_elem_info_iterator, const ElemInfo *>;
3900 ElemInfoRange elem_info_range(_mesh.ownedElemInfoBegin(), _mesh.ownedElemInfoEnd());
3901
3903 Threads::parallel_reduce(elem_info_range, cfvic);
3904 }
3905
3906 // Need to close the solution vector here so that boundary ICs take precendence
3907 for (auto & nl : _nl)
3908 nl->solution().close();
3909 _aux->solution().close();
3910
3911 // now run boundary-restricted initial conditions
3914
3915 for (auto & nl : _nl)
3916 nl->solution().close();
3917 _aux->solution().close();
3918
3919 // Also, load values into the SCALAR dofs
3920 // Note: We assume that all SCALAR dofs are on the
3921 // processor with highest ID
3923 {
3924 const auto & ics = _scalar_ics.getActiveObjects();
3925 for (const auto & ic : ics)
3926 {
3927 MooseVariableScalar & var = ic->variable();
3928 var.reinit();
3929
3930 DenseVector<Number> vals(var.order());
3931 ic->compute(vals);
3932
3933 const unsigned int n_scalar_dofs = var.dofIndices().size();
3934 for (unsigned int i = 0; i < n_scalar_dofs; i++)
3935 {
3936 const auto global_index = var.dofIndices()[i];
3937 var.sys().solution().set(global_index, vals(i));
3938 var.setValue(i, vals(i));
3939 }
3940 }
3941 }
3942
3943 for (auto & sys : _solver_systems)
3944 {
3945 sys->solution().close();
3946 sys->solution().localize(*sys->system().current_local_solution, sys->dofMap().get_send_list());
3947 }
3948
3949 _aux->solution().close();
3950 _aux->solution().localize(*_aux->sys().current_local_solution, _aux->dofMap().get_send_list());
3951}
Scope guard for starting and stopping Floating Point Exception Trapping.
elem_info_iterator ownedElemInfoEnd()
Definition MooseMesh.C:1484
elem_info_iterator ownedElemInfoBegin()
Iterators to owned faceInfo objects.
Definition MooseMesh.C:1476

Referenced by initialAdaptMesh().

◆ queryParam()

template<typename T >
const T * MooseBase::queryParam ( const std::string &  name) const
inherited

Query a parameter for the object.

If a parameter of the given name and type does not exist or if the parameter is not valid, nullptr will be returned

Parameters
nameThe name of the parameter
Returns
A pointer to the parameter value, if it exists

Definition at line 413 of file MooseBase.h.

414{
415 return _pars.queryParam<T>(name);
416}
const T * queryParam(const std::string &name) const
Query a parameter.

Referenced by MFEMExecutedObject::getRequestedItems(), and MFEMGeometricMultigridSolver::MFEMGeometricMultigridSolver().

◆ registerInvalidSolutionInternal()

InvalidSolutionID SolutionInvalidInterface::registerInvalidSolutionInternal ( const std::string &  message,
const bool  warning 
) const
protectedinherited

Definition at line 55 of file SolutionInvalidInterface.C.

57{
59 _si_moose_base.type(), message, warning);
60}
InvalidSolutionID registerInvalidity(const std::string &object_type, const std::string &message, const bool warning)
Call to register an invalid calculation.

◆ registerRandomInterface()

void FEProblemBase::registerRandomInterface ( RandomInterface random_interface,
const std::string &  name 
)

Definition at line 9635 of file FEProblemBase.C.

9636{
9637 auto insert_pair = moose_try_emplace(
9638 _random_data_objects, name, std::make_unique<RandomData>(*this, random_interface));
9639
9640 auto random_data_ptr = insert_pair.first->second.get();
9641 random_interface.setRandomDataPointer(random_data_ptr);
9642}
std::pair< typename M::iterator, bool > moose_try_emplace(M &m, const typename M::key_type &k, Args &&... args)
Function to mirror the behavior of the C++17 std::map::try_emplace() method (no hint).
Definition Moose.h:103
void setRandomDataPointer(RandomData *random_data)

Referenced by RandomInterface::setRandomResetFrequency().

◆ registerRestartableDataOnApp()

RestartableDataValue & Restartable::registerRestartableDataOnApp ( std::unique_ptr< RestartableDataValue data,
THREAD_ID  tid 
) const
privateinherited

Helper function for actually registering the restartable data.

Definition at line 63 of file Restartable.C.

65{
67 std::move(data), tid, _restartable_read_only, _metaname);
68}
RestartableDataValue & registerRestartableData(std::unique_ptr< RestartableDataValue > data, THREAD_ID tid, bool read_only, const RestartableDataMapName &metaname="")
Definition MooseApp.C:2454
const RestartableDataMapName _metaname
Restartable metadata name.
const bool _restartable_read_only
Flag for toggling read only status (see ReporterData)
MooseApp & _restartable_app
Reference to the application.

Referenced by Restartable::declareRestartableDataHelper().

◆ registerRestartableNameWithFilterOnApp()

void Restartable::registerRestartableNameWithFilterOnApp ( const std::string &  name,
Moose::RESTARTABLE_FILTER  filter 
)
privateinherited

Helper function for actually registering the restartable data.

Definition at line 71 of file Restartable.C.

73{
75}
void registerRestartableNameWithFilter(const std::string &name, Moose::RESTARTABLE_FILTER filter)
NOTE: This is an internal function meant for MOOSE use only!
Definition MooseApp.C:1706

Referenced by Restartable::declareRecoverableData().

◆ registerTimedSection() [1/2]

PerfID PerfGraphInterface::registerTimedSection ( const std::string &  section_name,
const unsigned int  level 
) const
protectedinherited

Call to register a named section for timing.

Parameters
section_nameThe name of the code section to be timed
levelThe importance of the timer - lower is more important (0 will always come out)
Returns
The ID of the section - use when starting timing

Definition at line 61 of file PerfGraphInterface.C.

63{
64 const auto timed_section_name = timedSectionName(section_name);
65 if (!moose::internal::getPerfGraphRegistry().sectionExists(timed_section_name))
66 return moose::internal::getPerfGraphRegistry().registerSection(timed_section_name, level);
67 else
68 return moose::internal::getPerfGraphRegistry().sectionID(timed_section_name);
69}
std::string timedSectionName(const std::string &section_name) const
PerfID sectionID(const std::string &section_name) const
Given a name return the PerfID @section_name The name of the section.
PerfID registerSection(const std::string &section_name, const unsigned int level)
Call to register a named section for timing.
PerfGraphRegistry & getPerfGraphRegistry()
Get the global PerfGraphRegistry singleton.

◆ registerTimedSection() [2/2]

PerfID PerfGraphInterface::registerTimedSection ( const std::string &  section_name,
const unsigned int  level,
const std::string &  live_message,
const bool  print_dots = true 
) const
protectedinherited

Call to register a named section for timing.

Parameters
section_nameThe name of the code section to be timed
levelThe importance of the timer - lower is more important (0 will always come out)
live_messageThe message to be printed to the screen during execution
print_dotsWhether or not progress dots should be printed for this section
Returns
The ID of the section - use when starting timing

Definition at line 72 of file PerfGraphInterface.C.

76{
77 const auto timed_section_name = timedSectionName(section_name);
78 if (!moose::internal::getPerfGraphRegistry().sectionExists(timed_section_name))
80 timedSectionName(section_name), level, live_message, print_dots);
81 else
82 return moose::internal::getPerfGraphRegistry().sectionID(timed_section_name);
83}

◆ registerUnfilledFunctorRequest()

template<typename T >
void SubProblem::registerUnfilledFunctorRequest ( T *  functor_interface,
const std::string &  functor_name,
const THREAD_ID  tid 
)
inherited

Register an unfulfilled functor request.

◆ reinitBecauseOfGhostingOrNewGeomObjects()

void FEProblemBase::reinitBecauseOfGhostingOrNewGeomObjects ( bool  mortar_changed = false)
protected

Call when it is possible that the needs for ghosted elements has changed.

Parameters
mortar_changedWhether an update of mortar data has been requested since the last EquationSystems (re)initialization

Definition at line 5778 of file FEProblemBase.C.

5779{
5780 TIME_SECTION("reinitBecauseOfGhostingOrNewGeomObjects",
5781 3,
5782 "Reinitializing Because of Geometric Search Objects");
5783
5784 // Need to see if _any_ processor has ghosted elems or geometry objects.
5785 bool needs_reinit = !_ghosted_elems.empty();
5786 needs_reinit = needs_reinit || !_geometric_search_data._nearest_node_locators.empty() ||
5787 (_mortar_data->hasObjects() && mortar_changed);
5788 needs_reinit =
5789 needs_reinit || (_displaced_problem &&
5790 (!_displaced_problem->geomSearchData()._nearest_node_locators.empty() ||
5791 (_mortar_data->hasDisplacedObjects() && mortar_changed)));
5792 _communicator.max(needs_reinit);
5793
5794 if (needs_reinit)
5795 {
5796 // Call reinit to get the ghosted vectors correct now that some geometric search has been done
5797 es().reinit();
5798
5799 if (_displaced_mesh)
5800 _displaced_problem->es().reinit();
5801 }
5802}
std::map< std::pair< BoundaryID, BoundaryID >, NearestNodeLocator * > _nearest_node_locators

Referenced by meshChanged(), possiblyRebuildGeomSearchPatches(), and updateMortarMesh().

◆ reinitDirac()

bool FEProblemBase::reinitDirac ( const Elem *  elem,
const THREAD_ID  tid 
)
overridevirtual

Returns true if the Problem has Dirac kernels it needs to compute on elem.

The maximum number of qps can rise if several Dirac points are added to a single element. In that case we need to resize the zeros to compensate.

Implements SubProblem.

Definition at line 2342 of file FEProblemBase.C.

2343{
2344 std::vector<Point> & points = _dirac_kernel_info.getPoints()[elem].first;
2345
2346 unsigned int n_points = points.size();
2347
2348 if (n_points)
2349 {
2350 if (n_points > _max_qps)
2351 {
2352 _max_qps = n_points;
2353
2358 unsigned int max_qpts = getMaxQps();
2359 for (unsigned int tid = 0; tid < libMesh::n_threads(); ++tid)
2360 {
2361 // the highest available order in libMesh is 43
2362 _scalar_zero[tid].resize(libMesh::FORTYTHIRD, 0);
2363 _zero[tid].resize(max_qpts, 0);
2364 _grad_zero[tid].resize(max_qpts, RealGradient(0.));
2365 _second_zero[tid].resize(max_qpts, RealTensor(0.));
2366 _vector_zero[tid].resize(max_qpts, RealGradient(0.));
2367 _vector_curl_zero[tid].resize(max_qpts, RealGradient(0.));
2368 }
2369 }
2370
2371 for (const auto i : index_range(_nl))
2372 {
2373 _assembly[tid][i]->reinitAtPhysical(elem, points);
2374 _nl[i]->prepare(tid);
2375 }
2376 _aux->prepare(tid);
2377
2378 reinitElem(elem, tid);
2379 }
2380
2381 _assembly[tid][_current_nl_sys->number()]->prepare();
2383 _assembly[tid][_current_nl_sys->number()]->prepareNonlocal();
2384
2385 bool have_points = n_points > 0;
2387 {
2388 have_points |= _displaced_problem->reinitDirac(_displaced_mesh->elemPtr(elem->id()), tid);
2390 _displaced_problem->prepareNonlocal(tid);
2391 }
2392
2393 return have_points;
2394}
MultiPointMap & getPoints()
Returns a writeable reference to the _points container.
virtual void reinitElem(const Elem *elem, const THREAD_ID tid) override

Referenced by ComputeDiracThread::onElement().

◆ reinitElem()

void FEProblemBase::reinitElem ( const Elem *  elem,
const THREAD_ID  tid 
)
overridevirtual

◆ reinitElemFace() [1/2]

void FEProblemBase::reinitElemFace ( const Elem *  elem,
unsigned int  side,
BoundaryID  ,
const THREAD_ID  tid 
)

Definition at line 2429 of file FEProblemBase.C.

2433{
2435 "reinitElemFace with a BoundaryID argument is deprecated because the boundary id was never "
2436 "used. Please call reinitElemFace without the BoundaryID argument instead");
2437
2438 reinitElemFace(elem, side, tid);
2439}
void reinitElemFace(const Elem *elem, unsigned int side, BoundaryID, const THREAD_ID tid)

Referenced by ComputeMaterialsObjectThread::onBoundary(), ComputeUserObjectsThread::onBoundary(), ComputeMaterialsObjectThread::onInterface(), NonlinearThread::prepareFace(), and reinitElemFace().

◆ reinitElemFace() [2/2]

void FEProblemBase::reinitElemFace ( const Elem *  elem,
unsigned int  side,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 2442 of file FEProblemBase.C.

2443{
2444 for (const auto i : index_range(_solver_systems))
2445 {
2446 _assembly[tid][i]->reinit(elem, side);
2447 _solver_systems[i]->reinitElemFace(elem, side, tid);
2448 }
2449 _aux->reinitElemFace(elem, side, tid);
2450
2452 _displaced_problem->reinitElemFace(_displaced_mesh->elemPtr(elem->id()), side, tid);
2453}

◆ reinitElemFaceRef()

void FEProblemBase::reinitElemFaceRef ( const Elem *  elem,
unsigned int  side,
Real  tolerance,
const std::vector< Point > *const  pts,
const std::vector< Real > *const  weights = nullptr,
const THREAD_ID  tid = 0 
)
overridevirtual

reinitialize FE objects on a given element on a given side at a given set of reference points and then compute variable data.

Note that this method makes no assumptions about what's been called beforehand, e.g. you don't have to call some prepare method before this one. This is an all-in-one reinit

Reimplemented from SubProblem.

Definition at line 10025 of file FEProblemBase.C.

10031{
10032 SubProblem::reinitElemFaceRef(elem, side, tolerance, pts, weights, tid);
10033
10035 _displaced_problem->reinitElemFaceRef(
10036 _displaced_mesh->elemPtr(elem->id()), side, tolerance, pts, weights, tid);
10037}
virtual void reinitElemFaceRef(const Elem *elem, unsigned int side, Real tolerance, const std::vector< Point > *const pts, const std::vector< Real > *const weights=nullptr, const THREAD_ID tid=0)
reinitialize FE objects on a given element on a given side at a given set of reference points and the...
Definition SubProblem.C:881

Referenced by Moose::Mortar::loopOverMortarSegments().

◆ reinitElemNeighborAndLowerD()

void FEProblemBase::reinitElemNeighborAndLowerD ( const Elem *  elem,
unsigned int  side,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 2561 of file FEProblemBase.C.

2564{
2565 reinitNeighbor(elem, side, tid);
2566
2567 const Elem * lower_d_elem = _mesh.getLowerDElem(elem, side);
2568 if (lower_d_elem && _mesh.interiorLowerDBlocks().count(lower_d_elem->subdomain_id()) > 0)
2569 reinitLowerDElem(lower_d_elem, tid);
2570 else
2571 {
2572 // with mesh refinement, lower-dimensional element might be defined on neighbor side
2573 auto & neighbor = _assembly[tid][0]->neighbor();
2574 auto & neighbor_side = _assembly[tid][0]->neighborSide();
2575 const Elem * lower_d_elem_neighbor = _mesh.getLowerDElem(neighbor, neighbor_side);
2576 if (lower_d_elem_neighbor &&
2577 _mesh.interiorLowerDBlocks().count(lower_d_elem_neighbor->subdomain_id()) > 0)
2578 {
2579 auto qps = _assembly[tid][0]->qPointsFaceNeighbor().stdVector();
2580 std::vector<Point> reference_points;
2581 FEMap::inverse_map(
2582 lower_d_elem_neighbor->dim(), lower_d_elem_neighbor, qps, reference_points);
2583 reinitLowerDElem(lower_d_elem_neighbor, tid, &reference_points);
2584 }
2585 }
2586
2588 _displaced_problem->reinitElemNeighborAndLowerD(
2589 _displaced_mesh->elemPtr(elem->id()), side, tid);
2590}
virtual void reinitLowerDElem(const Elem *lower_d_elem, const THREAD_ID tid, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr) override
virtual void reinitNeighbor(const Elem *elem, unsigned int side, const THREAD_ID tid) override
const Elem * getLowerDElem(const Elem *, unsigned short int) const
Returns a const pointer to a lower dimensional element that corresponds to a side of a higher dimensi...
Definition MooseMesh.C:1648

Referenced by ComputeMaterialsObjectThread::onInternalSide(), and NonlinearThread::onInternalSide().

◆ reinitElemPhys()

void FEProblemBase::reinitElemPhys ( const Elem *  elem,
const std::vector< Point > &  phys_points_in_elem,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 2408 of file FEProblemBase.C.

2411{
2412 mooseAssert(_mesh.queryElemPtr(elem->id()) == elem,
2413 "Are you calling this method with a displaced mesh element?");
2414
2415 for (const auto i : index_range(_solver_systems))
2416 {
2417 _assembly[tid][i]->reinitAtPhysical(elem, phys_points_in_elem);
2418 _solver_systems[i]->prepare(tid);
2419 _assembly[tid][i]->prepare();
2421 _assembly[tid][i]->prepareNonlocal();
2422 }
2423 _aux->prepare(tid);
2424
2425 reinitElem(elem, tid);
2426}
virtual Elem * queryElemPtr(const dof_id_type i)
Definition MooseMesh.C:3189

Referenced by MultiAppVariableValueSamplePostprocessorTransfer::execute().

◆ reinitFVFace()

void SubProblem::reinitFVFace ( const THREAD_ID  tid,
const FaceInfo fi 
)
inherited

reinitialize the finite volume assembly data for the provided face and thread

Definition at line 1303 of file SubProblem.C.

1304{
1305 for (const auto nl : make_range(numNonlinearSystems()))
1306 assembly(tid, nl).reinitFVFace(fi);
1307}
void reinitFVFace(const THREAD_ID tid, const FaceInfo &fi)
reinitialize the finite volume assembly data for the provided face and thread

◆ reinitGeomSearch()

void SubProblem::reinitGeomSearch ( )
inherited

reinitialize this object's geometric search data, e.g.

do things like clear and re-add quadrature nodes

Definition at line 1421 of file SubProblem.C.

1422{
1424}
virtual GeometricSearchData & geomSearchData()=0

◆ reinitKokkosMaterials()

void FEProblemBase::reinitKokkosMaterials ( )

◆ reinitLowerDElem()

void FEProblemBase::reinitLowerDElem ( const Elem *  lower_d_elem,
const THREAD_ID  tid,
const std::vector< Point > *const  pts = nullptr,
const std::vector< Real > *const  weights = nullptr 
)
overridevirtual

Reimplemented from SubProblem.

Definition at line 2456 of file FEProblemBase.C.

2460{
2461 SubProblem::reinitLowerDElem(lower_d_elem, tid, pts, weights);
2462
2464 _displaced_problem->reinitLowerDElem(
2465 _displaced_mesh->elemPtr(lower_d_elem->id()), tid, pts, weights);
2466}
virtual void reinitLowerDElem(const Elem *lower_d_elem, const THREAD_ID tid, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr)
Definition SubProblem.C:956

Referenced by ComputeUserObjectsThread::onBoundary(), NonlinearThread::prepareFace(), and reinitElemNeighborAndLowerD().

◆ reinitMaterials()

void FEProblemBase::reinitMaterials ( SubdomainID  blk_id,
const THREAD_ID  tid,
bool  swap_stateful = true 
)

Definition at line 4350 of file FEProblemBase.C.

4351{
4353 {
4354 auto && elem = _assembly[tid][0]->elem();
4355 unsigned int n_points = _assembly[tid][0]->qRule()->n_points();
4356
4357 auto & material_data = _material_props.getMaterialData(tid);
4358 material_data.resize(n_points);
4359
4360 // Only swap if requested
4361 if (swap_stateful)
4362 material_data.swap(*elem);
4363
4365 material_data.reset(_discrete_materials.getActiveBlockObjects(blk_id, tid));
4366
4367 if (_materials.hasActiveBlockObjects(blk_id, tid))
4368 material_data.reinit(_materials.getActiveBlockObjects(blk_id, tid));
4369 }
4370}
bool hasActiveMaterialProperties(const THREAD_ID tid) const
Method to check whether or not a list of active material roperties has been set.
void resize(unsigned int n_qpoints)
Resize the data to hold properties for n_qpoints quadrature points.

Referenced by NodalPatchRecovery::compute(), ComputeDiracThread::onElement(), ComputeIndicatorThread::onElement(), ComputeMarkerThread::onElement(), and ComputeUserObjectsThread::onElement().

◆ reinitMaterialsBoundary()

void FEProblemBase::reinitMaterialsBoundary ( BoundaryID  boundary_id,
const THREAD_ID  tid,
bool  swap_stateful = true,
const std::deque< MaterialBase * > *  reinit_mats = nullptr 
)

reinit materials on a boundary

Parameters
boundary_idThe boundary on which to reinit corresponding materials
tidThe thread id
swap_statefulWhether to swap stateful material properties between MaterialData and MaterialPropertyStorage
execute_statefulWhether to execute material objects that have stateful properties. This should be false when for example executing material objects for mortar contexts in which stateful properties don't make sense
reinit_matsspecific list of materials to reinit. Used notably in the context of mortar with stateful elements

Definition at line 4495 of file FEProblemBase.C.

4499{
4500 if (hasActiveMaterialProperties(tid) && needBoundaryMaterialOnSide(boundary_id, tid))
4501 {
4502 auto && elem = _assembly[tid][0]->elem();
4503 unsigned int side = _assembly[tid][0]->side();
4504 unsigned int n_points = _assembly[tid][0]->qRuleFace()->n_points();
4505
4506 auto & bnd_material_data = _bnd_material_props.getMaterialData(tid);
4507 bnd_material_data.resize(n_points);
4508
4509 if (swap_stateful && !bnd_material_data.isSwapped())
4510 bnd_material_data.swap(*elem, side);
4511
4512 if (_discrete_materials.hasActiveBoundaryObjects(boundary_id, tid))
4513 bnd_material_data.reset(_discrete_materials.getActiveBoundaryObjects(boundary_id, tid));
4514
4515 if (reinit_mats)
4516 bnd_material_data.reinit(*reinit_mats);
4517 else if (_materials.hasActiveBoundaryObjects(boundary_id, tid))
4518 bnd_material_data.reinit(_materials.getActiveBoundaryObjects(boundary_id, tid));
4519 }
4520}
const std::map< BoundaryID, std::vector< std::shared_ptr< T > > > & getActiveBoundaryObjects(THREAD_ID tid=0) const

Referenced by Moose::Mortar::loopOverMortarSegments(), ComputeUserObjectsThread::onBoundary(), ComputeUserObjectsThread::onInterface(), NonlinearThread::onInterface(), and NonlinearThread::prepareFace().

◆ reinitMaterialsFace()

void FEProblemBase::reinitMaterialsFace ( SubdomainID  blk_id,
const THREAD_ID  tid,
bool  swap_stateful = true,
const std::deque< MaterialBase * > *  reinit_mats = nullptr 
)

reinit materials on element faces

Parameters
blk_idThe subdomain on which the element owning the face lives
tidThe thread id
swap_statefulWhether to swap stateful material properties between MaterialData and MaterialPropertyStorage
reinit_matsspecific list of materials to reinit. Used notably in the context of mortar with stateful elements

Definition at line 4373 of file FEProblemBase.C.

4377{
4378 // we reinit more often than needed here because we dont have a way to check whether
4379 // we need to compute the face materials on a particular (possibly external) face
4381 {
4382 auto && elem = _assembly[tid][0]->elem();
4383 unsigned int side = _assembly[tid][0]->side();
4384 unsigned int n_points = _assembly[tid][0]->qRuleFace()->n_points();
4385
4386 auto & bnd_material_data = _bnd_material_props.getMaterialData(tid);
4387 bnd_material_data.resize(n_points);
4388
4389 if (swap_stateful && !bnd_material_data.isSwapped())
4390 bnd_material_data.swap(*elem, side);
4391
4392 if (_discrete_materials[Moose::FACE_MATERIAL_DATA].hasActiveBlockObjects(blk_id, tid))
4393 bnd_material_data.reset(
4394 _discrete_materials[Moose::FACE_MATERIAL_DATA].getActiveBlockObjects(blk_id, tid));
4395
4396 if (reinit_mats)
4397 bnd_material_data.reinit(*reinit_mats);
4398 else if (_materials[Moose::FACE_MATERIAL_DATA].hasActiveBlockObjects(blk_id, tid))
4399 bnd_material_data.reinit(
4400 _materials[Moose::FACE_MATERIAL_DATA].getActiveBlockObjects(blk_id, tid));
4401 }
4402}

Referenced by Moose::Mortar::loopOverMortarSegments(), ComputeIndicatorThread::onInternalSide(), ComputeUserObjectsThread::onInternalSide(), NonlinearThread::onInternalSide(), and NonlinearThread::prepareFace().

◆ reinitMaterialsFaceOnBoundary()

void FEProblemBase::reinitMaterialsFaceOnBoundary ( const BoundaryID  boundary_id,
const SubdomainID  blk_id,
const THREAD_ID  tid,
const bool  swap_stateful = true,
const std::deque< MaterialBase * > *const  reinit_mats = nullptr 
)

reinit materials on element faces on a boundary (internal or external) This specific routine helps us not reinit when don't need to

Parameters
boundary_idThe boundary on which the face belongs
blk_idThe block id to which the element (who owns the face) belong
tidThe thread id
swap_statefulWhether to swap stateful material properties between MaterialData and MaterialPropertyStorage
reinit_matsspecific list of materials to reinit. Used notably in the context of mortar with stateful elements

Definition at line 4405 of file FEProblemBase.C.

4410{
4411 if (hasActiveMaterialProperties(tid) && (needBoundaryMaterialOnSide(boundary_id, tid) ||
4412 needInterfaceMaterialOnSide(boundary_id, tid) ||
4414 {
4415 const auto * const elem = _assembly[tid][0]->elem();
4416 unsigned int side = _assembly[tid][0]->side();
4417 unsigned int n_points = _assembly[tid][0]->qRuleFace()->n_points();
4418
4419 auto & bnd_material_data = _bnd_material_props.getMaterialData(tid);
4420 bnd_material_data.resize(n_points);
4421
4422 if (swap_stateful && !bnd_material_data.isSwapped())
4423 bnd_material_data.swap(*elem, side);
4424
4425 if (_discrete_materials[Moose::FACE_MATERIAL_DATA].hasActiveBlockObjects(blk_id, tid))
4426 bnd_material_data.reset(
4427 _discrete_materials[Moose::FACE_MATERIAL_DATA].getActiveBlockObjects(blk_id, tid));
4428
4429 if (reinit_mats)
4430 bnd_material_data.reinit(*reinit_mats);
4431 else if (_materials[Moose::FACE_MATERIAL_DATA].hasActiveBlockObjects(blk_id, tid))
4432 bnd_material_data.reinit(
4433 _materials[Moose::FACE_MATERIAL_DATA].getActiveBlockObjects(blk_id, tid));
4434 }
4435}

Referenced by ComputeUserObjectsThread::onBoundary(), ComputeUserObjectsThread::onInterface(), NonlinearThread::onInterface(), and NonlinearThread::prepareFace().

◆ reinitMaterialsInterface()

void FEProblemBase::reinitMaterialsInterface ( BoundaryID  boundary_id,
const THREAD_ID  tid,
bool  swap_stateful = true 
)

Definition at line 4523 of file FEProblemBase.C.

4526{
4527 if (hasActiveMaterialProperties(tid) && needInterfaceMaterialOnSide(boundary_id, tid))
4528 {
4529 const Elem * const & elem = _assembly[tid][0]->elem();
4530 unsigned int side = _assembly[tid][0]->side();
4531 unsigned int n_points = _assembly[tid][0]->qRuleFace()->n_points();
4532
4533 auto & bnd_material_data = _bnd_material_props.getMaterialData(tid);
4534 bnd_material_data.resize(n_points);
4535
4536 if (swap_stateful && !bnd_material_data.isSwapped())
4537 bnd_material_data.swap(*elem, side);
4538
4539 if (_interface_materials.hasActiveBoundaryObjects(boundary_id, tid))
4540 bnd_material_data.reinit(_interface_materials.getActiveBoundaryObjects(boundary_id, tid));
4541 }
4542}

Referenced by ComputeUserObjectsThread::onInterface(), and NonlinearThread::onInterface().

◆ reinitMaterialsNeighbor()

void FEProblemBase::reinitMaterialsNeighbor ( SubdomainID  blk_id,
const THREAD_ID  tid,
bool  swap_stateful = true,
const std::deque< MaterialBase * > *  reinit_mats = nullptr 
)

reinit materials on the neighboring element face

Parameters
blk_idThe subdomain on which the neighbor element lives
tidThe thread id
swap_statefulWhether to swap stateful material properties between MaterialData and MaterialPropertyStorage
reinit_matsspecific list of materials to reinit. Used notably in the context of mortar with stateful elements

Definition at line 4455 of file FEProblemBase.C.

4459{
4461 {
4462 // NOTE: this will not work with h-adaptivity
4463 // lindsayad: why not?
4464
4465 const Elem * neighbor = _assembly[tid][0]->neighbor();
4466 unsigned int neighbor_side = neighbor->which_neighbor_am_i(_assembly[tid][0]->elem());
4467
4468 mooseAssert(neighbor, "neighbor should be non-null");
4469 mooseAssert(blk_id == neighbor->subdomain_id(),
4470 "The provided blk_id " << blk_id << " and neighbor subdomain ID "
4471 << neighbor->subdomain_id() << " do not match.");
4472
4473 unsigned int n_points = _assembly[tid][0]->qRuleNeighbor()->n_points();
4474
4475 auto & neighbor_material_data = _neighbor_material_props.getMaterialData(tid);
4476 neighbor_material_data.resize(n_points);
4477
4478 // Only swap if requested
4479 if (swap_stateful)
4480 neighbor_material_data.swap(*neighbor, neighbor_side);
4481
4482 if (_discrete_materials[Moose::NEIGHBOR_MATERIAL_DATA].hasActiveBlockObjects(blk_id, tid))
4483 neighbor_material_data.reset(
4484 _discrete_materials[Moose::NEIGHBOR_MATERIAL_DATA].getActiveBlockObjects(blk_id, tid));
4485
4486 if (reinit_mats)
4487 neighbor_material_data.reinit(*reinit_mats);
4488 else if (_materials[Moose::NEIGHBOR_MATERIAL_DATA].hasActiveBlockObjects(blk_id, tid))
4489 neighbor_material_data.reinit(
4490 _materials[Moose::NEIGHBOR_MATERIAL_DATA].getActiveBlockObjects(blk_id, tid));
4491 }
4492}

Referenced by Moose::Mortar::loopOverMortarSegments(), ComputeUserObjectsThread::onInterface(), ComputeIndicatorThread::onInternalSide(), ComputeUserObjectsThread::onInternalSide(), NonlinearThread::onInternalSide(), reinitMaterialsNeighborOnBoundary(), and NonlinearSystemBase::reinitNodeFace().

◆ reinitMaterialsNeighborOnBoundary()

void FEProblemBase::reinitMaterialsNeighborOnBoundary ( const BoundaryID  boundary_id,
const SubdomainID  blk_id,
const THREAD_ID  tid,
const bool  swap_stateful = true,
const std::deque< MaterialBase * > *const  reinit_mats = nullptr 
)

reinit materials on neighbor element (usually faces) on a boundary (internal or external) This specific routine helps us not reinit when don't need to

Parameters
boundary_idThe boundary on which the face belongs
blk_idThe block id to which the element (who owns the face) belong
tidThe thread id
swap_statefulWhether to swap stateful material properties between MaterialData and MaterialPropertyStorage
reinit_matsspecific list of materials to reinit. Used notably in the context of mortar with stateful elements

Definition at line 4438 of file FEProblemBase.C.

4444{
4445 // Since objects don't declare whether they need the face or neighbor (side) material properties,
4446 // we use the same criteria for skipping material property computations as for face material
4447 // properties This could be a future optimization.
4448 if (hasActiveMaterialProperties(tid) && (needBoundaryMaterialOnSide(boundary_id, tid) ||
4449 needInterfaceMaterialOnSide(boundary_id, tid) ||
4451 reinitMaterialsNeighbor(blk_id, tid, swap_stateful, reinit_mats);
4452}
void reinitMaterialsNeighbor(SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful=true, const std::deque< MaterialBase * > *reinit_mats=nullptr)
reinit materials on the neighboring element face

Referenced by NonlinearThread::onInterface().

◆ reinitMortarElem()

void SubProblem::reinitMortarElem ( const Elem *  elem,
const THREAD_ID  tid = 0 
)
inherited

Reinit a mortar element to obtain a valid JxW.

Definition at line 1009 of file SubProblem.C.

1010{
1011 for (const auto nl_sys_num : make_range(numNonlinearSystems()))
1012 assembly(tid, nl_sys_num).reinitMortarElem(elem);
1013}
void reinitMortarElem(const Elem *elem, const THREAD_ID tid=0)
Reinit a mortar element to obtain a valid JxW.

Referenced by Moose::Mortar::loopOverMortarSegments().

◆ reinitMortarUserObjects()

void FEProblemBase::reinitMortarUserObjects ( BoundaryID  primary_boundary_id,
BoundaryID  secondary_boundary_id,
bool  displaced 
)

Call reinit on mortar user objects with matching primary boundary ID, secondary boundary ID, and displacement characteristics.

Definition at line 10294 of file FEProblemBase.C.

10297{
10298 const auto mortar_uos =
10299 getMortarUserObjects(primary_boundary_id, secondary_boundary_id, displaced);
10300 for (auto * const mortar_uo : mortar_uos)
10301 {
10302 mortar_uo->setNormals();
10303 mortar_uo->reinit();
10304 }
10305}

Referenced by Moose::Mortar::loopOverMortarSegments().

◆ reinitNeighbor()

void FEProblemBase::reinitNeighbor ( const Elem *  elem,
unsigned int  side,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 2522 of file FEProblemBase.C.

2523{
2524 setNeighborSubdomainID(elem, side, tid);
2525
2526 const Elem * neighbor = elem->neighbor_ptr(side);
2527 unsigned int neighbor_side = neighbor->which_neighbor_am_i(elem);
2528
2529 for (const auto i : index_range(_nl))
2530 {
2531 _assembly[tid][i]->reinitElemAndNeighbor(elem, side, neighbor, neighbor_side);
2532 _nl[i]->prepareNeighbor(tid);
2533 // Called during stateful material property evaluation outside of solve
2534 _assembly[tid][i]->prepareNeighbor();
2535 }
2536 _aux->prepareNeighbor(tid);
2537
2538 for (auto & nl : _nl)
2539 {
2540 nl->reinitElemFace(elem, side, tid);
2541 nl->reinitNeighborFace(neighbor, neighbor_side, tid);
2542 }
2543 _aux->reinitElemFace(elem, side, tid);
2544 _aux->reinitNeighborFace(neighbor, neighbor_side, tid);
2545
2547 {
2548 // There are cases like for cohesive zone modeling without significant sliding where we cannot
2549 // use FEInterface::inverse_map in Assembly::reinitElemAndNeighbor in the displaced problem
2550 // because the physical points coming from the element don't actually lie on the neighbor.
2551 // Moreover, what's the point of doing another physical point inversion in other cases? We only
2552 // care about the reference points which we can just take from the undisplaced computation
2553 const auto & displaced_ref_pts = _assembly[tid][0]->qRuleNeighbor()->get_points();
2554
2555 _displaced_problem->reinitNeighbor(
2556 _displaced_mesh->elemPtr(elem->id()), side, tid, &displaced_ref_pts);
2557 }
2558}
virtual void setNeighborSubdomainID(const Elem *elem, unsigned int side, const THREAD_ID tid) override

Referenced by ComputeMaterialsObjectThread::onInterface(), ComputeUserObjectsThread::onInterface(), NonlinearThread::onInterface(), ComputeIndicatorThread::onInternalSide(), ComputeUserObjectsThread::onInternalSide(), and reinitElemNeighborAndLowerD().

◆ reinitNeighborFaceRef()

void FEProblemBase::reinitNeighborFaceRef ( const Elem *  neighbor_elem,
unsigned int  neighbor_side,
Real  tolerance,
const std::vector< Point > *const  pts,
const std::vector< Real > *const  weights = nullptr,
const THREAD_ID  tid = 0 
)
overridevirtual

reinitialize FE objects on a given neighbor element on a given side at a given set of reference points and then compute variable data.

Note that this method makes no assumptions about what's been called beforehand, e.g. you don't have to call some prepare method before this one. This is an all-in-one reinit

Reimplemented from SubProblem.

Definition at line 10040 of file FEProblemBase.C.

10046{
10047 SubProblem::reinitNeighborFaceRef(neighbor_elem, neighbor_side, tolerance, pts, weights, tid);
10048
10050 _displaced_problem->reinitNeighborFaceRef(
10051 _displaced_mesh->elemPtr(neighbor_elem->id()), neighbor_side, tolerance, pts, weights, tid);
10052}
virtual void reinitNeighborFaceRef(const Elem *neighbor_elem, unsigned int neighbor_side, Real tolerance, const std::vector< Point > *const pts, const std::vector< Real > *const weights=nullptr, const THREAD_ID tid=0)
reinitialize FE objects on a given neighbor element on a given side at a given set of reference point...
Definition SubProblem.C:920

Referenced by Moose::Mortar::loopOverMortarSegments().

◆ reinitNeighborLowerDElem()

void SubProblem::reinitNeighborLowerDElem ( const Elem *  elem,
const THREAD_ID  tid = 0 
)
inherited

reinitialize a neighboring lower dimensional element

Definition at line 1002 of file SubProblem.C.

1003{
1004 for (const auto nl_sys_num : make_range(numNonlinearSystems()))
1005 assembly(tid, nl_sys_num).reinitNeighborLowerDElem(elem);
1006}
void reinitNeighborLowerDElem(const Elem *elem, const THREAD_ID tid=0)
reinitialize a neighboring lower dimensional element

Referenced by Moose::Mortar::loopOverMortarSegments().

◆ reinitNeighborPhys() [1/2]

void FEProblemBase::reinitNeighborPhys ( const Elem *  neighbor,
const std::vector< Point > &  physical_points,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 2621 of file FEProblemBase.C.

2624{
2625 mooseAssert(_mesh.queryElemPtr(neighbor->id()) == neighbor,
2626 "Are you calling this method with a displaced mesh element?");
2627
2628 for (const auto i : index_range(_nl))
2629 {
2630 // Reinits shape the functions at the physical points
2631 _assembly[tid][i]->reinitNeighborAtPhysical(neighbor, physical_points);
2632
2633 // Sets the neighbor dof indices
2634 _nl[i]->prepareNeighbor(tid);
2635 }
2636 _aux->prepareNeighbor(tid);
2637
2638 // Resizes Re and Ke
2639 _assembly[tid][_current_nl_sys->number()]->prepareNeighbor();
2640
2641 // Compute the values of each variable at the points
2642 for (auto & nl : _nl)
2643 nl->reinitNeighbor(neighbor, tid);
2644 _aux->reinitNeighbor(neighbor, tid);
2645}

◆ reinitNeighborPhys() [2/2]

void FEProblemBase::reinitNeighborPhys ( const Elem *  neighbor,
unsigned int  neighbor_side,
const std::vector< Point > &  physical_points,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 2593 of file FEProblemBase.C.

2597{
2598 mooseAssert(_mesh.queryElemPtr(neighbor->id()) == neighbor,
2599 "Are you calling this method with a displaced mesh element?");
2600
2601 for (const auto i : index_range(_nl))
2602 {
2603 // Reinits shape the functions at the physical points
2604 _assembly[tid][i]->reinitNeighborAtPhysical(neighbor, neighbor_side, physical_points);
2605
2606 // Sets the neighbor dof indices
2607 _nl[i]->prepareNeighbor(tid);
2608 }
2609 _aux->prepareNeighbor(tid);
2610
2611 // Resizes Re and Ke
2612 _assembly[tid][_current_nl_sys->number()]->prepareNeighbor();
2613
2614 // Compute the values of each variable at the points
2615 for (auto & nl : _nl)
2616 nl->reinitNeighborFace(neighbor, neighbor_side, tid);
2617 _aux->reinitNeighborFace(neighbor, neighbor_side, tid);
2618}

Referenced by NonlinearSystemBase::reinitNodeFace().

◆ reinitNode()

void FEProblemBase::reinitNode ( const Node *  node,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 2469 of file FEProblemBase.C.

2470{
2472 _displaced_problem->reinitNode(&_displaced_mesh->nodeRef(node->id()), tid);
2473
2474 for (const auto i : index_range(_nl))
2475 {
2476 _assembly[tid][i]->reinit(node);
2477 _nl[i]->reinitNode(node, tid);
2478 }
2479 _aux->reinitNode(node, tid);
2480}
virtual const Node & nodeRef(const dof_id_type i) const
Definition MooseMesh.C:846

Referenced by NodalPatchRecovery::compute(), NonlinearSystemBase::computeResidualInternal(), ComputeNodalDampingThread::onNode(), ComputeNodalKernelJacobiansThread::onNode(), ComputeNodalKernelsThread::onNode(), and ComputeNodalUserObjectsThread::onNode().

◆ reinitNodeFace()

void FEProblemBase::reinitNodeFace ( const Node *  node,
BoundaryID  bnd_id,
const THREAD_ID  tid 
)
overridevirtual

◆ reinitNodes()

void SubProblem::reinitNodes ( const std::vector< dof_id_type > &  nodes,
const THREAD_ID  tid 
)
inherited

Definition at line 986 of file SubProblem.C.

987{
988 for (const auto nl_sys_num : make_range(numNonlinearSystems()))
989 systemBaseNonlinear(nl_sys_num).reinitNodes(nodes, tid);
990 systemBaseAuxiliary().reinitNodes(nodes, tid);
991}
void reinitNodes(const std::vector< dof_id_type > &nodes, const THREAD_ID tid)
Definition SubProblem.C:986
virtual void reinitNodes(const std::vector< dof_id_type > &nodes, THREAD_ID tid)
Reinit variables at a set of nodes.
Definition SystemBase.C:421

Referenced by AuxNodalScalarKernel::compute(), NodalScalarKernel::reinit(), and NodalConstraint::reinitConstraintNodes().

◆ reinitNodesNeighbor()

void SubProblem::reinitNodesNeighbor ( const std::vector< dof_id_type > &  nodes,
const THREAD_ID  tid 
)
inherited

Definition at line 994 of file SubProblem.C.

995{
996 for (const auto nl_sys_num : make_range(numNonlinearSystems()))
997 systemBaseNonlinear(nl_sys_num).reinitNodesNeighbor(nodes, tid);
999}
void reinitNodesNeighbor(const std::vector< dof_id_type > &nodes, const THREAD_ID tid)
Definition SubProblem.C:994
virtual void reinitNodesNeighbor(const std::vector< dof_id_type > &nodes, THREAD_ID tid)
Reinit variables at a set of neighbor nodes.
Definition SystemBase.C:432

Referenced by NodalConstraint::reinitConstraintNodes().

◆ reinitOffDiagScalars()

void FEProblemBase::reinitOffDiagScalars ( const THREAD_ID  tid)
overridevirtual

Implements SubProblem.

Definition at line 2514 of file FEProblemBase.C.

2515{
2516 _assembly[tid][_current_nl_sys->number()]->prepareOffDiagScalar();
2518 _displaced_problem->reinitOffDiagScalars(tid);
2519}

Referenced by NonlinearSystemBase::computeScalarKernelsJacobians(), NonlinearSystemBase::constraintJacobians(), and NonlinearThread::onElement().

◆ reinitScalars()

void FEProblemBase::reinitScalars ( const THREAD_ID  tid,
bool  reinit_for_derivative_reordering = false 
)
overridevirtual

fills the VariableValue arrays for scalar variables from the solution vector

Parameters
tidThe thread id
reinit_for_derivative_reorderingA flag indicating whether we are reinitializing for the purpose of re-ordering derivative information for ADNodalBCs

Implements SubProblem.

Definition at line 2497 of file FEProblemBase.C.

2498{
2499 TIME_SECTION("reinitScalars", 3, "Reinitializing Scalar Variables");
2500
2502 _displaced_problem->reinitScalars(tid, reinit_for_derivative_reordering);
2503
2504 for (auto & nl : _nl)
2505 nl->reinitScalars(tid, reinit_for_derivative_reordering);
2506 _aux->reinitScalars(tid, reinit_for_derivative_reordering);
2507
2508 // This is called outside of residual/Jacobian call-backs
2509 for (auto & assembly : _assembly[tid])
2510 assembly->prepareScalar();
2511}

Referenced by NonlinearSystemBase::computeJacobianBlocks(), NonlinearSystemBase::computeJacobianInternal(), computeJacobianTags(), NonlinearSystemBase::computeNodalBCsJacobian(), computeResidualAndJacobian(), NonlinearSystemBase::computeResidualAndJacobianInternal(), NonlinearSystemBase::computeResidualInternal(), computeResidualTags(), NonlinearSystemBase::computeScalarKernelsJacobians(), and AuxiliarySystem::computeScalarVars().

◆ removeAlgebraicGhostingFunctor()

void SubProblem::removeAlgebraicGhostingFunctor ( libMesh::GhostingFunctor algebraic_gf)
inherited

Remove an algebraic ghosting functor from this problem's DofMaps.

Definition at line 1082 of file SubProblem.C.

1083{
1084 EquationSystems & eq = es();
1085 const auto n_sys = eq.n_systems();
1086 DofMap & nl_dof_map = eq.get_system(0).get_dof_map();
1087
1088 const bool found_in_root_sys =
1089 std::find(nl_dof_map.algebraic_ghosting_functors_begin(),
1090 nl_dof_map.algebraic_ghosting_functors_end(),
1091 &algebraic_gf) != nl_dof_map.algebraic_ghosting_functors_end();
1092
1093#ifndef NDEBUG
1094 const bool found_in_our_map =
1095 _root_alg_gf_to_sys_clones.find(&algebraic_gf) != _root_alg_gf_to_sys_clones.end();
1096 mooseAssert(found_in_root_sys == found_in_our_map,
1097 "If the ghosting functor exists in the root DofMap, then we need to have a key for "
1098 "it in our gf to clones map");
1099#endif
1100
1101 if (found_in_root_sys) // libMesh yells if we try to remove
1102 // something that's not there
1103 nl_dof_map.remove_algebraic_ghosting_functor(algebraic_gf);
1104
1105 auto it = _root_alg_gf_to_sys_clones.find(&algebraic_gf);
1106 if (it == _root_alg_gf_to_sys_clones.end())
1107 return;
1108
1109 auto & clones_vec = it->second;
1110 mooseAssert((n_sys - 1) == clones_vec.size(),
1111 "The size of the gf clones vector doesn't match the number of systems minus one");
1112 if (clones_vec.empty())
1113 {
1114 mooseAssert(n_sys == 1, "The clones vector should only be empty if there is only one system");
1115 return;
1116 }
1117
1118 for (const auto i : make_range(n_sys))
1119 eq.get_system(i + 1).get_dof_map().remove_algebraic_ghosting_functor(*clones_vec[i]);
1120
1121 _root_alg_gf_to_sys_clones.erase(it->first);
1122}

◆ removeCouplingGhostingFunctor()

void SubProblem::removeCouplingGhostingFunctor ( libMesh::GhostingFunctor coupling_gf)
inherited

Remove a coupling ghosting functor from this problem's DofMaps.

Definition at line 1125 of file SubProblem.C.

1126{
1127 EquationSystems & eq = es();
1128 const auto num_nl_sys = numNonlinearSystems();
1129 if (!num_nl_sys)
1130 return;
1131
1132 DofMap & nl_dof_map = eq.get_system(0).get_dof_map();
1133 const bool found_in_root_sys = std::find(nl_dof_map.coupling_functors_begin(),
1134 nl_dof_map.coupling_functors_end(),
1135 &coupling_gf) != nl_dof_map.coupling_functors_end();
1136
1137#ifndef NDEBUG
1138 const bool found_in_our_map =
1140 mooseAssert(found_in_root_sys == found_in_our_map,
1141 "If the ghosting functor exists in the root DofMap, then we need to have a key for "
1142 "it in our gf to clones map");
1143#endif
1144
1145 if (found_in_root_sys) // libMesh yells if we try to remove
1146 // something that's not there
1147 nl_dof_map.remove_coupling_functor(coupling_gf);
1148
1149 auto it = _root_coupling_gf_to_sys_clones.find(&coupling_gf);
1150 if (it == _root_coupling_gf_to_sys_clones.end())
1151 return;
1152
1153 auto & clones_vec = it->second;
1154 mooseAssert((num_nl_sys - 1) == clones_vec.size(),
1155 "The size of the gf clones vector doesn't match the number of systems minus one");
1156 if (clones_vec.empty())
1157 {
1158 mooseAssert(num_nl_sys == 1,
1159 "The clones vector should only be empty if there is only one nonlinear system");
1160 return;
1161 }
1162
1163 for (const auto i : make_range(num_nl_sys))
1164 eq.get_system(i + 1).get_dof_map().remove_coupling_functor(*clones_vec[i]);
1165
1166 _root_coupling_gf_to_sys_clones.erase(it->first);
1167}

◆ reportMooseObjectDependency()

void FEProblemBase::reportMooseObjectDependency ( MooseObject a,
MooseObject b 
)

Register a MOOSE object dependency so we can either order operations properly or report when we cannot.

a -> b (a depends on b)

Definition at line 5772 of file FEProblemBase.C.

5773{
5774 //<< "Object " << a->name() << " -> " << b->name() << std::endl;
5775}

◆ resetFailNextNonlinearConvergenceCheck()

void FEProblemBase::resetFailNextNonlinearConvergenceCheck ( )
inline

Tell the problem that the nonlinear convergence check(s) may proceed as normal.

Definition at line 2955 of file FEProblemBase.h.

void resetFailNextSystemConvergenceCheck()
Tell the problem that the system convergence check(s) may proceed as normal.

Referenced by Moose::PetscSupport::petscNonlinearConverged().

◆ resetFailNextSystemConvergenceCheck()

void FEProblemBase::resetFailNextSystemConvergenceCheck ( )
inline

Tell the problem that the system convergence check(s) may proceed as normal.

Definition at line 2957 of file FEProblemBase.h.

Referenced by Moose::PetscSupport::petscLinearConverged(), and resetFailNextNonlinearConvergenceCheck().

◆ resetState()

void FEProblemBase::resetState ( )
privatevirtual

Reset state of this object in preparation for the next evaluation.

Definition at line 7368 of file FEProblemBase.C.

7369{
7370 // Our default state is to allow computing derivatives
7371 ADReal::do_derivatives = true;
7373
7374 // Clear the VectorTags and MatrixTags
7377
7380
7385 {
7386 _displaced_problem->setCurrentlyComputingResidual(false);
7387 _displaced_problem->setCurrentlyComputingJacobian(false);
7388 _displaced_problem->setCurrentlyComputingResidualAndJacobian(false);
7389 }
7390}
void clearCurrentJacobianMatrixTags()
Clear the current Jacobian matrix tag data structure ... if someone creates it.
void clearCurrentResidualVectorTags()
Clear the current residual vector tag data structure.

Referenced by computeJacobianTags(), computeResidualAndJacobian(), and computeResidualTags().

◆ residualSetup()

void FEProblemBase::residualSetup ( )
overridevirtual

Reimplemented from SubProblem.

Definition at line 10194 of file FEProblemBase.C.

10195{
10197 // We need to setup all the nonlinear systems other than our current one which actually called
10198 // this method (so we have to make sure we don't go in a circle)
10199 for (const auto i : make_range(numNonlinearSystems()))
10200 if (i != currentNlSysNum())
10201 _nl[i]->residualSetup();
10202 // We don't setup the aux sys because that's been done elsewhere
10204 _displaced_problem->residualSetup();
10205}
virtual void residualSetup()

Referenced by residualSetup(), and NonlinearSystemBase::residualSetup().

◆ resizeMaterialData()

void FEProblemBase::resizeMaterialData ( Moose::MaterialDataType  data_type,
unsigned int  nqp,
const THREAD_ID  tid 
)

Resize material data.

Parameters
data_typeThe type of material data to resize
nqpThe number of quadrature points to resize for
tidThe thread ID

Definition at line 10111 of file FEProblemBase.C.

10114{
10115 getMaterialData(data_type, tid).resize(nqp);
10116}

◆ restartableName()

std::string Restartable::restartableName ( const std::string &  data_name) const
protectedinherited

Gets the name of a piece of restartable data given a data name, adding the system name and object name prefix.

This should only be used in this interface and in testing.

Definition at line 78 of file Restartable.C.

79{
80 return _restartable_system_name + "/" + _restartable_name + "/" + data_name;
81}
const std::string _restartable_system_name
The system name this object is in.

Referenced by Restartable::declareRecoverableData(), and Restartable::declareRestartableDataHelper().

◆ restoreMultiApps()

void FEProblemBase::restoreMultiApps ( ExecFlagType  type,
bool  force = false 
)

Restore the MultiApps associated with the ExecFlagType.

Parameters
forceForce restoration because something went wrong with the solve

Definition at line 6420 of file FEProblemBase.C.

6421{
6422 const auto & multi_apps = _multi_apps[type].getActiveObjects();
6423
6424 if (multi_apps.size())
6425 {
6427 {
6428 if (force)
6429 _console << COLOR_CYAN << "\nRestoring Multiapps on " << type.name()
6430 << " because of solve failure!" << COLOR_DEFAULT << std::endl;
6431 else
6432 _console << COLOR_CYAN << "\nRestoring MultiApps on " << type.name() << COLOR_DEFAULT
6433 << std::endl;
6434 }
6435
6436 for (const auto & multi_app : multi_apps)
6437 multi_app->restore(force);
6438
6440
6442 _console << COLOR_CYAN << "Finished Restoring MultiApps on " << type.name() << "\n"
6443 << COLOR_DEFAULT << std::endl;
6444 }
6445}

Referenced by TransientBase::incrementStepOrReject(), and FixedPointSolve::solve().

◆ restoreOldSolutions()

void FEProblemBase::restoreOldSolutions ( )
virtual

Restore old solutions from the backup vectors and deallocate them.

Definition at line 7563 of file FEProblemBase.C.

7564{
7565 TIME_SECTION("restoreOldSolutions", 5, "Restoring Old Solutions");
7566
7567 for (auto & sys : _solver_systems)
7568 sys->restoreOldSolutions();
7569 _aux->restoreOldSolutions();
7570}
virtual void restoreOldSolutions()
Restore old solutions from the backup vectors and deallocate them.

Referenced by EigenExecutionerBase::inversePowerIteration().

◆ restoreOriginalNonzeroPattern()

bool FEProblemBase::restoreOriginalNonzeroPattern ( ) const
inline
Returns
Whether the original matrix nonzero pattern is restored before each Jacobian assembly

Definition at line 2408 of file FEProblemBase.h.

Referenced by NonlinearSystemBase::computeJacobianInternal().

◆ restoreSolutions()

void FEProblemBase::restoreSolutions ( )
virtual

Definition at line 7525 of file FEProblemBase.C.

7526{
7527 TIME_SECTION("restoreSolutions", 5, "Restoring Solutions");
7528
7529 if (!_not_zeroed_tagged_vectors.empty())
7530 paramError("not_zeroed_tag_vectors",
7531 "There is currently no way to restore not-zeroed vectors.");
7532
7533 for (auto & sys : _solver_systems)
7534 {
7535 if (_verbose_restore)
7536 _console << "Restoring solutions on system " << sys->name() << "..." << std::endl;
7537 sys->restoreStateHistory();
7538 }
7539
7540 if (_verbose_restore)
7541 _console << "Restoring solutions on Auxiliary system..." << std::endl;
7542 _aux->restoreStateHistory();
7543
7544 if (_verbose_restore)
7545 _console << "Restoring postprocessor, vector-postprocessor, and reporter data..." << std::endl;
7547
7549 _displaced_problem->updateMesh();
7550}
void restoreState(bool verbose=false)
When a time step fails, this method is called to revert the current reporter values to their old stat...

Referenced by ActivateElementsUserObjectBase::initSolutions(), TimeStepper::rejectStep(), and updateMeshXFEM().

◆ restrictionBoundaryCheckName()

std::string SubProblem::restrictionBoundaryCheckName ( BoundaryID  check_id)
privateinherited

Definition at line 782 of file SubProblem.C.

783{
784 return mesh().getMesh().get_boundary_info().sideset_name(check_id);
785}

Referenced by SubProblem::checkBoundaryMatProps().

◆ restrictionSubdomainCheckName()

std::string SubProblem::restrictionSubdomainCheckName ( SubdomainID  check_id)
privateinherited

Helper functions for checking MaterialProperties.

Definition at line 771 of file SubProblem.C.

772{
773 // TODO: Put a better a interface in MOOSE
774 std::map<subdomain_id_type, std::string> & name_map = mesh().getMesh().set_subdomain_name_map();
775 std::map<subdomain_id_type, std::string>::const_iterator pos = name_map.find(check_id);
776 if (pos != name_map.end())
777 return pos->second;
778 return "";
779}

Referenced by SubProblem::checkBlockMatProps().

◆ safeAccessTaggedMatrices()

virtual bool SubProblem::safeAccessTaggedMatrices ( ) const
inlinevirtualinherited

Is it safe to access the tagged matrices.

Reimplemented in DisplacedProblem.

Definition at line 739 of file SubProblem.h.

Referenced by MooseVariableScalar::reinit(), and DisplacedProblem::safeAccessTaggedMatrices().

◆ safeAccessTaggedVectors()

virtual bool SubProblem::safeAccessTaggedVectors ( ) const
inlinevirtualinherited

Is it safe to access the tagged vectors.

Reimplemented in DisplacedProblem.

Definition at line 742 of file SubProblem.h.

Referenced by MooseVariableScalar::reinit(), and DisplacedProblem::safeAccessTaggedVectors().

◆ saveOldSolutions()

void FEProblemBase::saveOldSolutions ( )
virtual

Allocate vectors and save old solutions into them.

Definition at line 7553 of file FEProblemBase.C.

7554{
7555 TIME_SECTION("saveOldSolutions", 5, "Saving Old Solutions");
7556
7557 for (auto & sys : _solver_systems)
7558 sys->saveOldSolutions();
7559 _aux->saveOldSolutions();
7560}
virtual void saveOldSolutions()
Allocate vectors and save old solutions into them.

Referenced by EigenExecutionerBase::inversePowerIteration().

◆ selectMatrixTagsFromSystem()

void SubProblem::selectMatrixTagsFromSystem ( const SystemBase system,
const std::map< TagName, TagID > &  input_matrix_tags,
std::set< TagID > &  selected_tags 
)
staticinherited

Select the matrix tags which belong to a specific system.

Parameters
systemReference to the system
input_matrix_tagsA map of matrix tags
selected_tagsA set which gets populated by the tag-ids that belong to the system

Definition at line 299 of file SubProblem.C.

302{
303 selected_tags.clear();
304 for (const auto & matrix_tag_pair : input_matrix_tags)
305 if (system.hasMatrix(matrix_tag_pair.second))
306 selected_tags.insert(matrix_tag_pair.second);
307}

Referenced by computeLinearSystemSys().

◆ selectVectorTagsFromSystem()

void SubProblem::selectVectorTagsFromSystem ( const SystemBase system,
const std::vector< VectorTag > &  input_vector_tags,
std::set< TagID > &  selected_tags 
)
staticinherited

Select the vector tags which belong to a specific system.

Parameters
systemReference to the system
input_vector_tagsA vector of vector tags
selected_tagsA set which gets populated by the tag-ids that belong to the system

Definition at line 288 of file SubProblem.C.

291{
292 selected_tags.clear();
293 for (const auto & vector_tag : input_vector_tags)
294 if (system.hasVector(vector_tag._id))
295 selected_tags.insert(vector_tag._id);
296}

Referenced by computeLinearSystemSys(), computeResidualAndJacobian(), and ComputeResidualAndJacobianThread::determineObjectWarehouses().

◆ setActiveElementalMooseVariables()

void FEProblemBase::setActiveElementalMooseVariables ( const std::set< MooseVariableFEBase * > &  moose_vars,
const THREAD_ID  tid 
)
overridevirtual

Set the MOOSE variables to be reinited on each element.

Parameters
moose_varsA set of variables that need to be reinited each time reinit() is called.
tidThe thread id

Reimplemented from SubProblem.

Definition at line 6693 of file FEProblemBase.C.

6695{
6697
6699 _displaced_problem->setActiveElementalMooseVariables(moose_vars, tid);
6700}
virtual void setActiveElementalMooseVariables(const std::set< MooseVariableFieldBase * > &moose_vars, const THREAD_ID tid)
Set the MOOSE variables to be reinited on each element.
Definition SubProblem.C:442

Referenced by prepareMaterials(), ComputeDiracThread::subdomainChanged(), ComputeIndicatorThread::subdomainChanged(), ComputeMarkerThread::subdomainChanged(), ComputeMaterialsObjectThread::subdomainChanged(), and ComputeUserObjectsThread::subdomainChanged().

◆ setActiveFEVariableCoupleableMatrixTags()

void FEProblemBase::setActiveFEVariableCoupleableMatrixTags ( std::set< TagID > &  mtags,
const THREAD_ID  tid 
)
overridevirtual

Reimplemented from SubProblem.

Definition at line 6655 of file FEProblemBase.C.

6656{
6658
6660 _displaced_problem->setActiveFEVariableCoupleableMatrixTags(mtags, tid);
6661}
virtual void setActiveFEVariableCoupleableMatrixTags(std::set< TagID > &mtags, const THREAD_ID tid)
Definition SubProblem.C:362

◆ setActiveFEVariableCoupleableVectorTags()

void FEProblemBase::setActiveFEVariableCoupleableVectorTags ( std::set< TagID > &  vtags,
const THREAD_ID  tid 
)
overridevirtual

◆ setActiveMaterialProperties()

void FEProblemBase::setActiveMaterialProperties ( const std::unordered_set< unsigned int > &  mat_prop_ids,
const THREAD_ID  tid 
)

Record and set the material properties required by the current computing thread.

Parameters
mat_prop_idsThe set of material properties required by the current computing thread.
tidThe thread id

Definition at line 6748 of file FEProblemBase.C.

6750{
6751 // mark active properties in every material
6752 for (auto & mat : _all_materials.getObjects(tid))
6753 mat->setActiveProperties(mat_prop_ids);
6754 for (auto & mat : _all_materials[Moose::FACE_MATERIAL_DATA].getObjects(tid))
6755 mat->setActiveProperties(mat_prop_ids);
6756 for (auto & mat : _all_materials[Moose::NEIGHBOR_MATERIAL_DATA].getObjects(tid))
6757 mat->setActiveProperties(mat_prop_ids);
6758
6759 _has_active_material_properties[tid] = !mat_prop_ids.empty();
6760}

Referenced by Moose::Mortar::loopOverMortarSegments(), prepareMaterials(), NodalPatchRecovery::reinitPatch(), NonlinearSystemBase::setConstraintSecondaryValues(), and ComputeDiracThread::subdomainChanged().

◆ setActiveScalarVariableCoupleableMatrixTags()

void FEProblemBase::setActiveScalarVariableCoupleableMatrixTags ( std::set< TagID > &  mtags,
const THREAD_ID  tid 
)
overridevirtual

Reimplemented from SubProblem.

Definition at line 6673 of file FEProblemBase.C.

6675{
6677
6679 _displaced_problem->setActiveScalarVariableCoupleableMatrixTags(mtags, tid);
6680}
virtual void setActiveScalarVariableCoupleableMatrixTags(std::set< TagID > &mtags, const THREAD_ID tid)
Definition SubProblem.C:401

Referenced by AuxiliarySystem::setScalarVariableCoupleableTags().

◆ setActiveScalarVariableCoupleableVectorTags()

void FEProblemBase::setActiveScalarVariableCoupleableVectorTags ( std::set< TagID > &  vtags,
const THREAD_ID  tid 
)
overridevirtual

Reimplemented from SubProblem.

Definition at line 6683 of file FEProblemBase.C.

6685{
6687
6689 _displaced_problem->setActiveScalarVariableCoupleableVectorTags(vtags, tid);
6690}
virtual void setActiveScalarVariableCoupleableVectorTags(std::set< TagID > &vtags, const THREAD_ID tid)
Definition SubProblem.C:408

Referenced by AuxiliarySystem::setScalarVariableCoupleableTags().

◆ setAuxKernelParamsAndLog()

void FEProblemBase::setAuxKernelParamsAndLog ( const std::string &  ak_name,
const std::string &  name,
InputParameters parameters,
const std::string &  base_name 
)
private

Set the subproblem and system parameters for auxiliary kernels and log their addition.

Parameters
ak_nameThe type of the auxiliary kernel
nameThe name of the auxiliary kernel
parametersThe auxiliary kernel parameters
base_nameThe base type of the auxiliary kernel, i.e. AuxKernel or KokkosAuxKernel

Definition at line 3180 of file FEProblemBase.C.

3184{
3185 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
3186 {
3187 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
3188 parameters.set<SystemBase *>("_sys") = &_displaced_problem->auxSys();
3189 parameters.set<SystemBase *>("_nl_sys") = &_displaced_problem->solverSys(0);
3190 if (!parameters.get<std::vector<BoundaryName>>("boundary").empty())
3192 else
3194 }
3195 else
3196 {
3197 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
3198 {
3199 // We allow AuxKernels to request that they use_displaced_mesh,
3200 // but then be overridden when no displacements variables are
3201 // provided in the Mesh block. If that happened, update the value
3202 // of use_displaced_mesh appropriately for this AuxKernel.
3203 if (parameters.have_parameter<bool>("use_displaced_mesh"))
3204 parameters.set<bool>("use_displaced_mesh") = false;
3205 }
3206
3207 parameters.set<SubProblem *>("_subproblem") = this;
3208 parameters.set<SystemBase *>("_sys") = _aux.get();
3209 parameters.set<SystemBase *>("_nl_sys") = _solver_systems[0].get();
3210 }
3211
3212 logAdd(base_name, name, ak_name, parameters);
3213}

Referenced by addAuxKernel().

◆ setAxisymmetricCoordAxis()

void FEProblemBase::setAxisymmetricCoordAxis ( const MooseEnum rz_coord_axis)

Definition at line 903 of file FEProblemBase.C.

904{
905 _mesh.setAxisymmetricCoordAxis(rz_coord_axis);
906}
void setAxisymmetricCoordAxis(const MooseEnum &rz_coord_axis)
For axisymmetric simulations, set the symmetry coordinate axis.
Definition MooseMesh.C:4297

◆ setChainControlDataOutput()

void SubProblem::setChainControlDataOutput ( bool  set_output)
inlineinherited

Setter for debug chain control data output.

Definition at line 934 of file SubProblem.h.

934{ _show_chain_control_data = set_output; }
bool _show_chain_control_data
Whether to output a list of all the chain control data.

◆ setCheckResidualForNans()

void FEProblemBase::setCheckResidualForNans ( bool  check_residual_for_nans)
inline

Setter for residual NaN/Inf checking.

Definition at line 235 of file FEProblemBase.h.

236 {
237 _check_residual_for_nans = check_residual_for_nans;
238 }

◆ setConstJacobian()

void FEProblemBase::setConstJacobian ( bool  state)
inline

Set flag that Jacobian is constant (for optimization purposes)

Parameters
stateTrue if the Jacobian is constant, false otherwise

Definition at line 2251 of file FEProblemBase.h.

2251{ _const_jacobian = state; }

Referenced by ExplicitEuler::preSolve(), ExplicitRK2::preSolve(), and ExplicitTVDRK2::preSolve().

◆ setCoordSystem()

void FEProblemBase::setCoordSystem ( const std::vector< SubdomainName > &  blocks,
const MultiMooseEnum coord_sys 
)

Definition at line 895 of file FEProblemBase.C.

897{
898 TIME_SECTION("setCoordSystem", 5, "Setting Coordinate System");
899 _mesh.setCoordSystem(blocks, coord_sys);
900}
void setCoordSystem(const std::vector< SubdomainName > &blocks, const MultiMooseEnum &coord_sys)
Set the coordinate system for the provided blocks to coord_sys.
Definition MooseMesh.C:4165

◆ setCoupling()

void FEProblemBase::setCoupling ( Moose::CouplingType  type)

Set the coupling between variables TODO: allow user-defined coupling.

Parameters
typeType of coupling

Definition at line 6924 of file FEProblemBase.C.

6925{
6927 {
6929 mooseError("Someone told us (the FEProblemBase) to trust the user coupling matrix, but we "
6930 "haven't been provided a coupling matrix!");
6931
6932 // We've been told to trust the user coupling matrix, so we're going to leave things alone
6933 return;
6934 }
6935
6936 _coupling = type;
6937}
bool _trust_user_coupling_matrix
Whether to trust the user coupling matrix no matter what.

Referenced by init(), and Moose::SlepcSupport::setEigenProblemSolverParams().

◆ setCouplingMatrix() [1/2]

void FEProblemBase::setCouplingMatrix ( libMesh::CouplingMatrix cm,
const unsigned int  nl_sys_num 
)

◆ setCouplingMatrix() [2/2]

void FEProblemBase::setCouplingMatrix ( std::unique_ptr< libMesh::CouplingMatrix cm,
const unsigned int  nl_sys_num 
)

Set custom coupling matrix.

Parameters
cmcoupling matrix to be set
nl_sys_numwhich nonlinear system we are setting the coupling matrix for

Referenced by MoosePreconditioner::setCouplingMatrix().

◆ setCurrentAlgebraicBndNodeRange()

void FEProblemBase::setCurrentAlgebraicBndNodeRange ( ConstBndNodeRange range)

Definition at line 10411 of file FEProblemBase.C.

10412{
10413 if (!range)
10414 {
10416 return;
10417 }
10418
10419 _current_algebraic_bnd_node_range = std::make_unique<ConstBndNodeRange>(*range);
10420}

◆ setCurrentAlgebraicElementRange()

void FEProblemBase::setCurrentAlgebraicElementRange ( libMesh::ConstElemRange range)

These functions allow setting custom ranges for the algebraic elements, nodes, and boundary nodes that contribute to the jacobian and residual for this local processor.

setCurrentAlgebraicElementRange() sets the element range that contributes to the system. A nullptr will reset the range to use the mesh's range.

setCurrentAlgebraicNodeRange() sets the node range that contributes to the system. A nullptr will reset the range to use the mesh's range.

setCurrentAlgebraicBndNodeRange() sets the boundary node range that contributes to the system. A nullptr will reset the range to use the mesh's range.

Parameters
rangeA pointer to the const range object representing the algebraic elements, nodes, or boundary nodes.

Definition at line 10389 of file FEProblemBase.C.

10390{
10391 if (!range)
10392 {
10394 return;
10395 }
10396
10397 _current_algebraic_elem_range = std::make_unique<ConstElemRange>(*range);
10398}

◆ setCurrentAlgebraicNodeRange()

void FEProblemBase::setCurrentAlgebraicNodeRange ( libMesh::ConstNodeRange range)

Definition at line 10400 of file FEProblemBase.C.

10401{
10402 if (!range)
10403 {
10405 return;
10406 }
10407
10408 _current_algebraic_node_range = std::make_unique<ConstNodeRange>(*range);
10409}

◆ setCurrentBoundaryID()

void FEProblemBase::setCurrentBoundaryID ( BoundaryID  bid,
const THREAD_ID  tid 
)
overridevirtual

sets the current boundary ID in assembly

Reimplemented from SubProblem.

Definition at line 10325 of file FEProblemBase.C.

10326{
10329 _displaced_problem->setCurrentBoundaryID(bid, tid);
10330}
virtual void setCurrentBoundaryID(BoundaryID bid, const THREAD_ID tid)
sets the current boundary ID in assembly
Definition SubProblem.C:788

◆ setCurrentExecuteOnFlag()

void FEProblemBase::setCurrentExecuteOnFlag ( const ExecFlagType flag)

Definition at line 5167 of file FEProblemBase.C.

5168{
5170}

Referenced by execute(), MFEMProblem::execute(), initialSetup(), and outputStep().

◆ setCurrentLinearSystem()

void FEProblemBase::setCurrentLinearSystem ( unsigned int  sys_num)

Set the current linear system pointer.

Parameters
sys_numThe number of linear system

Definition at line 10342 of file FEProblemBase.C.

10343{
10344 mooseAssert(sys_num < _linear_systems.size(),
10345 "System number greater than the number of linear systems");
10346 _current_linear_sys = _linear_systems[sys_num].get();
10348}
SolverSystem * _current_solver_sys
The current solver system.

Referenced by computeLinearSystemSys(), LinearSystem::computeLinearSystemTags(), and solveLinearSystem().

◆ setCurrentLowerDElem()

void FEProblemBase::setCurrentLowerDElem ( const Elem *const  lower_d_elem,
const THREAD_ID  tid 
)
overridevirtual

Set the current lower dimensional element.

This can be null

Reimplemented from SubProblem.

Definition at line 10316 of file FEProblemBase.C.

10317{
10318 SubProblem::setCurrentLowerDElem(lower_d_elem, tid);
10320 _displaced_problem->setCurrentLowerDElem(
10321 lower_d_elem ? _displaced_mesh->elemPtr(lower_d_elem->id()) : nullptr, tid);
10322}
virtual void setCurrentLowerDElem(const Elem *const lower_d_elem, const THREAD_ID tid)
Set the current lower dimensional element.

◆ setCurrentlyComputingJacobian()

void SubProblem::setCurrentlyComputingJacobian ( const bool  currently_computing_jacobian)
inlineinherited

Set whether or not the problem is in the process of computing the Jacobian.

Definition at line 697 of file SubProblem.h.

698 {
699 _currently_computing_jacobian = currently_computing_jacobian;
700 }

Referenced by computeResidualAndJacobian(), and resetState().

◆ setCurrentlyComputingResidual()

void FEProblemBase::setCurrentlyComputingResidual ( bool  currently_computing_residual)
finalvirtual

Set whether or not the problem is in the process of computing the residual.

Reimplemented from SubProblem.

Definition at line 9992 of file FEProblemBase.C.

9993{
9995 _displaced_problem->setCurrentlyComputingResidual(currently_computing_residual);
9996 _currently_computing_residual = currently_computing_residual;
9997}

Referenced by computeResidualAndJacobian(), computeResidualTags(), NonlinearSystemBase::computeResidualTags(), and resetState().

◆ setCurrentlyComputingResidualAndJacobian()

void SubProblem::setCurrentlyComputingResidualAndJacobian ( bool  currently_computing_residual_and_jacobian)
inlineinherited

Set whether or not the problem is in the process of computing the Jacobian.

Definition at line 1511 of file SubProblem.h.

1513{
1514 _currently_computing_residual_and_jacobian = currently_computing_residual_and_jacobian;
1515}

Referenced by computeResidualAndJacobian(), and resetState().

◆ setCurrentNonlinearSystem()

void FEProblemBase::setCurrentNonlinearSystem ( const unsigned int  nl_sys_num)

◆ setCurrentResidualVectorTags()

void FEProblemBase::setCurrentResidualVectorTags ( const std::set< TagID > &  vector_tags)
inline

Set the current residual vector tag data structure based on the passed in tag IDs.

Definition at line 3933 of file FEProblemBase.h.

3934{
3936}

Referenced by computeResidualAndJacobian(), computeResidualTags(), and CrankNicolson::init().

◆ setCurrentSubdomainID()

void FEProblemBase::setCurrentSubdomainID ( const Elem *  elem,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 1974 of file FEProblemBase.C.

1975{
1976 SubdomainID did = elem->subdomain_id();
1977 for (const auto i : index_range(_solver_systems))
1978 {
1979 _assembly[tid][i]->setCurrentSubdomainID(did);
1980 if (_displaced_problem &&
1982 _displaced_problem->assembly(tid, i).setCurrentSubdomainID(did);
1983 }
1984}

Referenced by NonlinearSystemBase::constraintJacobians(), NonlinearSystemBase::constraintResiduals(), ElementalVariableValue::execute(), MultiAppVariableValueSamplePostprocessorTransfer::execute(), and ComputeInitialConditionThread::operator()().

◆ setErrorOnJacobianNonzeroReallocation()

void FEProblemBase::setErrorOnJacobianNonzeroReallocation ( bool  state)
inline

Definition at line 2419 of file FEProblemBase.h.

2420 {
2422 }

◆ setException()

void FEProblemBase::setException ( const std::string &  message)
virtual

Set an exception, which is stored at this point by toggling a member variable in this class, and which must be followed up with by a call to checkExceptionAndStopSolve().

Parameters
messageThe error message describing the exception, which will get printed when checkExceptionAndStopSolve() is called

Definition at line 7298 of file FEProblemBase.C.

7299{
7300 _has_exception = true;
7301 _exception_message = message;
7302}

Referenced by ComputeThreadedGeneralUserObjectsThread::caughtMooseException(), ThreadedFaceLoop< RangeType >::caughtMooseException(), ThreadedNodeLoop< RangeType, IteratorType >::caughtMooseException(), NonlinearSystemBase::computeDamping(), AuxiliarySystem::computeElementalVarsHelper(), AuxiliarySystem::computeMortarNodalVars(), handleException(), ComputeMortarFunctor::operator()(), DisplacedProblem::updateMesh(), and DisplacedProblem::updateMesh().

◆ setExecutionPrinting()

void FEProblemBase::setExecutionPrinting ( const ExecFlagEnum print_exec)
inline

Definition at line 2963 of file FEProblemBase.h.

2963{ _print_execution_on = print_exec; }

◆ setFailNextNonlinearConvergenceCheck()

void FEProblemBase::setFailNextNonlinearConvergenceCheck ( )
inline

Skip further residual evaluations and fail the next nonlinear convergence check(s)

Definition at line 2950 of file FEProblemBase.h.

void setFailNextSystemConvergenceCheck()
Tell the problem that the system(s) cannot be considered converged next time convergence is checked.

Referenced by Terminator::execute().

◆ setFailNextSystemConvergenceCheck()

void FEProblemBase::setFailNextSystemConvergenceCheck ( )
inline

Tell the problem that the system(s) cannot be considered converged next time convergence is checked.

Definition at line 2952 of file FEProblemBase.h.

Referenced by setFailNextNonlinearConvergenceCheck().

◆ setFunctorOutput()

void SubProblem::setFunctorOutput ( bool  set_output)
inlineinherited

Setter for debug functor output.

Definition at line 932 of file SubProblem.h.

932{ _show_functors = set_output; }
bool _show_functors
Whether to output a list of the functors used and requested (currently only at initialSetup)

◆ setIgnoreZerosInJacobian()

void FEProblemBase::setIgnoreZerosInJacobian ( bool  state)
inline

Set whether the zeros in the Jacobian should be dropped from the sparsity pattern.

Definition at line 2442 of file FEProblemBase.h.

2442{ _ignore_zeros_in_jacobian = state; }

◆ setInputParametersFEProblem()

virtual void FEProblemBase::setInputParametersFEProblem ( InputParameters parameters)
inlinevirtual

Reimplemented in FEProblem.

Definition at line 1029 of file FEProblemBase.h.

1030 {
1031 parameters.set<FEProblemBase *>("_fe_problem_base") = this;
1032 }

Referenced by FEProblem::setInputParametersFEProblem().

◆ setKernelCoverageCheck() [1/2]

void FEProblemBase::setKernelCoverageCheck ( bool  flag)
inline

Set flag to indicate whether kernel coverage checks should be performed.

This check makes sure that at least one kernel is active on all subdomains in the domain (default: true).

Definition at line 2263 of file FEProblemBase.h.

◆ setKernelCoverageCheck() [2/2]

void FEProblemBase::setKernelCoverageCheck ( CoverageCheckMode  mode)
inline

Set flag to indicate whether kernel coverage checks should be performed.

This check makes sure that at least one kernel is active on all subdomains in the domain (default: true).

Definition at line 2257 of file FEProblemBase.h.

2257{ _kernel_coverage_check = mode; }

◆ setLinearConvergenceNames()

void FEProblemBase::setLinearConvergenceNames ( const std::vector< ConvergenceName > &  convergence_names)

Sets the linear convergence object name(s) if there is one.

Definition at line 10160 of file FEProblemBase.C.

10161{
10162 if (convergence_names.size() != numLinearSystems())
10163 paramError("linear_convergence", "There must be one convergence object per linear system");
10164 _linear_convergence_names = convergence_names;
10165}

Referenced by FEProblemSolve::FEProblemSolve().

◆ setMaterialCoverageCheck() [1/2]

void FEProblemBase::setMaterialCoverageCheck ( bool  flag)
inline

Set flag to indicate whether material coverage checks should be performed.

This check makes sure that at least one material is active on all subdomains in the domain if any material is supplied. If no materials are supplied anywhere, a simulation is still considered OK as long as no properties are being requested anywhere.

Definition at line 2282 of file FEProblemBase.h.

◆ setMaterialCoverageCheck() [2/2]

void FEProblemBase::setMaterialCoverageCheck ( CoverageCheckMode  mode)
inline

Set flag to indicate whether material coverage checks should be performed.

This check makes sure that at least one material is active on all subdomains in the domain if any material is supplied. If no materials are supplied anywhere, a simulation is still considered OK as long as no properties are being requested anywhere.

Definition at line 2274 of file FEProblemBase.h.

2274{ _material_coverage_check = mode; }

◆ setMultiAppFixedPointConvergenceName()

void FEProblemBase::setMultiAppFixedPointConvergenceName ( const ConvergenceName &  convergence_name)

Sets the MultiApp fixed point convergence object name if there is one.

Definition at line 10132 of file FEProblemBase.C.

10133{
10134 _multiapp_fixed_point_convergence_name = convergence_name;
10135}

Referenced by FixedPointSolve::FixedPointSolve().

◆ setNeedToAddDefaultMultiAppFixedPointConvergence()

void FEProblemBase::setNeedToAddDefaultMultiAppFixedPointConvergence ( )
inline

Sets _need_to_add_default_multiapp_fixed_point_convergence to true.

Definition at line 766 of file FEProblemBase.h.

Referenced by FixedPointSolve::FixedPointSolve().

◆ setNeedToAddDefaultNonlinearConvergence()

void FEProblemBase::setNeedToAddDefaultNonlinearConvergence ( )
inline

Sets _need_to_add_default_nonlinear_convergence to true.

Definition at line 761 of file FEProblemBase.h.

Referenced by FEProblemSolve::FEProblemSolve().

◆ setNeedToAddDefaultSteadyStateConvergence()

void FEProblemBase::setNeedToAddDefaultSteadyStateConvergence ( )
inline

Sets _need_to_add_default_steady_state_convergence to true.

Definition at line 771 of file FEProblemBase.h.

Referenced by TransientBase::TransientBase().

◆ setNeighborSubdomainID() [1/2]

void FEProblemBase::setNeighborSubdomainID ( const Elem *  elem,
const THREAD_ID  tid 
)
virtual

Definition at line 2000 of file FEProblemBase.C.

2001{
2002 SubdomainID did = elem->subdomain_id();
2003 for (const auto i : index_range(_nl))
2004 {
2005 _assembly[tid][i]->setCurrentNeighborSubdomainID(did);
2006 if (_displaced_problem &&
2008 _displaced_problem->assembly(tid, i).setCurrentNeighborSubdomainID(did);
2009 }
2010}

◆ setNeighborSubdomainID() [2/2]

void FEProblemBase::setNeighborSubdomainID ( const Elem *  elem,
unsigned int  side,
const THREAD_ID  tid 
)
overridevirtual

Implements SubProblem.

Definition at line 1987 of file FEProblemBase.C.

1988{
1989 SubdomainID did = elem->neighbor_ptr(side)->subdomain_id();
1990 for (const auto i : index_range(_nl))
1991 {
1992 _assembly[tid][i]->setCurrentNeighborSubdomainID(did);
1993 if (_displaced_problem &&
1995 _displaced_problem->assembly(tid, i).setCurrentNeighborSubdomainID(did);
1996 }
1997}

Referenced by NonlinearSystemBase::constraintJacobians(), NonlinearSystemBase::constraintResiduals(), reinitNeighbor(), and NonlinearSystemBase::reinitNodeFace().

◆ setNonlinearConvergenceNames()

void FEProblemBase::setNonlinearConvergenceNames ( const std::vector< ConvergenceName > &  convergence_names)

Sets the nonlinear convergence object name(s) if there is one.

Definition at line 10119 of file FEProblemBase.C.

10120{
10121 if (convergence_names.size() != numNonlinearSystems())
10122 paramError("nonlinear_convergence",
10123 "There must be one convergence object per nonlinear system");
10124
10125 _nonlinear_convergence_names = convergence_names;
10126
10127 for (const auto i : make_range(numNonlinearSystems()))
10128 _nl[i]->setConvergenceName(convergence_names[i]);
10129}

Referenced by FEProblemSolve::FEProblemSolve().

◆ setNonlocalCouplingMatrix()

void FEProblemBase::setNonlocalCouplingMatrix ( )

Set custom coupling matrix for variables requiring nonlocal contribution.

Definition at line 6965 of file FEProblemBase.C.

6966{
6967 TIME_SECTION("setNonlocalCouplingMatrix", 5, "Setting Nonlocal Coupling Matrix");
6968
6969 if (_nl.size() > 1)
6970 mooseError("Nonlocal kernels are weirdly stored on the FEProblem so we don't currently support "
6971 "multiple nonlinear systems with nonlocal kernels.");
6972
6973 for (const auto nl_sys_num : index_range(_nl))
6974 {
6975 auto & nl = _nl[nl_sys_num];
6976 auto & nonlocal_cm = _nonlocal_cm[nl_sys_num];
6977 unsigned int n_vars = nl->nVariables();
6978 nonlocal_cm.resize(n_vars);
6979 const auto & vars = nl->getVariables(0);
6980 const auto & nonlocal_kernel = _nonlocal_kernels.getObjects();
6981 const auto & nonlocal_integrated_bc = _nonlocal_integrated_bcs.getObjects();
6982 for (const auto & ivar : vars)
6983 {
6984 for (const auto & kernel : nonlocal_kernel)
6985 {
6986 for (unsigned int i = ivar->number(); i < ivar->number() + ivar->count(); ++i)
6987 if (i == kernel->variable().number())
6988 for (const auto & jvar : vars)
6989 {
6990 const auto it = _var_dof_map.find(jvar->name());
6991 if (it != _var_dof_map.end())
6992 {
6993 unsigned int j = jvar->number();
6994 nonlocal_cm(i, j) = 1;
6995 }
6996 }
6997 }
6998 for (const auto & integrated_bc : nonlocal_integrated_bc)
6999 {
7000 for (unsigned int i = ivar->number(); i < ivar->number() + ivar->count(); ++i)
7001 if (i == integrated_bc->variable().number())
7002 for (const auto & jvar : vars)
7003 {
7004 const auto it = _var_dof_map.find(jvar->name());
7005 if (it != _var_dof_map.end())
7006 {
7007 unsigned int j = jvar->number();
7008 nonlocal_cm(i, j) = 1;
7009 }
7010 }
7011 }
7012 }
7013 }
7014}
std::map< std::string, std::vector< dof_id_type > > _var_dof_map
Definition SubProblem.h:682

◆ setParallelBarrierMessaging()

void FEProblemBase::setParallelBarrierMessaging ( bool  flag)
inline

Toggle parallel barrier messaging (defaults to on).

Definition at line 2290 of file FEProblemBase.h.

◆ setPostprocessorValueByName()

void FEProblemBase::setPostprocessorValueByName ( const PostprocessorName &  name,
const PostprocessorValue value,
std::size_t  t_index = 0 
)

Set the value of a PostprocessorValue.

Parameters
nameThe name of the post-processor
t_indexFlag for getting current (0), old (1), or older (2) values
Returns
The reference to the value at the given time index

Note: This method is only for setting values that already exist, the Postprocessor and PostprocessorInterface objects should be used rather than this method for creating and getting values within objects.

WARNING! This method should be used with caution. It exists to allow Transfers and other similar objects to modify Postprocessor values. It is not intended for general use.

Definition at line 5004 of file FEProblemBase.C.

5007{
5010}
void setReporterValue(const ReporterName &reporter_name, const T &value, const std::size_t time_index=0)
Method for setting Reporter values that already exist.

Referenced by PIDTransientControl::execute(), MultiAppPostprocessorTransfer::execute(), MFEMProblem::executeMFEMObjects(), PIDTransientControl::initialSetup(), joinAndFinalize(), PIDTransientControl::timestepSetup(), PicardSolve::transformPostprocessors(), SecantSolve::transformPostprocessors(), and SteffensenSolve::transformPostprocessors().

◆ setPreserveMatrixSparsityPattern()

void FEProblemBase::setPreserveMatrixSparsityPattern ( bool  preserve)

Set whether the sparsity pattern of the matrices being formed during the solve (usually the Jacobian) should be preserved.

This global setting can be retrieved by kernels, notably those using AD, to decide whether to take additional care to preserve the sparsity pattern

Definition at line 4136 of file FEProblemBase.C.

4137{
4138 if (_ignore_zeros_in_jacobian && preserve)
4140 "ignore_zeros_in_jacobian",
4141 "We likely cannot preserve the sparsity pattern if ignoring zeros in the Jacobian, which "
4142 "leads to removing those entries from the Jacobian sparsity pattern");
4144}
void paramWarning(const std::string &param, Args... args) const

◆ setResidual() [1/2]

virtual void SubProblem::setResidual ( libMesh::NumericVector< libMesh::Number > &  residual,
const THREAD_ID  tid 
)
pure virtualinherited

◆ setResidual() [2/2]

void FEProblemBase::setResidual ( NumericVector< libMesh::Number > &  residual,
const THREAD_ID  tid 
)
overridevirtual

Definition at line 2133 of file FEProblemBase.C.

2134{
2135 _assembly[tid][_current_nl_sys->number()]->setResidual(
2136 residual,
2138 getVectorTag(_nl[_current_nl_sys->number()]->residualVectorTag()));
2140 _displaced_problem->setResidual(residual, tid);
2141}

Referenced by NonlinearSystemBase::constraintResiduals().

◆ setResidualNeighbor() [1/2]

virtual void SubProblem::setResidualNeighbor ( libMesh::NumericVector< libMesh::Number > &  residual,
const THREAD_ID  tid 
)
pure virtualinherited

◆ setResidualNeighbor() [2/2]

void FEProblemBase::setResidualNeighbor ( NumericVector< libMesh::Number > &  residual,
const THREAD_ID  tid 
)
overridevirtual

Definition at line 2144 of file FEProblemBase.C.

2145{
2146 _assembly[tid][_current_nl_sys->number()]->setResidualNeighbor(
2149 _displaced_problem->setResidualNeighbor(residual, tid);
2150}

◆ setResidualObjectParamsAndLog()

void FEProblemBase::setResidualObjectParamsAndLog ( const std::string &  ro_name,
const std::string &  name,
InputParameters parameters,
const unsigned int  nl_sys_num,
const std::string &  base_name,
bool &  reinit_displaced 
)
private

Set the subproblem and system parameters for residual objects and log their addition.

Parameters
ro_nameThe type of the residual object
nameThe name of the residual object
parametersThe residual object parameters
nl_sys_numThe nonlinear system that the residual object belongs to
base_nameThe base type of the residual object, e.g. Kernel, BoundaryCondition, etc.
reinit_displacedA data member indicating whether a geometric concept should be reinit'd for the displaced problem. Examples of valid data members to pass in are _reinit_displaced_elem and _reinit_displaced_face

Definition at line 3147 of file FEProblemBase.C.

3153{
3154 if (_displaced_problem && parameters.get<bool>("use_displaced_mesh"))
3155 {
3156 parameters.set<SubProblem *>("_subproblem") = _displaced_problem.get();
3157 parameters.set<SystemBase *>("_sys") = &_displaced_problem->solverSys(nl_sys_num);
3158 reinit_displaced = true;
3159 }
3160 else
3161 {
3162 if (_displaced_problem == nullptr && parameters.get<bool>("use_displaced_mesh"))
3163 {
3164 // We allow Kernels to request that they use_displaced_mesh,
3165 // but then be overridden when no displacements variables are
3166 // provided in the Mesh block. If that happened, update the value
3167 // of use_displaced_mesh appropriately for this Kernel.
3168 if (parameters.have_parameter<bool>("use_displaced_mesh"))
3169 parameters.set<bool>("use_displaced_mesh") = false;
3170 }
3171
3172 parameters.set<SubProblem *>("_subproblem") = this;
3173 parameters.set<SystemBase *>("_sys") = _nl[nl_sys_num].get();
3174 }
3175
3176 logAdd(base_name, name, ro_name, parameters);
3177}

Referenced by addBoundaryCondition(), addHDGKernel(), and addKernel().

◆ setRestartFile()

void FEProblemBase::setRestartFile ( const std::string &  file_name)

Communicate to the Resurector the name of the restart filer.

Parameters
file_nameThe file name for restarting from

Definition at line 9588 of file FEProblemBase.C.

9589{
9590 if (_app.isRecovering())
9591 {
9592 mooseInfo("Restart file ", file_name, " is NOT being used since we are performing recovery.");
9593 }
9594 else
9595 {
9596 _app.setRestart(true);
9598 mooseInfo("Using ", file_name, " for restart.");
9599 }
9600}
void mooseInfo(Args &&... args)
Emit an informational message with the given stringified, concatenated args.
Definition MooseError.h:401
void setRestart(bool value)
Sets the restart/recover flags.
Definition MooseApp.C:2884
void setRestartRecoverFileBase(const std::string &file_base)
mutator for recover_base (set by RecoverBaseAction)
Definition MooseApp.h:512

Referenced by Executioner::Executioner(), Executioner::Executioner(), and FEProblemBase().

◆ setSNESMFReuseBase()

void FEProblemBase::setSNESMFReuseBase ( bool  reuse,
bool  set_by_user 
)
inline

If or not to reuse the base vector for matrix-free calculation.

Definition at line 2643 of file FEProblemBase.h.

2644 {
2646 }

Referenced by FEProblemSolve::FEProblemSolve().

◆ setSteadyStateConvergenceName()

void FEProblemBase::setSteadyStateConvergenceName ( const ConvergenceName &  convergence_name)

Sets the steady-state detection convergence object name if there is one.

Definition at line 10138 of file FEProblemBase.C.

10139{
10140 _steady_state_convergence_name = convergence_name;
10141}

Referenced by TransientBase::TransientBase().

◆ setUDotDotOldRequested()

virtual void FEProblemBase::setUDotDotOldRequested ( const bool  u_dotdot_old_requested)
inlinevirtual

Set boolean flag to true to store old solution second time derivative.

Definition at line 2691 of file FEProblemBase.h.

2692 {
2693 _u_dotdot_old_requested = u_dotdot_old_requested;
2694 }

Referenced by CentralDifference::CentralDifference(), and NewmarkBeta::NewmarkBeta().

◆ setUDotDotRequested()

virtual void FEProblemBase::setUDotDotRequested ( const bool  u_dotdot_requested)
inlinevirtual

Set boolean flag to true to store solution second time derivative.

Definition at line 2679 of file FEProblemBase.h.

2680 {
2681 _u_dotdot_requested = u_dotdot_requested;
2682 }

Referenced by CentralDifference::CentralDifference(), and NewmarkBeta::NewmarkBeta().

◆ setUDotOldRequested()

virtual void FEProblemBase::setUDotOldRequested ( const bool  u_dot_old_requested)
inlinevirtual

Set boolean flag to true to store old solution time derivative.

Definition at line 2685 of file FEProblemBase.h.

2686 {
2687 _u_dot_old_requested = u_dot_old_requested;
2688 }

Referenced by CentralDifference::CentralDifference(), and NewmarkBeta::NewmarkBeta().

◆ setUDotRequested()

virtual void FEProblemBase::setUDotRequested ( const bool  u_dot_requested)
inlinevirtual

Set boolean flag to true to store solution time derivative.

Definition at line 2676 of file FEProblemBase.h.

2676{ _u_dot_requested = u_dot_requested; }

Referenced by TimeIntegrator::TimeIntegrator().

◆ setupDampers()

void FEProblemBase::setupDampers ( )

Definition at line 5829 of file FEProblemBase.C.

5830{
5831 for (auto & nl : _nl)
5832 nl->setupDampers();
5833}

◆ setVariableAllDoFMap()

void FEProblemBase::setVariableAllDoFMap ( const std::vector< const MooseVariableFEBase * > &  moose_vars)

Definition at line 1882 of file FEProblemBase.C.

1883{
1884 for (unsigned int i = 0; i < moose_vars.size(); ++i)
1885 {
1886 VariableName var_name = moose_vars[i]->name();
1887 auto & sys = _solver_systems[moose_vars[i]->sys().number()];
1888 sys->setVariableGlobalDoFs(var_name);
1889 _var_dof_map[var_name] = sys->getVariableGlobalDoFs();
1890 }
1891}

Referenced by meshChanged().

◆ setVectorPostprocessorValueByName()

void FEProblemBase::setVectorPostprocessorValueByName ( const std::string &  object_name,
const std::string &  vector_name,
const VectorPostprocessorValue value,
std::size_t  t_index = 0 
)

Set the value of a VectorPostprocessor vector.

Parameters
object_nameThe name of the VPP object
vector_nameThe name of the declared vector
valueThe data to apply to the vector
t_indexFlag for getting current (0), old (1), or older (2) values

Definition at line 5030 of file FEProblemBase.C.

5034{
5036 VectorPostprocessorReporterName(object_name, vector_name), value, t_index);
5037}

◆ setVerboseProblem()

void FEProblemBase::setVerboseProblem ( bool  verbose)

Make the problem be verbose.

Definition at line 10308 of file FEProblemBase.C.

10309{
10310 _verbose_setup = verbose ? "true" : "false";
10311 _verbose_multiapps = verbose;
10312 _verbose_restore = verbose;
10313}

Referenced by PhysicsBase::initializePhysics().

◆ shouldPrintExecution()

bool FEProblemBase::shouldPrintExecution ( const THREAD_ID  tid) const

Check whether the problem should output execution orders at this time.

Definition at line 10250 of file FEProblemBase.C.

10251{
10252 // For now, only support printing from thread 0
10253 if (tid != 0)
10254 return false;
10255
10258 return true;
10259 else
10260 return false;
10261}
const ExecFlagType EXEC_ALWAYS
Definition Moose.C:54

Referenced by joinAndFinalize(), ComputeLinearFVElementalThread::printBlockExecutionInformation(), ComputeLinearFVFaceThread::printBlockExecutionInformation(), ComputeDiracThread::printBlockExecutionInformation(), ComputeIndicatorThread::printBlockExecutionInformation(), ComputeMarkerThread::printBlockExecutionInformation(), ComputeUserObjectsThread::printBlockExecutionInformation(), NonlinearThread::printBlockExecutionInformation(), NonlinearThread::printBoundaryExecutionInformation(), ComputeFVInitialConditionThread::printGeneralExecutionInformation(), ComputeInitialConditionThread::printGeneralExecutionInformation(), ComputeLinearFVElementalThread::printGeneralExecutionInformation(), ComputeLinearFVFaceThread::printGeneralExecutionInformation(), ComputeDiracThread::printGeneralExecutionInformation(), ComputeElemDampingThread::printGeneralExecutionInformation(), ComputeIndicatorThread::printGeneralExecutionInformation(), ComputeMarkerThread::printGeneralExecutionInformation(), ComputeNodalDampingThread::printGeneralExecutionInformation(), ComputeNodalKernelBCJacobiansThread::printGeneralExecutionInformation(), ComputeNodalKernelBcsThread::printGeneralExecutionInformation(), ComputeNodalKernelJacobiansThread::printGeneralExecutionInformation(), ComputeNodalKernelsThread::printGeneralExecutionInformation(), ComputeNodalUserObjectsThread::printGeneralExecutionInformation(), ComputeUserObjectsThread::printGeneralExecutionInformation(), NonlinearThread::printGeneralExecutionInformation(), and ComputeThreadedGeneralUserObjectsThread::printGeneralExecutionInformation().

◆ shouldSolve()

bool FEProblemBase::shouldSolve ( ) const
inline

◆ shouldUpdateSolution()

bool FEProblemBase::shouldUpdateSolution ( )
virtual

Check to see whether the problem should update the solution.

Returns
true if the problem should update the solution, false otherwise

Definition at line 8674 of file FEProblemBase.C.

8675{
8676 return false;
8677}

Referenced by computePostCheck(), and NonlinearSystem::solve().

◆ showFunctorRequestors()

void SubProblem::showFunctorRequestors ( ) const
privateinherited

Lists all functors and all the objects that requested them.

Definition at line 1278 of file SubProblem.C.

1279{
1280 for (const auto & [functor, requestors] : _functor_to_requestors)
1281 {
1282 _console << "[DBG] Requestors for wrapped functor "
1283 << std::regex_replace(functor, std::regex("wraps_"), "") << std::endl;
1284 _console << "[DBG] " << MooseUtils::join(requestors, " ") << std::endl;
1285 }
1286}

Referenced by SubProblem::initialSetup().

◆ showFunctors()

void SubProblem::showFunctors ( ) const
privateinherited

Lists all functors in the problem.

Definition at line 1266 of file SubProblem.C.

1267{
1268 _console << "[DBG] Wrapped functors found in Subproblem" << std::endl;
1269 std::string functor_names = "[DBG] ";
1270 for (const auto & functor_pair : _functors[0])
1271 functor_names += std::regex_replace(functor_pair.first, std::regex("wraps_"), "") + " ";
1272 if (functor_names.size())
1273 functor_names.pop_back();
1274 _console << functor_names << std::endl;
1275}

Referenced by SubProblem::initialSetup().

◆ showInvalidSolutionConsole()

bool FEProblemBase::showInvalidSolutionConsole ( ) const
inline

Whether or not to print out the invalid solutions summary table in console.

Definition at line 2459 of file FEProblemBase.h.

Referenced by SolverSystem::checkInvalidSolution().

◆ sideUOInterfaceMatPropIntegrityCheck()

bool FEProblemBase::sideUOInterfaceMatPropIntegrityCheck ( ) const
inline
Returns
whether to perform an integrity check for side user objects consuming interface material properties

Definition at line 2810 of file FEProblemBase.h.

2811 {
2813 }

Referenced by SideUserObject::initialSetup().

◆ sizeZeroes()

void FEProblemBase::sizeZeroes ( unsigned int  size,
const THREAD_ID  tid 
)
virtual

Definition at line 2335 of file FEProblemBase.C.

2336{
2337 mooseDoOnce(mooseWarning(
2338 "This function is deprecated and no longer performs any function. Please do not call it."));
2339}

◆ skipExceptionCheck()

void FEProblemBase::skipExceptionCheck ( bool  skip_exception_check)
inline

Set a flag that indicates if we want to skip exception and stop solve.

Definition at line 2656 of file FEProblemBase.h.

2657 {
2658 _skip_exception_check = skip_exception_check;
2659 }

Referenced by FEProblemSolve::FEProblemSolve().

◆ skipNextForwardSolutionCopyToOld()

void FEProblemBase::skipNextForwardSolutionCopyToOld ( )

Prevents the copy of the solution vector to the old solution vector in each system.

Old -> Older is still performed This is useful for MultiApps fixed point iterations

Definition at line 7476 of file FEProblemBase.C.

7477{
7478 for (auto & sys : _solver_systems)
7479 sys->skipNextSolutionToOldCopy();
7480 _aux->skipNextSolutionToOldCopy();
7481}

Referenced by FullSolveMultiApp::solveStep().

◆ solve()

void FEProblemBase::solve ( const unsigned int  nl_sys_num)
virtual

Reimplemented in EigenProblem, ExternalProblem, and DumpObjectsProblem.

Definition at line 7236 of file FEProblemBase.C.

7237{
7238 TIME_SECTION("solve", 1, "Solving", false);
7239
7240 setCurrentNonlinearSystem(nl_sys_num);
7241
7242 // This prevents stale dof indices from lingering around and possibly leading to invalid reads
7243 // and writes. Dof indices may be made stale through operations like mesh adaptivity
7246 _displaced_problem->clearAllDofIndices();
7247
7248 // Setup the output system for printing linear/nonlinear iteration information and some solver
7249 // settings, including setting matrix prefixes. This must occur before petscSetOptions
7251
7252#if PETSC_RELEASE_LESS_THAN(3, 12, 0)
7254 _petsc_options, _solver_params); // Make sure the PETSc options are setup for this app
7255#else
7256 // Now this database will be the default
7257 // Each app should have only one database
7258 if (!_app.isUltimateMaster())
7259 LibmeshPetscCall(PetscOptionsPush(_petsc_option_data_base));
7260 // We did not add PETSc options to database yet
7262 {
7263 // Insert options for all systems all at once
7266 }
7267#endif
7268
7269 // set up DM which is required if use a field split preconditioner
7270 // We need to setup DM every "solve()" because libMesh destroy SNES after solve()
7271 // Do not worry, DM setup is very cheap
7273
7275
7276 // reset flag so that residual evaluation does not get skipped
7277 // and the next non-linear iteration does not automatically fail with
7278 // "DIVERGED_NANORINF", when we throw an exception and stop solve
7280
7281 if (_solve)
7282 {
7285 }
7286
7287 // sync solutions in displaced problem
7289 _displaced_problem->syncSolutions();
7290
7291#if !PETSC_RELEASE_LESS_THAN(3, 12, 0)
7292 if (!_app.isUltimateMaster())
7293 LibmeshPetscCall(PetscOptionsPop());
7294#endif
7295}
virtual void possiblyRebuildGeomSearchPatches()
virtual void solve() override=0
Solve the system (using libMesh magic)
void setupDM()
Setup the PETSc DM object (when appropriate)
void update()
Update the system (doing libMesh magic)
void petscSetOptions(const PetscOptions &po, const SolverParams &solver_params, FEProblemBase *const problem=nullptr)
A function for setting the PETSc options in PETSc from the options supplied to MOOSE.

Referenced by EigenExecutionerBase::inversePowerIteration(), EigenExecutionerBase::nonlinearSolve(), FEProblemSolve::solve(), and AB2PredictorCorrector::step().

◆ solveLinearSystem()

void FEProblemBase::solveLinearSystem ( const unsigned int  linear_sys_num,
const Moose::PetscSupport::PetscOptions po = nullptr 
)
virtual

Build and solve a linear system.

Parameters
linear_sys_numThe number of the linear system (1,..,num. of lin. systems)
poThe petsc options for the solve, if not supplied, the defaults are used

Reimplemented in DumpObjectsProblem.

Definition at line 7393 of file FEProblemBase.C.

7395{
7396 TIME_SECTION("solve", 1, "Solving", false);
7397
7398 setCurrentLinearSystem(linear_sys_num);
7399
7400 const Moose::PetscSupport::PetscOptions & options = po ? *po : _petsc_options;
7401 auto & solver_params = _solver_params[numNonlinearSystems() + linear_sys_num];
7402
7403 // Set custom convergence criteria
7405
7406#if PETSC_RELEASE_LESS_THAN(3, 12, 0)
7407 LibmeshPetscCall(Moose::PetscSupport::petscSetOptions(
7408 options, solver_params)); // Make sure the PETSc options are setup for this app
7409#else
7410 // Now this database will be the default
7411 // Each app should have only one database
7412 if (!_app.isUltimateMaster())
7413 LibmeshPetscCall(PetscOptionsPush(_petsc_option_data_base));
7414
7415 // We did not add PETSc options to database yet
7417 {
7418 Moose::PetscSupport::petscSetOptions(options, solver_params, this);
7420 }
7421#endif
7422
7423 if (_solve)
7425
7426#if !PETSC_RELEASE_LESS_THAN(3, 12, 0)
7427 if (!_app.isUltimateMaster())
7428 LibmeshPetscCall(PetscOptionsPop());
7429#endif
7430}
virtual void solve() override
Solve the system (using libMesh magic)
A struct for storing the various types of petsc options and values.

Referenced by FEProblemSolve::solve().

◆ solverParams() [1/2]

SolverParams & FEProblemBase::solverParams ( unsigned int  solver_sys_num = 0)

Get the solver parameters.

Definition at line 9620 of file FEProblemBase.C.

9621{
9622 mooseAssert(solver_sys_num < numSolverSystems(),
9623 "Solver system number '" << solver_sys_num << "' is out of bounds. We have '"
9624 << numSolverSystems() << "' solver systems");
9625 return _solver_params[solver_sys_num];
9626}

Referenced by NonlinearEigenSystem::attachPreconditioner(), SolverSystem::compute(), SlepcEigenSolverConfiguration::configure_solver(), EigenProblemSolve::EigenProblemSolve(), ExplicitTimeIntegrator::ExplicitTimeIntegrator(), FEProblemSolve::FEProblemSolve(), EigenProblem::init(), init(), ExplicitTimeIntegrator::init(), EigenProblemSolve::initialSetup(), EigenProblem::isNonlinearEigenvalueSolver(), Moose::SlepcSupport::mooseSlepcEigenFormFunctionA(), Moose::SlepcSupport::mooseSlepcEigenFormFunctionAB(), Moose::SlepcSupport::mooseSlepcEigenFormFunctionB(), Moose::SlepcSupport::mooseSlepcEigenFormJacobianA(), MooseStaticCondensationPreconditioner::MooseStaticCondensationPreconditioner(), ConsoleUtils::outputExecutionInformation(), PhysicsBasedPreconditioner::PhysicsBasedPreconditioner(), NonlinearSystem::residualAndJacobianTogether(), Moose::SlepcSupport::setEigenProblemSolverParams(), Moose::PetscSupport::setLineSearchFromParams(), Moose::PetscSupport::setMFFDTypeFromParams(), Moose::PetscSupport::setSinglePetscOption(), Moose::PetscSupport::setSolveTypeFromParams(), NonlinearSystemBase::shouldEvaluatePreSMOResidual(), EigenProblem::solve(), solverParams(), solverTypeString(), EigenProblem::solverTypeString(), and Moose::SlepcSupport::storeSolveType().

◆ solverParams() [2/2]

const SolverParams & FEProblemBase::solverParams ( unsigned int  solver_sys_num = 0) const

const version

Definition at line 9629 of file FEProblemBase.C.

9630{
9631 return const_cast<FEProblemBase *>(this)->solverParams(solver_sys_num);
9632}

◆ solverSysNum()

unsigned int FEProblemBase::solverSysNum ( const SolverSystemName &  solver_sys_name) const
overridevirtual
Returns
the solver system number corresponding to the provided solver_sys_name

Implements SubProblem.

Definition at line 7201 of file FEProblemBase.C.

7202{
7203 std::istringstream ss(solver_sys_name);
7204 unsigned int solver_sys_num;
7205 if (!(ss >> solver_sys_num) || !ss.eof())
7206 {
7207 const auto & search = _solver_sys_name_to_num.find(solver_sys_name);
7208 if (search == _solver_sys_name_to_num.end())
7209 mooseError("The solver system number was requested for system '" + solver_sys_name,
7210 "' but this system does not exist in the Problem. Systems can be added to the "
7211 "problem using the 'nl_sys_names'/'linear_sys_names' parameter.\nSystems in the "
7212 "Problem: " +
7214 solver_sys_num = search->second;
7215 }
7216
7217 return solver_sys_num;
7218}

Referenced by addVariable(), getSystemBase(), PhysicsBase::initializePhysics(), MultiSystemSolveObject::MultiSystemSolveObject(), and DisplacedProblem::solverSysNum().

◆ solverSystemConverged()

bool FEProblemBase::solverSystemConverged ( const unsigned int  sys_num)
overridevirtual
Returns
whether the given solver system sys_num is converged

Reimplemented from SubProblem.

Reimplemented in EigenProblem.

Definition at line 7433 of file FEProblemBase.C.

7434{
7435 if (_solve)
7436 return _solver_systems[sys_num]->converged();
7437 else
7438 return true;
7439}

◆ solverTypeString()

std::string FEProblemBase::solverTypeString ( unsigned int  solver_sys_num = 0)
virtual

Return solver type as a human readable string.

Reimplemented in MFEMProblem, and EigenProblem.

Definition at line 10429 of file FEProblemBase.C.

10430{
10431 return Moose::stringify(solverParams(solver_sys_num)._type);
10432}

Referenced by ConsoleUtils::outputExecutionInformation().

◆ startedInitialSetup()

virtual bool FEProblemBase::startedInitialSetup ( )
inlinevirtual

Returns true if we are in or beyond the initialSetup stage.

Definition at line 567 of file FEProblemBase.h.

567{ return _started_initial_setup; }

Referenced by MaterialBase::checkExecutionStage(), MaterialPropertyInterface::checkExecutionStage(), and NEML2ModelExecutor::checkExecutionStage().

◆ storeBoundaryDelayedCheckMatProp()

void SubProblem::storeBoundaryDelayedCheckMatProp ( const std::string &  requestor,
BoundaryID  boundary_id,
const std::string &  name 
)
virtualinherited

Adds to a map based on boundary ids of material properties to validate.

Parameters
requestorThe MOOSE object name requesting the material property
boundary_idThe block id for the MaterialProperty
nameThe name of the property

Definition at line 614 of file SubProblem.C.

617{
618 _map_boundary_material_props_check[boundary_id].insert(std::make_pair(requestor, name));
619}

Referenced by MaterialPropertyInterface::checkMaterialProperty().

◆ storeBoundaryMatPropName()

void SubProblem::storeBoundaryMatPropName ( BoundaryID  boundary_id,
const std::string &  name 
)
virtualinherited

Adds the given material property to a storage map based on boundary ids.

This is method is called from within the Material class when the property is first registered.

Parameters
boundary_idThe block id for the MaterialProperty
nameThe name of the property

Definition at line 588 of file SubProblem.C.

589{
590 _map_boundary_material_props[boundary_id].insert(name);
591}

Referenced by MaterialBase::registerPropName().

◆ storeBoundaryZeroMatProp()

void SubProblem::storeBoundaryZeroMatProp ( BoundaryID  boundary_id,
const MaterialPropertyName &  name 
)
virtualinherited

Adds to a map based on boundary ids of material properties for which a zero value can be returned.

Thes properties are optional and will not trigger a missing material property error.

Parameters
boundary_idThe block id for the MaterialProperty
nameThe name of the property

Definition at line 600 of file SubProblem.C.

601{
602 _zero_boundary_material_props[boundary_id].insert(name);
603}

Referenced by MaterialBase::storeBoundaryZeroMatProp().

◆ storeSubdomainDelayedCheckMatProp()

void SubProblem::storeSubdomainDelayedCheckMatProp ( const std::string &  requestor,
SubdomainID  block_id,
const std::string &  name 
)
virtualinherited

Adds to a map based on block ids of material properties to validate.

Parameters
block_idThe block id for the MaterialProperty
nameThe name of the property

Definition at line 606 of file SubProblem.C.

609{
610 _map_block_material_props_check[block_id].insert(std::make_pair(requestor, name));
611}

Referenced by MaterialPropertyInterface::checkMaterialProperty().

◆ storeSubdomainMatPropName()

void SubProblem::storeSubdomainMatPropName ( SubdomainID  block_id,
const std::string &  name 
)
virtualinherited

Adds the given material property to a storage map based on block ids.

This is method is called from within the Material class when the property is first registered.

Parameters
block_idThe block id for the MaterialProperty
nameThe name of the property

Definition at line 582 of file SubProblem.C.

583{
584 _map_block_material_props[block_id].insert(name);
585}

Referenced by MaterialBase::registerPropName().

◆ storeSubdomainZeroMatProp()

void SubProblem::storeSubdomainZeroMatProp ( SubdomainID  block_id,
const MaterialPropertyName &  name 
)
virtualinherited

Adds to a map based on block ids of material properties for which a zero value can be returned.

Thes properties are optional and will not trigger a missing material property error.

Parameters
block_idThe block id for the MaterialProperty
nameThe name of the property

Definition at line 594 of file SubProblem.C.

595{
596 _zero_block_material_props[block_id].insert(name);
597}

Referenced by MaterialBase::storeSubdomainZeroMatProp().

◆ subdomainSetup()

void FEProblemBase::subdomainSetup ( SubdomainID  subdomain,
const THREAD_ID  tid 
)
virtual

Definition at line 2676 of file FEProblemBase.C.

2677{
2678 _all_materials.subdomainSetup(subdomain, tid);
2679 // Call the subdomain methods of the output system, these are not threaded so only call it once
2680 if (tid == 0)
2682
2683 for (auto & nl : _nl)
2684 nl->subdomainSetup(subdomain, tid);
2685
2686 // FIXME: call displaced_problem->subdomainSetup() ?
2687 // When adding possibility with materials being evaluated on displaced mesh
2688}
virtual void subdomainSetup(THREAD_ID tid=0) const override
void subdomainSetup()
Calls the subdomainSetup function for each of the output objects.

Referenced by ThreadedFaceLoop< RangeType >::subdomainChanged(), ComputeDiracThread::subdomainChanged(), ComputeIndicatorThread::subdomainChanged(), ComputeMarkerThread::subdomainChanged(), ComputeMaterialsObjectThread::subdomainChanged(), ComputeUserObjectsThread::subdomainChanged(), and NonlinearThread::subdomainChanged().

◆ subspaceDim()

unsigned int FEProblemBase::subspaceDim ( const std::string &  prefix) const
inline

Dimension of the subspace spanned by vectors with a given prefix.

Parameters
prefixPrefix of the vectors spanning the subspace.

Definition at line 2332 of file FEProblemBase.h.

2333 {
2334 if (_subspace_dim.count(prefix))
2335 return _subspace_dim.find(prefix)->second;
2336 else
2337 return 0;
2338 }

Referenced by computeNearNullSpace(), computeNullSpace(), and computeTransposeNullSpace().

◆ swapBackMaterials()

void FEProblemBase::swapBackMaterials ( const THREAD_ID  tid)
virtual

Definition at line 4545 of file FEProblemBase.C.

4546{
4547 auto && elem = _assembly[tid][0]->elem();
4549}
void swapBack(const Elem &elem, unsigned int side=0)
material properties for given element (and possible side)

Referenced by NodalPatchRecovery::compute(), LineMaterialSamplerBase< T >::execute(), ComputeElemAuxVarsThread< AuxKernelType >::onElement(), ComputeIndicatorThread::onElement(), ComputeMarkerThread::onElement(), ComputeUserObjectsThread::onElement(), and NonlinearThread::onElement().

◆ swapBackMaterialsFace()

void FEProblemBase::swapBackMaterialsFace ( const THREAD_ID  tid)
virtual

◆ swapBackMaterialsNeighbor()

void FEProblemBase::swapBackMaterialsNeighbor ( const THREAD_ID  tid)
virtual

Definition at line 4560 of file FEProblemBase.C.

4561{
4562 // NOTE: this will not work with h-adaptivity
4563 const Elem * neighbor = _assembly[tid][0]->neighbor();
4564 unsigned int neighbor_side =
4565 neighbor ? neighbor->which_neighbor_am_i(_assembly[tid][0]->elem()) : libMesh::invalid_uint;
4566
4567 if (!neighbor)
4568 {
4569 if (haveFV())
4570 {
4571 // If neighbor is null, then we're on the neighbor side of a mesh boundary, e.g. we're off
4572 // the mesh in ghost-land. If we're using the finite volume method, then variable values and
4573 // consequently material properties have well-defined values in this ghost region outside of
4574 // the mesh and we really do want to reinit our neighbor materials in this case. Since we're
4575 // off in ghost land it's safe to do swaps with `MaterialPropertyStorage` using the elem and
4576 // elem_side keys
4577 neighbor = _assembly[tid][0]->elem();
4578 neighbor_side = _assembly[tid][0]->side();
4579 mooseAssert(neighbor, "We should have an appropriate value for elem coming from Assembly");
4580 }
4581 else
4582 mooseError("neighbor is null in Assembly!");
4583 }
4584
4585 _neighbor_material_props.getMaterialData(tid).swapBack(*neighbor, neighbor_side);
4586}

Referenced by ComputeUserObjectsThread::onInterface(), NonlinearThread::onInterface(), ComputeIndicatorThread::onInternalSide(), ComputeUserObjectsThread::onInternalSide(), NonlinearThread::onInternalSide(), and ComputeElemAuxBcsThread< AuxKernelType >::operator()().

◆ systemBaseAuxiliary() [1/2]

const SystemBase & FEProblemBase::systemBaseAuxiliary ( ) const
overridevirtual

Return the auxiliary system object as a base class reference.

Implements SubProblem.

Definition at line 9970 of file FEProblemBase.C.

9971{
9972 return *_aux;
9973}

Referenced by PhysicsBase::copyVariablesFromMesh(), and MFEMProblem::getAuxVariableNames().

◆ systemBaseAuxiliary() [2/2]

SystemBase & FEProblemBase::systemBaseAuxiliary ( )
overridevirtual

Implements SubProblem.

Definition at line 9976 of file FEProblemBase.C.

9977{
9978 return *_aux;
9979}

◆ systemBaseLinear() [1/2]

const SystemBase & FEProblemBase::systemBaseLinear ( unsigned int  sys_num) const
overridevirtual

Get a constant base class reference to a linear system.

Parameters
sys_numThe number of the linear system

Implements SubProblem.

Definition at line 9938 of file FEProblemBase.C.

9939{
9940 mooseAssert(sys_num < _linear_systems.size(),
9941 "System number greater than the number of linear systems");
9942 return *_linear_systems[sys_num];
9943}

◆ systemBaseLinear() [2/2]

SystemBase & FEProblemBase::systemBaseLinear ( unsigned int  sys_num)
overridevirtual

Get a non-constant base class reference to a linear system.

Parameters
sys_numThe number of the linear system

Implements SubProblem.

Definition at line 9946 of file FEProblemBase.C.

9947{
9948 mooseAssert(sys_num < _linear_systems.size(),
9949 "System number greater than the number of linear systems");
9950 return *_linear_systems[sys_num];
9951}

◆ systemBaseNonlinear() [1/2]

const SystemBase & FEProblemBase::systemBaseNonlinear ( const unsigned int  sys_num) const
overridevirtual

Return the nonlinear system object as a base class reference given the system number.

Implements SubProblem.

Definition at line 9924 of file FEProblemBase.C.

9925{
9926 mooseAssert(sys_num < _nl.size(), "System number greater than the number of nonlinear systems");
9927 return *_nl[sys_num];
9928}

◆ systemBaseNonlinear() [2/2]

SystemBase & FEProblemBase::systemBaseNonlinear ( const unsigned int  sys_num)
overridevirtual

Implements SubProblem.

Definition at line 9931 of file FEProblemBase.C.

9932{
9933 mooseAssert(sys_num < _nl.size(), "System number greater than the number of nonlinear systems");
9934 return *_nl[sys_num];
9935}

◆ systemBaseSolver() [1/2]

const SystemBase & FEProblemBase::systemBaseSolver ( const unsigned int  sys_num) const
overridevirtual

Return the solver system object as a base class reference given the system number.

Implements SubProblem.

Definition at line 9954 of file FEProblemBase.C.

9955{
9956 mooseAssert(sys_num < _solver_systems.size(),
9957 "System number greater than the number of solver systems");
9958 return *_solver_systems[sys_num];
9959}

◆ systemBaseSolver() [2/2]

SystemBase & FEProblemBase::systemBaseSolver ( const unsigned int  sys_num)
overridevirtual

Implements SubProblem.

Definition at line 9962 of file FEProblemBase.C.

9963{
9964 mooseAssert(sys_num < _solver_systems.size(),
9965 "System number greater than the number of solver systems");
9966 return *_solver_systems[sys_num];
9967}

◆ systemNumForVariable()

unsigned int FEProblemBase::systemNumForVariable ( const VariableName &  variable_name) const
Returns
the system number for the provided variable_name Can be nonlinear or auxiliary

Definition at line 7221 of file FEProblemBase.C.

7222{
7223 for (const auto & solver_sys : _solver_systems)
7224 if (solver_sys->hasVariable(variable_name))
7225 return solver_sys->number();
7226 mooseAssert(_aux, "Should have an auxiliary system");
7227 if (_aux->hasVariable(variable_name))
7228 return _aux->number();
7229
7230 mooseError("Variable '",
7231 variable_name,
7232 "' was not found in any solver (nonlinear/linear) or auxiliary system");
7233}

Referenced by projectFunctionOnCustomRange(), and ElementSubdomainModifierBase::restoreOverriddenDofValues().

◆ terminateSolve()

virtual void Problem::terminateSolve ( )
inlinevirtualinherited

Allow objects to request clean termination of the solve.

Definition at line 37 of file Problem.h.

37{ _termination_requested = true; };

Referenced by Terminator::execute(), WebServerControl::execute(), and TerminateChainControl::terminate().

◆ theWarehouse()

TheWarehouse & FEProblemBase::theWarehouse ( ) const
inline

Definition at line 2638 of file FEProblemBase.h.

2638{ return _app.theWarehouse(); }
TheWarehouse & theWarehouse()
Definition MooseApp.h:143

Referenced by NonlinearSystemBase::addBoundaryCondition(), NonlinearSystemBase::addDGKernel(), NonlinearSystemBase::addDiracKernel(), addFVGradientMethod(), addFVInterpolationMethod(), NonlinearSystemBase::addHDGKernel(), NonlinearSystemBase::addInterfaceKernel(), NonlinearSystemBase::addKernel(), NonlinearSystemBase::addNodalKernel(), addObject(), NonlinearSystemBase::addScalarKernel(), NonlinearSystemBase::addSplit(), addUserObject(), NonlinearSystemBase::checkKernelCoverage(), checkUserObjectJacobianRequirement(), checkUserObjects(), ComputeResidualAndJacobianThread::compute(), NonlinearSystemBase::computeJacobianInternal(), NonlinearSystemBase::computeResidualAndJacobianInternal(), NonlinearSystemBase::computeResidualInternal(), LinearSystem::containsTimeKernel(), customSetup(), ComputeResidualAndJacobianThread::determineObjectWarehouses(), ComputeResidualThread::determineObjectWarehouses(), MFEMProblem::executeMFEMObjects(), executeSamplers(), ComputeLinearFVElementalThread::fetchBlockSystemContributionObjects(), ComputeLinearFVFaceThread::fetchBlockSystemContributionObjects(), getDistribution(), getFVGradientMethod(), getFVInterpolationMethod(), NonlinearSystemBase::getFVSetupObjects(), getKokkosUserObject(), MFEMProblem::getMFEMObject(), getMortarUserObjects(), getPositionsObject(), getPostprocessorObjectByName(), getSampler(), CompositionDT::getTimeSteppers(), getUOQuery(), getUserObject(), getUserObjectBase(), getVectorPostprocessorObjectByName(), hasDistribution(), hasFVGradientMethod(), hasFVInterpolationMethod(), MFEMProblem::hasMFEMObject(), hasUserObject(), VectorPostprocessorInterface::hasVectorPostprocessorByName(), MFEMProblem::initialSetup(), BoundaryLinearFVFluxIntegral::initialSetup(), SideFVFluxBCIntegral::initialSetup(), LinearSystem::initialSetup(), ExplicitTimeIntegrator::initialSetup(), AdvancedOutput::initPostprocessorOrVectorPostprocessorLists(), needBoundaryMaterialOnSide(), needInterfaceMaterialOnSide(), needInternalNeighborSideMaterial(), JSONOutput::outputReporters(), BlockRestrictionDebugOutput::printBlockRestrictionGroups(), BlockRestrictionDebugOutput::printBlockRestrictionMap(), BlockRestrictionDebugOutput::printBoundaryRestrictionGroups(), ComputeLinearFVElementalThread::setupSystemContributionObjects(), ComputeLinearFVFaceThread::setupSystemContributionObjects(), and timestepSetup().

◆ time()

virtual Real & FEProblemBase::time ( ) const
inlinevirtual

◆ timedSectionName()

std::string PerfGraphInterface::timedSectionName ( const std::string &  section_name) const
protectedinherited
Returns
The name of the timed section with the name section_name.

Optionally adds a prefix if one is defined.

Definition at line 55 of file PerfGraphInterface.C.

56{
57 return _prefix.empty() ? "" : (_prefix + "::") + section_name;
58}
const std::string _prefix
A prefix to use for all sections.

Referenced by PerfGraphInterface::registerTimedSection(), and PerfGraphInterface::registerTimedSection().

◆ timeOld()

virtual Real & FEProblemBase::timeOld ( ) const
inlinevirtual

◆ timeOlder()

virtual Real & FEProblemBase::timeOlder ( ) const
inlinevirtual

The time two steps back.

The solution keeps this state, so a multi-step integrator can ask for it, and a functor evaluated alongside that solution has to be able to ask for the time it belongs to. Only meaningful once two steps have been taken; before that it holds the start time, which is what timeOld() does at the first step too.

Definition at line 580 of file FEProblemBase.h.

580{ return _time_older; }

Referenced by getTimeFromStateArg().

◆ timeStep()

virtual int & FEProblemBase::timeStep ( ) const
inlinevirtual

◆ timestepSetup()

void FEProblemBase::timestepSetup ( )
overridevirtual

Reimplemented from SubProblem.

Definition at line 1675 of file FEProblemBase.C.

1676{
1678
1679 if (_t_step > 1 && _num_grid_steps)
1680 {
1681 libMesh::MeshRefinement mesh_refinement(_mesh);
1682 std::unique_ptr<libMesh::MeshRefinement> displaced_mesh_refinement(nullptr);
1683 if (_displaced_mesh)
1684 displaced_mesh_refinement = std::make_unique<libMesh::MeshRefinement>(*_displaced_mesh);
1685
1686 for (MooseIndex(_num_grid_steps) i = 0; i < _num_grid_steps; ++i)
1687 {
1689 // If the DisplacedProblem is active, undisplace the DisplacedMesh in preparation for
1690 // refinement. We can't safely refine the DisplacedMesh directly, since the Hilbert keys
1691 // computed on the inconsistenly-displaced Mesh are different on different processors,
1692 // leading to inconsistent Hilbert keys. We must do this before the undisplaced Mesh is
1693 // coarsensed, so that the element and node numbering is still consistent. We also have to
1694 // make sure this is done during every step of coarsening otherwise different partitions
1695 // will be generated for the reference and displaced meshes (even for replicated)
1696 _displaced_problem->undisplaceMesh();
1697
1698 mesh_refinement.uniformly_coarsen();
1699 if (_displaced_mesh)
1700 displaced_mesh_refinement->uniformly_coarsen();
1701
1702 // Mark this as an intermediate change because we do not yet want to reinit_systems. E.g. we
1703 // need things to happen in the following order for the undisplaced problem:
1704 // u1) EquationSystems::reinit_solutions. This will restrict the solution vectors and then
1705 // contract the mesh
1706 // u2) MooseMesh::meshChanged. This will update the node/side lists and other
1707 // things which needs to happen after the contraction
1708 // u3) GeometricSearchData::reinit. Once the node/side lists are updated we can perform our
1709 // geometric searches which will aid in determining sparsity patterns
1710 //
1711 // We do these things for the displaced problem (if it exists)
1712 // d1) EquationSystems::reinit. Restrict the displaced problem vector copies and then contract
1713 // the mesh. It's safe to do a full reinit with the displaced because there are no
1714 // matrices that sparsity pattern calculations will be conducted for
1715 // d2) MooseMesh::meshChanged. This will update the node/side lists and other
1716 // things which needs to happen after the contraction
1717 // d3) UpdateDisplacedMeshThread::operator(). Re-displace the mesh using the *displaced*
1718 // solution vector copy because we don't know the state of the reference solution vector.
1719 // It's safe to use the displaced copy because we are outside of a non-linear solve,
1720 // and there is no concern about differences between solution and current_local_solution
1721 // d4) GeometricSearchData::reinit. With the node/side lists updated and the mesh
1722 // re-displaced, we can perform our geometric searches, which will aid in determining the
1723 // sparsity pattern of the matrix held by the libMesh::ImplicitSystem held by the
1724 // NonlinearSystem held by this
1726 /*intermediate_change=*/true, /*contract_mesh=*/true, /*clean_refinement_flags=*/true);
1727 }
1728
1729 // u4) Now that all the geometric searches have been done (both undisplaced and displaced),
1730 // we're ready to update the sparsity pattern
1731 es().reinit_systems();
1732 }
1733
1735 if (_line_search)
1736 _line_search->timestepSetup();
1737
1738 // Random interface objects
1739 for (const auto & it : _random_data_objects)
1740 it.second->updateSeeds(EXEC_TIMESTEP_BEGIN);
1741
1742 unsigned int n_threads = libMesh::n_threads();
1743 for (THREAD_ID tid = 0; tid < n_threads; tid++)
1744 {
1747 }
1748
1749#ifdef MOOSE_KOKKOS_ENABLED
1751#endif
1752
1753 _aux->timestepSetup();
1754 for (auto & sys : _solver_systems)
1755 sys->timestepSetup();
1756
1758 // timestepSetup for displaced systems
1759 _displaced_problem->timestepSetup();
1760
1761 for (THREAD_ID tid = 0; tid < n_threads; tid++)
1762 {
1766 }
1767
1768 std::vector<UserObject *> userobjs;
1769 theWarehouse().query().condition<AttribSystem>("UserObject").queryIntoUnsorted(userobjs);
1770 for (auto obj : userobjs)
1771 obj->timestepSetup();
1772
1773#ifdef MOOSE_KOKKOS_ENABLED
1774 {
1775 std::vector<UserObjectBase *> userobjs;
1776 theWarehouse().query().condition<AttribSystem>("KokkosUserObject").queryIntoUnsorted(userobjs);
1777 for (auto obj : userobjs)
1778 obj->timestepSetup();
1779 }
1780#endif
1781
1782 // Timestep setup of output objects
1784
1788}
virtual void timestepSetup(THREAD_ID tid=0) const override
virtual void timestepSetup(THREAD_ID tid=0) const
void timestepSetup()
Calls the timestepSetup function for each of the output objects.
virtual void timestepSetup()

Referenced by Eigenvalue::execute(), SteadyBase::execute(), MFEMSteady::execute(), NonlinearEigen::takeStep(), TransientBase::takeStep(), and MFEMTransient::takeStep().

◆ transient()

virtual void FEProblemBase::transient ( bool  trans)
inlinevirtual

Definition at line 589 of file FEProblemBase.h.

589{ _transient = trans; }

Referenced by EigenExecutionerBase::EigenExecutionerBase(), and TransientBase::TransientBase().

◆ trustUserCouplingMatrix()

void FEProblemBase::trustUserCouplingMatrix ( )

Whether to trust the user coupling matrix even if we want to do things like be paranoid and create a full coupling matrix.

See https://github.com/idaholab/moose/issues/16395 for detailed background

Definition at line 6955 of file FEProblemBase.C.

6956{
6958 mooseError("Someone told us (the FEProblemBase) to trust the user coupling matrix, but we "
6959 "haven't been provided a coupling matrix!");
6960
6962}

Referenced by SingleMatrixPreconditioner::SingleMatrixPreconditioner().

◆ type()

const std::string & MooseBase::type ( ) const
inlineinherited

Get the type of this class.

Returns
the name of the type of this class

Definition at line 93 of file MooseBase.h.

94 {
95 mooseAssert(_type.size(), "Empty type");
96 return _type;
97 }

Referenced by CreateProblemDefaultAction::act(), MaterialDerivativeTestAction::act(), MaterialOutputAction::act(), SetupDebugAction::act(), addAuxArrayVariable(), addAuxScalarVariable(), addConvergence(), addDistribution(), DistributedRectilinearMeshGenerator::addElement(), DistributedRectilinearMeshGenerator::addElement(), MooseApp::addExecutor(), MooseApp::addExecutorParams(), MFEMProblem::addFESpace(), MFEMProblem::addFESpaceHierarchy(), addFunction(), MFEMProblem::addFunction(), addMeshDivision(), MooseApp::addMeshGenerator(), MeshGenerator::addMeshSubgenerator(), MeshGenerator::addMeshSubgenerator(), MFEMProblem::addMFEMProblemComposer(), addObject(), DistributedRectilinearMeshGenerator::addPoint(), MFEMProblem::addPostprocessor(), addPredictor(), CreateDisplacedProblemAction::addProxyRelationshipManagers(), addReporter(), addSampler(), WebServerControl::addServerActionsInternal(), addTimeIntegrator(), MFEMProblem::addVectorPostprocessor(), SubProblem::addVectorTag(), DisplacedProblem::addVectorTag(), advanceMultiApps(), MooseApp::appendMeshGenerator(), AuxKernelBase::AuxKernelBase(), backupMultiApps(), BatchMeshGeneratorAction::BatchMeshGeneratorAction(), BoundaryPreservedMarker::BoundaryPreservedMarker(), DistributedRectilinearMeshGenerator::buildCube(), MooseMesh::buildHRefinementAndCoarseningMaps(), MooseMesh::buildLowerDMesh(), MooseMesh::buildPRefinementAndCoarseningMaps(), PhysicsBase::checkComponentType(), MeshGenerator::checkGetMesh(), MeshDiagnosticsGenerator::checkNonConformalMeshFromAdaptivity(), ActionComponent::checkRequiredTasks(), PhysicsBase::checkRequiredTasks(), checkUserObjectNameCollision(), MFEMMultiAppTransfer::checkValidTransferProblemTypes(), MeshInfo::CombinedInfos< ElemInfoMap, ElemInfoItems >::CombinedInfos(), ElemElemConstraint::computeElemNeighJacobian(), ArrayDGKernel::computeElemNeighJacobian(), DGKernel::computeElemNeighJacobian(), ADDGKernel::computeElemNeighJacobian(), ElemElemConstraint::computeElemNeighResidual(), ArrayDGKernel::computeElemNeighResidual(), DGKernel::computeElemNeighResidual(), ADDGKernel::computeElemNeighResidual(), ArrayDGLowerDKernel::computeLowerDJacobian(), DGLowerDKernel::computeLowerDJacobian(), ArrayLowerDIntegratedBC::computeLowerDJacobian(), LowerDIntegratedBC::computeLowerDJacobian(), ArrayLowerDIntegratedBC::computeLowerDOffDiagJacobian(), LowerDIntegratedBC::computeLowerDOffDiagJacobian(), ArrayHFEMDirichletBC::computeLowerDQpJacobian(), HFEMDirichletBC::computeLowerDQpJacobian(), ArrayHFEMDiffusion::computeLowerDQpJacobian(), HFEMDiffusion::computeLowerDQpJacobian(), ArrayLowerDIntegratedBC::computeLowerDQpOffDiagJacobian(), ArrayDGLowerDKernel::computeLowerDQpOffDiagJacobian(), ArrayHFEMDirichletBC::computeLowerDQpOffDiagJacobian(), HFEMDirichletBC::computeLowerDQpOffDiagJacobian(), computeMultiAppsDT(), ArrayDGKernel::computeOffDiagElemNeighJacobian(), DGKernel::computeOffDiagElemNeighJacobian(), ADDGKernel::computeOffDiagElemNeighJacobian(), ArrayDGLowerDKernel::computeOffDiagLowerDJacobian(), DGLowerDKernel::computeOffDiagLowerDJacobian(), ScalarKernel::computeQpJacobian(), CoupledTiedValueConstraint::computeQpJacobian(), EqualValueBoundaryConstraint::computeQpJacobian(), LinearNodalConstraint::computeQpJacobian(), TiedValueConstraint::computeQpJacobian(), DGConvection::computeQpJacobian(), ArrayDGDiffusion::computeQpJacobian(), DGDiffusion::computeQpJacobian(), InterfaceDiffusion::computeQpJacobian(), InterfaceReaction::computeQpJacobian(), CoupledTiedValueConstraint::computeQpOffDiagJacobian(), ArrayDGKernel::computeQpOffDiagJacobian(), HFEMTestJump::computeQpOffDiagJacobian(), HFEMTrialJump::computeQpOffDiagJacobian(), ScalarKernel::computeQpResidual(), CoupledTiedValueConstraint::computeQpResidual(), EqualValueBoundaryConstraint::computeQpResidual(), LinearNodalConstraint::computeQpResidual(), TiedValueConstraint::computeQpResidual(), DGConvection::computeQpResidual(), ADDGAdvection::computeQpResidual(), ADDGDiffusion::computeQpResidual(), DGDiffusion::computeQpResidual(), HFEMDiffusion::computeQpResidual(), HFEMTestJump::computeQpResidual(), HFEMTrialJump::computeQpResidual(), ADMatInterfaceReaction::computeQpResidual(), InterfaceDiffusion::computeQpResidual(), InterfaceReaction::computeQpResidual(), ArrayDGDiffusion::computeQpResidual(), ArrayHFEMDiffusion::computeQpResidual(), computeSystems(), computeUserObjectByName(), computeUserObjects(), computeUserObjectsInternal(), createQRules(), DisplacedProblem::createQRules(), MooseApp::createRecoverablePerfGraph(), MoveBoundaryNodesToCurveGenerator::curveGenerator(), MeshGenerator::declareMeshProperty(), DumpObjectsProblem::deduceNecessaryParameters(), DumpObjectsProblem::dumpObjectHelper(), duplicateVariableCheck(), execMultiAppTransfers(), SteadyBase::execute(), WebServerControl::execute(), ActionWarehouse::executeActionsWithAction(), finishMultiAppStep(), FVScalarLagrangeMultiplierInterface::FVScalarLagrangeMultiplierInterface(), Boundary2DDelaunayGenerator::General2DDelaunay(), SurfaceSubdomainsDelaunayRemesher::General2DDelaunay(), Boundary2DDelaunayGenerator::generate(), LowerDBlockFromSidesetGenerator::generate(), SubdomainPerElementGenerator::generate(), PatternedMeshGenerator::generate(), MeshGenerator::generateInternal(), MeshGenerator::generateInternalCSG(), MultiAppTransfer::getAppInfo(), TransfiniteMeshGenerator::getEdge(), ElementGenerator::getElemType(), getMaterial(), getMaterialData(), getMaterialPropertyStorageConsumers(), MaterialOutputAction::getParams(), ReporterData::getReporterInfo(), MooseServer::getSyntaxMetadata(), getTransfers(), getUOQuery(), SubProblem::getVectorTags(), DisplacedProblem::getVectorTags(), EqualValueBoundaryConstraint::ghostPrimary(), CommonOutputAction::hasConsole(), hasMultiApps(), AdvancedOutput::hasOutput(), incrementMultiAppTStep(), NEML2Action::inferMOOSEIOType(), AdvancedOutput::initAvailableLists(), FunctorPositions::initialize(), FunctorTimes::initialize(), LinearFVAdvection::initialSetup(), LinearFVAnisotropicDiffusion::initialSetup(), LinearFVDiffusion::initialSetup(), MultiAppConservativeTransfer::initialSetup(), ArrayDGDiffusion::initQpResidual(), AdvancedOutput::initShowHideLists(), RelationshipManager::isType(), logAdd(), MaterialFunctorConverterTempl< T >::MaterialFunctorConverterTempl(), MooseObject::MooseObject(), SubProblem::numVectorTags(), DisplacedProblem::numVectorTags(), AdvancedOutput::output(), Console::output(), ConsoleUtils::outputExecutionInformation(), Output::outputStep(), SampledOutput::outputStep(), outputStep(), MooseServer::parseDocumentForDiagnostics(), PointInUnionCheckUO::PointInUnionCheckUO(), MooseMesh::prepare(), ProjectedStatefulMaterialStorageAction::processProperty(), MooseApp::recursivelyCreateExecutors(), SolutionInvalidInterface::registerInvalidSolutionInternal(), restoreMultiApps(), MeshRepairGenerator::separateSubdomainsByElementType(), setCoupling(), MooseApp::setupOptions(), ExplicitRK2::solve(), ExplicitTVDRK2::solve(), Reporter::store(), MooseBase::typeAndName(), AuxScalarKernel::uOld(), ScalarKernelBase::uOld(), DisplacedProblem::updateGeomSearch(), updateGeomSearch(), UserObjectInterface::userObjectType(), and AdvancedOutput::wantOutput().

◆ typeAndName()

std::string MooseBase::typeAndName ( ) const
inherited

Get the class's combined type and name; useful in error handling.

Returns
The type and name of this class in the form '<type()> "<name()>"'.

Definition at line 57 of file MooseBase.C.

58{
59 return type() + std::string(" \"") + name() + std::string("\"");
60}

Referenced by MaterialPropertyStorage::addProperty(), checkUserObjectNameCollision(), MeshGeneratorSystem::dataDrivenError(), ReporterContext< T >::finalize(), ReporterData::getReporterInfo(), MFEMSamplerBase::initialSetup(), MFEMVariableSamplerBase::initialSetup(), WebServerControl::outputMessage(), and Action::timedAct().

◆ uDotDotOldRequested()

virtual bool FEProblemBase::uDotDotOldRequested ( )
inlinevirtual

Get boolean flag to check whether old solution second time derivative needs to be stored.

Definition at line 2714 of file FEProblemBase.h.

2715 {
2717 mooseError("FEProblemBase: When requesting old second time derivative of solution, current "
2718 "second time derivation of solution should also be stored. Please set "
2719 "`u_dotdot_requested` to true using setUDotDotRequested.");
2721 }

Referenced by SystemBase::addDotVectors().

◆ uDotDotRequested()

virtual bool FEProblemBase::uDotDotRequested ( )
inlinevirtual

Get boolean flag to check whether solution second time derivative needs to be stored.

Definition at line 2700 of file FEProblemBase.h.

2700{ return _u_dotdot_requested; }

Referenced by SystemBase::addDotVectors(), and addTimeIntegrator().

◆ uDotOldRequested()

virtual bool FEProblemBase::uDotOldRequested ( )
inlinevirtual

Get boolean flag to check whether old solution time derivative needs to be stored.

Definition at line 2703 of file FEProblemBase.h.

2704 {
2706 mooseError("FEProblemBase: When requesting old time derivative of solution, current time "
2707 "derivative of solution should also be stored. Please set `u_dot_requested` to "
2708 "true using setUDotRequested.");
2709
2710 return _u_dot_old_requested;
2711 }

Referenced by SystemBase::addDotVectors().

◆ uDotRequested()

virtual bool FEProblemBase::uDotRequested ( )
inlinevirtual

Get boolean flag to check whether solution time derivative needs to be stored.

Definition at line 2697 of file FEProblemBase.h.

2697{ return _u_dot_requested; }

Referenced by SystemBase::addDotVectors().

◆ uniformRefine()

void FEProblemBase::uniformRefine ( )

uniformly refine the problem mesh(es).

This will also prolong the the solution, and in order for that to be safe, we can only perform one refinement at a time

Definition at line 10000 of file FEProblemBase.C.

10001{
10002 // ResetDisplacedMeshThread::onNode looks up the reference mesh by ID, so we need to make sure
10003 // we undisplace before adapting the reference mesh
10005 _displaced_problem->undisplaceMesh();
10006
10010
10012 /*intermediate_change=*/false, /*contract_mesh=*/true, /*clean_refinement_flags=*/true);
10013}
static void uniformRefine(MooseMesh *mesh, unsigned int level=libMesh::invalid_uint)
Performs uniform refinement of the passed Mesh object.
Definition Adaptivity.C:301

Referenced by FEProblemSolve::solve().

◆ uniqueName()

MooseObjectName MooseBase::uniqueName ( ) const
inherited
Returns
The unique name for accessing input parameters of this object in the InputParameterWarehouse

Definition at line 69 of file MooseBase.C.

70{
71 if (!_pars.have_parameter<std::string>(unique_name_param))
72 mooseError("uniqueName(): Object does not have a unique name");
73 return MooseObjectName(_pars.get<std::string>(unique_name_param));
74}
static const std::string unique_name_param
The name of the parameter that contains the unique object name.
Definition MooseBase.h:57

Referenced by MooseBase::connectControllableParams(), and Action::uniqueActionName().

◆ uniqueParameterName()

MooseObjectParameterName MooseBase::uniqueParameterName ( const std::string &  parameter_name) const
inherited
Returns
The unique parameter name of a valid parameter of this object for accessing parameter controls

Definition at line 63 of file MooseBase.C.

64{
65 return MooseObjectParameterName(getBase(), name(), parameter_name);
66}
const std::string & getBase() const
Definition MooseBase.h:147

◆ updateActiveObjects()

void FEProblemBase::updateActiveObjects ( )
virtual

Update the active objects in the warehouses.

Reimplemented in DumpObjectsProblem.

Definition at line 5741 of file FEProblemBase.C.

5742{
5743 TIME_SECTION("updateActiveObjects", 5, "Updating Active Objects");
5744
5745 for (THREAD_ID tid = 0; tid < libMesh::n_threads(); ++tid)
5746 {
5747 for (auto & nl : _nl)
5748 nl->updateActive(tid);
5749 _aux->updateActive(tid);
5756 }
5757
5765
5766#ifdef MOOSE_KOKKOS_ENABLED
5768#endif
5769}
void updateActive(THREAD_ID tid=0) override
Updates the active objects storage.
virtual void updateActive(THREAD_ID tid=0) override
Update the active status of Kernels.
virtual void updateActive(THREAD_ID tid=0) override
Update the active status of Kernels.

Referenced by MooseEigenSystem::eigenKernelOnCurrent(), MooseEigenSystem::eigenKernelOnOld(), and FixedPointSolve::solveStep().

◆ updateGeomSearch()

void FEProblemBase::updateGeomSearch ( GeometricSearchData::GeometricSearchType  type = GeometricSearchData::ALL)
overridevirtual

Update this object's geometric search data as well as the displaced problem's if it exists.

Implements SubProblem.

Definition at line 8701 of file FEProblemBase.C.

8702{
8703 TIME_SECTION("updateGeometricSearch", 3, "Updating Geometric Search");
8704
8706
8708 _displaced_problem->updateGeomSearch(type);
8709}
void update(GeometricSearchType type=ALL)
Update all of the search objects.

Referenced by NonlinearSystemBase::augmentSparsity().

◆ updateMaxQps()

void FEProblemBase::updateMaxQps ( )
private

Definition at line 6823 of file FEProblemBase.C.

6824{
6825 // Find the maximum number of quadrature points
6826 {
6827 MaxQpsThread mqt(*this);
6829 _max_qps = mqt.max();
6830
6831 // If we have more shape functions or more quadrature points on
6832 // another processor, then we may need to handle those elements
6833 // ourselves later after repartitioning.
6835 }
6836
6837 unsigned int max_qpts = getMaxQps();
6838 if (max_qpts > Moose::constMaxQpsPerElem)
6839 mooseError("Max quadrature points per element assumptions made in some code (e.g. Coupleable ",
6840 "and MaterialPropertyInterface classes) have been violated.\n",
6841 "Complain to Moose developers to have constMaxQpsPerElem increased from ",
6843 " to ",
6844 max_qpts);
6845 for (unsigned int tid = 0; tid < libMesh::n_threads(); ++tid)
6846 {
6847 // the highest available order in libMesh is 43
6848 _scalar_zero[tid].resize(libMesh::FORTYTHIRD, 0);
6849 _zero[tid].resize(max_qpts, 0);
6850 _ad_zero[tid].resize(max_qpts, 0);
6851 _grad_zero[tid].resize(max_qpts, RealGradient(0.));
6852 _ad_grad_zero[tid].resize(max_qpts, ADRealGradient(0));
6853 _second_zero[tid].resize(max_qpts, RealTensor(0.));
6854 _ad_second_zero[tid].resize(max_qpts, ADRealTensorValue(0));
6855 _vector_zero[tid].resize(max_qpts, RealGradient(0.));
6856 _vector_curl_zero[tid].resize(max_qpts, RealGradient(0.));
6857 }
6858}
libMesh::TensorValue< ADReal > ADRealTensorValue
Definition MooseTypes.h:414
ADRealVectorValue ADRealGradient
Definition MooseTypes.h:412
This class determines the maximum number of Quadrature Points and Shape Functions used for a given si...
constexpr std::size_t constMaxQpsPerElem
This is used for places where we initialize some qp-sized data structures that would end up being siz...
Definition MooseTypes.h:258

Referenced by bumpAllQRuleOrder(), bumpVolumeQRuleOrder(), and createQRules().

◆ updateMeshXFEM()

bool FEProblemBase::updateMeshXFEM ( )
virtual

Update the mesh due to changing XFEM cuts.

Definition at line 8983 of file FEProblemBase.C.

8984{
8985 TIME_SECTION("updateMeshXFEM", 5, "Updating XFEM");
8986
8987 bool updated = false;
8988 if (haveXFEM())
8989 {
8990 if (_xfem->updateHeal())
8991 // XFEM exodiff tests rely on a given numbering because they cannot use map = true due to
8992 // having coincident elements. While conceptually speaking we do not need to contract the
8993 // mesh, we need its call to renumber_nodes_and_elements in order to preserve these tests
8995 /*intermediate_change=*/false, /*contract_mesh=*/true, /*clean_refinement_flags=*/false);
8996
8997 updated = _xfem->update(_time, _nl, *_aux);
8998 if (updated)
8999 {
9001 /*intermediate_change=*/false, /*contract_mesh=*/true, /*clean_refinement_flags=*/false);
9002 _xfem->initSolution(_nl, *_aux);
9004 _console << "\nXFEM update complete: Mesh modified" << std::endl;
9005 }
9006 else
9007 _console << "\nXFEM update complete: Mesh not modified" << std::endl;
9008 }
9009 return updated;
9010}
virtual void restoreSolutions()

Referenced by FixedPointSolve::solveStep().

◆ updateMortarMesh()

void FEProblemBase::updateMortarMesh ( )
virtual

Definition at line 8712 of file FEProblemBase.C.

8713{
8714 TIME_SECTION("updateMortarMesh", 5, "Updating Mortar Mesh");
8715
8717
8718 // If any mortar interface's coverage changed, the DoF ghosting and sparsity that
8719 // AugmentSparsityOnInterface computed from the previous coverage are stale (see
8720 // reinitBecauseOfGhostingOrNewGeomObjects()'s mortar_changed parameter); refresh them now rather
8721 // than leaving that to the caller, since this may be called mid-solve where no other reinit
8722 // follows. Guard on _initialized: this is also called from init() itself, before es().init() has
8723 // run for the first time, and reinit()ing an EquationSystems that has never been init()ed is not
8724 // meaningful (init() immediately after will pick up whatever _mortar_data->update() just built).
8725 if (_mortar_data->update() && _initialized && !currentlyComputingResidual() &&
8727 reinitBecauseOfGhostingOrNewGeomObjects(/*mortar_changed=*/true);
8728}
const bool & currentlyComputingResidual() const
Returns true if the problem is in the process of computing the residual.
Definition SubProblem.h:728

Referenced by computeJacobianTags(), computeResidualAndJacobian(), computeResidualTags(), and init().

◆ updateSolution()

bool FEProblemBase::updateSolution ( NumericVector< libMesh::Number > &  vec_solution,
NumericVector< libMesh::Number > &  ghosted_solution 
)
virtual

Update the solution.

Parameters
vec_solutionLocal solution vector that gets modified by this method
ghosted_solutionGhosted solution vector
Returns
true if the solution was modified, false otherwise

Definition at line 8680 of file FEProblemBase.C.

8682{
8683 return false;
8684}

Referenced by computePostCheck().

◆ useHashTableMatrixAssembly()

bool FEProblemBase::useHashTableMatrixAssembly ( ) const
inline

Definition at line 3048 of file FEProblemBase.h.

Referenced by NonlinearSystemBase::addConstraint().

◆ useSNESMFReuseBase()

bool FEProblemBase::useSNESMFReuseBase ( )
inline

Return a flag that indicates if we are reusing the vector base.

Definition at line 2651 of file FEProblemBase.h.

2651{ return _snesmf_reuse_base; }

Referenced by NonlinearSystem::potentiallySetupFiniteDifferencing().

◆ validParams()

InputParameters FEProblemBase::validParams ( )
static

Definition at line 163 of file FEProblemBase.C.

164{
166 params.addParam<unsigned int>("null_space_dimension", 0, "The dimension of the nullspace");
167 params.addParam<unsigned int>(
168 "transpose_null_space_dimension", 0, "The dimension of the transpose nullspace");
169 params.addParam<unsigned int>(
170 "near_null_space_dimension", 0, "The dimension of the near nullspace");
171 params.addParam<bool>("solve",
172 true,
173 "Whether or not to actually solve the Nonlinear system. "
174 "This is handy in the case that all you want to do is "
175 "execute AuxKernels, Transfers, etc. without actually "
176 "solving anything");
177 params.addParam<bool>("use_nonlinear",
178 true,
179 "Determines whether to use a Nonlinear vs a "
180 "Eigenvalue system (Automatically determined based "
181 "on executioner)");
182 params.addParam<bool>("error_on_jacobian_nonzero_reallocation",
183 "This causes PETSc to error if it had to reallocate memory in the Jacobian "
184 "matrix due to not having enough nonzeros");
185 params.addParam<bool>("ignore_zeros_in_jacobian",
186 false,
187 "Do not explicitly store zero values in "
188 "the Jacobian matrix if true");
189 params.addParam<bool>("force_restart",
190 false,
191 "EXPERIMENTAL: If true, a sub_app may use a "
192 "restart file instead of using of using the master "
193 "backup file");
194 params.addDeprecatedParam<bool>("skip_additional_restart_data",
195 false,
196 "True to skip additional data in equation system for restart.",
197 "This parameter is no longer used, as we do not load additional "
198 "vectors by default with restart");
199 params.addParam<bool>("skip_nl_system_check",
200 false,
201 "True to skip the NonlinearSystem check for work to do (e.g. Make sure "
202 "that there are variables to solve for).");
203 params.addParam<bool>("allow_initial_conditions_with_restart",
204 false,
205 "True to allow the user to specify initial conditions when restarting. "
206 "Initial conditions can override any restarted field");
207
208 auto coverage_check_description = [](std::string scope, std::string list_param_name)
209 {
210 return "Controls, if and how a " + scope +
211 " subdomain coverage check is performed. "
212 "With 'TRUE' or 'ON' all subdomains are checked (the default). Setting 'FALSE' or 'OFF' "
213 "will disable the check for all subdomains. "
214 "To exclude a predefined set of subdomains 'SKIP_LIST' is to "
215 "be used, while the subdomains to skip are to be defined in the parameter '" +
216 list_param_name +
217 "'. To limit the check to a list of subdomains, 'ONLY_LIST' is to "
218 "be used (again, using the parameter '" +
219 list_param_name + "').";
220 };
221
222 params.addParam<std::vector<SubdomainName>>(
223 "block",
224 {"ANY_BLOCK_ID"},
225 "List of subdomains for kernel coverage and material coverage checks. Setting this parameter "
226 "is equivalent to setting 'kernel_coverage_block_list' and 'material_coverage_block_list' as "
227 "well as using 'ONLY_LIST' as the coverage check mode.");
228
229 MooseEnum kernel_coverage_check_modes("FALSE TRUE OFF ON SKIP_LIST ONLY_LIST", "TRUE");
230 params.addParam<MooseEnum>("kernel_coverage_check",
231 kernel_coverage_check_modes,
232 coverage_check_description("kernel", "kernel_coverage_block_list"));
233 params.addParam<std::vector<SubdomainName>>(
234 "kernel_coverage_block_list",
235 {},
236 "List of subdomains for kernel coverage check. The meaning of this list is controlled by the "
237 "parameter 'kernel_coverage_check' (whether this is the list of subdomains to be checked, "
238 "not to be checked or not taken into account).");
239 params.addParam<bool>(
240 "boundary_restricted_node_integrity_check",
241 true,
242 "Set to false to disable checking of boundary restricted nodal object variable dependencies, "
243 "e.g. are the variable dependencies defined on the selected boundaries?");
244 params.addParam<bool>("boundary_restricted_elem_integrity_check",
245 true,
246 "Set to false to disable checking of boundary restricted elemental object "
247 "variable dependencies, e.g. are the variable dependencies defined on the "
248 "selected boundaries?");
249 params.addParam<bool>(
250 "side_uo_interface_mat_prop_integrity_check",
251 true,
252 "Set to false to disable checking that side user objects do not consume material "
253 "properties declared by interface materials on the same boundary.");
254 MooseEnum material_coverage_check_modes("FALSE TRUE OFF ON SKIP_LIST ONLY_LIST", "TRUE");
255 params.addParam<MooseEnum>(
256 "material_coverage_check",
257 material_coverage_check_modes,
258 coverage_check_description("material", "material_coverage_block_list"));
259 params.addParam<std::vector<SubdomainName>>(
260 "material_coverage_block_list",
261 {},
262 "List of subdomains for material coverage check. The meaning of this list is controlled by "
263 "the parameter 'material_coverage_check' (whether this is the list of subdomains to be "
264 "checked, not to be checked or not taken into account).");
265
266 params.addParam<bool>("fv_bcs_integrity_check",
267 true,
268 "Set to false to disable checking of overlapping Dirichlet and Flux BCs "
269 "and/or multiple DirichletBCs per sideset");
270
271 params.addParam<bool>(
272 "fv_face_integrity_check",
273 true,
274 "Set to false to disable checking that FV flux boundary conditions and FV interface "
275 "kernels are applied to faces with valid variable ownership and interface topology.");
276
277 params.addParam<bool>(
278 "material_dependency_check", true, "Set to false to disable material dependency check");
279 params.addParam<bool>("parallel_barrier_messaging",
280 false,
281 "Displays messaging from parallel "
282 "barrier notifications when executing "
283 "or transferring to/from Multiapps "
284 "(default: false)");
285 params.addParam<unsigned int>(
286 "num_concurrent_multiapps",
287 1,
288 "Set greater than 1 to solve the multiapps sharing an 'execution_order_group' "
289 "concurrently. Each such multiapp is assigned a disjoint subset of the MPI ranks "
290 "(partitioned using their 'min_procs_per_app'/'max_procs_per_app', otherwise evenly), so "
291 "they solve at the same time on different ranks. The specific value only acts as an "
292 "on/off switch; the number that run at once is set by the ranks available.");
293
294 MooseEnum verbosity("false true extra", "false");
295 params.addParam<MooseEnum>("verbose_setup",
296 verbosity,
297 "Set to 'true' to have the problem report on any object created. Set "
298 "to 'extra' to also display all parameters.");
299 params.addParam<bool>("verbose_multiapps",
300 false,
301 "Set to True to enable verbose screen printing related to MultiApps");
302 params.addParam<bool>(
303 "verbose_restore",
304 false,
305 "Set to True to enable verbose screen printing related to solution restoration");
306
307 params.addParam<FileNameNoExtension>("restart_file_base",
308 "File base name used for restart (e.g. "
309 "<path>/<filebase> or <path>/LATEST to "
310 "grab the latest file available)");
311
312 params.addParam<std::vector<std::vector<TagName>>>(
313 "extra_tag_vectors",
314 {},
315 "Extra vectors to add to the system that can be filled by objects which compute residuals "
316 "and Jacobians (Kernels, BCs, etc.) by setting tags on them. The outer index is for which "
317 "nonlinear system the extra tag vectors should be added for");
318
319 params.addParam<std::vector<std::vector<TagName>>>(
320 "not_zeroed_tag_vectors",
321 {},
322 "Extra vector tags which the sytem will not zero when other vector tags are zeroed. "
323 "The outer index is for which nonlinear system the extra tag vectors should be added for");
324
325 params.addParam<std::vector<std::vector<TagName>>>(
326 "extra_tag_matrices",
327 {},
328 "Extra matrices to add to the system that can be filled "
329 "by objects which compute residuals and Jacobians "
330 "(Kernels, BCs, etc.) by setting tags on them. The outer index is for which "
331 "nonlinear system the extra tag vectors should be added for");
332
333 params.addParam<std::vector<TagName>>(
334 "extra_tag_solutions",
335 {},
336 "Extra solution vectors to add to the system that can be used by "
337 "objects for coupling variable values stored in them.");
338
339 params.addParam<bool>("previous_nl_solution_required",
340 false,
341 "True to indicate that this calculation requires a solution vector for "
342 "storing the previous nonlinear iteration.");
343
344 params.addParam<std::vector<NonlinearSystemName>>(
345 "nl_sys_names", std::vector<NonlinearSystemName>{"nl0"}, "The nonlinear system names");
346
347 params.addParam<std::vector<LinearSystemName>>("linear_sys_names", {}, "The linear system names");
348
349 params.addParam<bool>("check_uo_aux_state",
350 false,
351 "True to turn on a check that no state presents during the evaluation of "
352 "user objects and aux kernels");
353
354 params.addPrivateParam<MooseMesh *>("mesh");
355
356 params.declareControllable("solve");
357
358 params.addParam<bool>(
359 "allow_invalid_solution",
360 false,
361 "Set to true to allow convergence even though the solution has been marked as 'invalid'");
362 params.addParam<bool>("show_invalid_solution_console",
363 true,
364 "Set to true to show the invalid solution occurrence summary in console");
365 params.addParam<bool>("immediately_print_invalid_solution",
366 false,
367 "Whether or not to report invalid solution warnings at the time the "
368 "warning is produced instead of after the calculation");
369
370 params.addParam<bool>(
371 "identify_variable_groups_in_nl",
372 true,
373 "Whether to identify variable groups in nonlinear systems. This affects dof ordering");
374
375 params.addParam<bool>(
376 "regard_general_exceptions_as_errors",
377 false,
378 "If we catch an exception during residual/Jacobian evaluaton for which we don't have "
379 "specific handling, immediately error instead of allowing the time step to be cut");
380
381 params.addParam<bool>("use_hash_table_matrix_assembly",
382 false,
383 "Whether to assemble matrices using hash tables instead of preallocating "
384 "matrix memory. This can be a good option if the sparsity pattern changes "
385 "throughout the course of the simulation.");
386 params.addParam<bool>(
387 "restore_original_nonzero_pattern",
388 "Whether we should reset matrix memory for every Jacobian evaluation. This option is useful "
389 "if the sparsity pattern is constantly changing and you are using hash table assembly or if "
390 "you wish to continually restore the matrix to the originally preallocated sparsity pattern "
391 "computed by relationship managers.");
392
394 "skip_nl_system_check kernel_coverage_check kernel_coverage_block_list "
395 "boundary_restricted_node_integrity_check "
396 "boundary_restricted_elem_integrity_check "
397 "side_uo_interface_mat_prop_integrity_check material_coverage_check "
398 "material_coverage_block_list fv_bcs_integrity_check fv_face_integrity_check "
399 "material_dependency_check check_uo_aux_state error_on_jacobian_nonzero_reallocation",
400 "Simulation checks");
401 params.addParamNamesToGroup("use_nonlinear previous_nl_solution_required nl_sys_names "
402 "ignore_zeros_in_jacobian identify_variable_groups_in_nl "
403 "use_hash_table_matrix_assembly restore_original_nonzero_pattern",
404 "Nonlinear system(s)");
406 "restart_file_base force_restart allow_initial_conditions_with_restart", "Restart");
408 "verbose_setup verbose_multiapps verbose_restore parallel_barrier_messaging", "Verbosity");
410 "null_space_dimension transpose_null_space_dimension near_null_space_dimension",
411 "Null space removal");
413 "extra_tag_vectors extra_tag_matrices extra_tag_solutions not_zeroed_tag_vectors",
414 "Contribution to tagged field data");
416 "allow_invalid_solution show_invalid_solution_console immediately_print_invalid_solution",
417 "Solution validity control");
418
419 return params;
420}
void declareControllable(const std::string &name, std::set< ExecFlagType > execute_flags={})
Declare the given parameters as controllable.
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
This method takes a space delimited list of parameter names and adds them to the specified group name...
void addParam(const std::string &name, const S &value, const std::string &doc_string)
These methods add an optional parameter and a documentation string to the InputParameters object.
void addDeprecatedParam(const std::string &name, const T &value, const std::string &doc_string, const std::string &deprecation_message)
static InputParameters validParams()
Definition SubProblem.C:34

Referenced by DumpObjectsProblem::validParams(), EigenProblem::validParams(), ExternalProblem::validParams(), and FEProblem::validParams().

◆ vectorTagExists() [1/2]

virtual bool SubProblem::vectorTagExists ( const TagID  tag_id) const
inlinevirtualinherited

◆ vectorTagExists() [2/2]

bool SubProblem::vectorTagExists ( const TagName &  tag_name) const
virtualinherited

Check to see if a particular Tag exists by using Tag name.

Reimplemented in DisplacedProblem.

Definition at line 135 of file SubProblem.C.

136{
137 mooseAssert(verifyVectorTags(), "Vector tag storage invalid");
138
139 const auto tag_name_upper = MooseUtils::toUpper(tag_name);
140 for (const auto & vector_tag : _vector_tags)
141 if (vector_tag._name == tag_name_upper)
142 return true;
143
144 return false;
145}

◆ vectorTagName()

TagName SubProblem::vectorTagName ( const TagID  tag) const
virtualinherited

Retrieve the name associated with a TagID.

Reimplemented in DisplacedProblem.

Definition at line 220 of file SubProblem.C.

221{
222 mooseAssert(verifyVectorTags(), "Vector tag storage invalid");
223 if (!vectorTagExists(tag_id))
224 mooseError("Vector tag with ID ", tag_id, " does not exist");
225
226 return _vector_tags[tag_id]._name;
227}

Referenced by SystemBase::addVector(), SystemBase::closeTaggedVector(), NonlinearSystemBase::getResidualNonTimeVector(), NonlinearSystemBase::getResidualTimeVector(), SystemBase::removeVector(), NonlinearSystemBase::residualGhosted(), DisplacedProblem::vectorTagName(), and SystemBase::zeroTaggedVector().

◆ vectorTagNotZeroed()

bool SubProblem::vectorTagNotZeroed ( const TagID  tag) const
inherited

Checks if a vector tag is in the list of vectors that will not be zeroed when other tagged vectors are.

Parameters
tagthe TagID of the vector that is currently being checked
Returns
false if the tag is not within the set of vectors that are intended to not be zero or if the set is empty. returns true otherwise

Definition at line 154 of file SubProblem.C.

155{
156 return _not_zeroed_tagged_vectors.count(tag);
157}

Referenced by SystemBase::zeroTaggedVector().

◆ vectorTagType()

Moose::VectorTagType SubProblem::vectorTagType ( const TagID  tag_id) const
virtualinherited

Reimplemented in DisplacedProblem.

Definition at line 230 of file SubProblem.C.

231{
232 mooseAssert(verifyVectorTags(), "Vector tag storage invalid");
233 if (!vectorTagExists(tag_id))
234 mooseError("Vector tag with ID ", tag_id, " does not exist");
235
236 return _vector_tags[tag_id]._type;
237}

Referenced by MooseVariableScalar::reinit(), TaggingInterface::TaggingInterface(), TagVectorAux::TagVectorAux(), and DisplacedProblem::vectorTagType().

◆ verboseMultiApps()

bool FEProblemBase::verboseMultiApps ( ) const
inline

Whether or not to use verbose printing for MultiApps.

Definition at line 2298 of file FEProblemBase.h.

2298{ return _verbose_multiapps; }

Referenced by MultiApp::backup(), MultiApp::createApp(), MultiApp::restore(), FullSolveMultiApp::showStatusMessage(), and TransientMultiApp::solveStep().

◆ verifyVectorTags()

bool SubProblem::verifyVectorTags ( ) const
protectedinherited

Verify the integrity of _vector_tags and _typed_vector_tags.

Definition at line 240 of file SubProblem.C.

241{
242 for (TagID tag_id = 0; tag_id < _vector_tags.size(); ++tag_id)
243 {
244 const auto & vector_tag = _vector_tags[tag_id];
245
246 if (vector_tag._id != tag_id)
247 mooseError("Vector tag ", vector_tag._id, " id mismatch in _vector_tags");
248 if (vector_tag._type == Moose::VECTOR_TAG_ANY)
249 mooseError("Vector tag '", vector_tag._name, "' has type VECTOR_TAG_ANY");
250
251 const auto search = _vector_tags_name_map.find(vector_tag._name);
252 if (search == _vector_tags_name_map.end())
253 mooseError("Vector tag ", vector_tag._id, " is not in _vector_tags_name_map");
254 else if (search->second != tag_id)
255 mooseError("Vector tag ", vector_tag._id, " has incorrect id in _vector_tags_name_map");
256
257 unsigned int found_in_type = 0;
258 for (TagTypeID tag_type_id = 0; tag_type_id < _typed_vector_tags[vector_tag._type].size();
259 ++tag_type_id)
260 {
261 const auto & vector_tag_type = _typed_vector_tags[vector_tag._type][tag_type_id];
262 if (vector_tag_type == vector_tag)
263 {
264 ++found_in_type;
265 if (vector_tag_type._type_id != tag_type_id)
266 mooseError("Type ID for Vector tag ", tag_id, " is incorrect");
267 }
268 }
269
270 if (found_in_type == 0)
271 mooseError("Vector tag ", tag_id, " not found in _typed_vector_tags");
272 if (found_in_type > 1)
273 mooseError("Vector tag ", tag_id, " found multiple times in _typed_vector_tags");
274 }
275
276 unsigned int num_typed_vector_tags = 0;
277 for (const auto & typed_vector_tags : _typed_vector_tags)
278 num_typed_vector_tags += typed_vector_tags.size();
279 if (num_typed_vector_tags != _vector_tags.size())
280 mooseError("Size mismatch between _vector_tags and _typed_vector_tags");
281 if (_vector_tags_name_map.size() != _vector_tags.size())
282 mooseError("Size mismatch between _vector_tags and _vector_tags_name_map");
283
284 return true;
285}

Referenced by SubProblem::addVectorTag(), SubProblem::getVectorTag(), SubProblem::getVectorTagID(), SubProblem::getVectorTags(), SubProblem::getVectorTags(), SubProblem::numVectorTags(), SubProblem::vectorTagExists(), SubProblem::vectorTagName(), and SubProblem::vectorTagType().

Friends And Related Symbol Documentation

◆ AuxiliarySystem

friend class AuxiliarySystem
friend

Definition at line 3675 of file FEProblemBase.h.

◆ DisplacedProblem

friend class DisplacedProblem
friend

Definition at line 3680 of file FEProblemBase.h.

◆ Moose::PetscSupport::setSinglePetscOption

void Moose::PetscSupport::setSinglePetscOption ( const std::string &  name,
const std::string &  value,
FEProblemBase *const  problem 
)
friend

◆ MooseEigenSystem

friend class MooseEigenSystem
friend

Definition at line 3677 of file FEProblemBase.h.

◆ NonlinearSystemBase

friend class NonlinearSystemBase
friend

Definition at line 3676 of file FEProblemBase.h.

◆ Restartable

friend class Restartable
friend

Definition at line 3679 of file FEProblemBase.h.

◆ Resurrector

friend class Resurrector
friend

Definition at line 3678 of file FEProblemBase.h.

Member Data Documentation

◆ _action_factory

ActionFactory& ParallelParamObject::_action_factory
protectedinherited

◆ _active_elemental_moose_variables

std::vector<std::set<MooseVariableFieldBase *> > SubProblem::_active_elemental_moose_variables
protectedinherited

This is the set of MooseVariableFieldBase that will actually get reinited by a call to reinit(elem)

Definition at line 1090 of file SubProblem.h.

Referenced by SubProblem::clearActiveElementalMooseVariables(), SubProblem::getActiveElementalMooseVariables(), SubProblem::setActiveElementalMooseVariables(), and SubProblem::SubProblem().

◆ _active_fe_var_coupleable_matrix_tags

std::vector<std::set<TagID> > SubProblem::_active_fe_var_coupleable_matrix_tags
protectedinherited

◆ _active_fe_var_coupleable_vector_tags

std::vector<std::set<TagID> > SubProblem::_active_fe_var_coupleable_vector_tags
protectedinherited

◆ _active_sc_var_coupleable_matrix_tags

std::vector<std::set<TagID> > SubProblem::_active_sc_var_coupleable_matrix_tags
protectedinherited

◆ _active_sc_var_coupleable_vector_tags

std::vector<std::set<TagID> > SubProblem::_active_sc_var_coupleable_vector_tags
protectedinherited

◆ _ad_grad_zero

std::vector<MooseArray<ADRealVectorValue> > FEProblemBase::_ad_grad_zero

Definition at line 2583 of file FEProblemBase.h.

Referenced by FEProblemBase(), updateMaxQps(), and ~FEProblemBase().

◆ _ad_second_zero

std::vector<MooseArray<ADRealTensorValue> > FEProblemBase::_ad_second_zero

Definition at line 2586 of file FEProblemBase.h.

Referenced by FEProblemBase(), updateMaxQps(), and ~FEProblemBase().

◆ _ad_zero

std::vector<MooseArray<ADReal> > FEProblemBase::_ad_zero

Definition at line 2581 of file FEProblemBase.h.

Referenced by FEProblemBase(), updateMaxQps(), and ~FEProblemBase().

◆ _adaptivity

Adaptivity FEProblemBase::_adaptivity
protected

◆ _all_materials

MaterialWarehouse FEProblemBase::_all_materials
protected

◆ _allow_ics_during_restart

const bool FEProblemBase::_allow_ics_during_restart
private

Definition at line 3650 of file FEProblemBase.h.

Referenced by checkICRestartError().

◆ _allow_invalid_solution

const bool FEProblemBase::_allow_invalid_solution
private

Definition at line 3653 of file FEProblemBase.h.

Referenced by allowInvalidSolution().

◆ _app

MooseApp& MooseBase::_app
protectedinherited

The MOOSE application this is associated with.

Definition at line 375 of file MooseBase.h.

Referenced by AB2PredictorCorrector::AB2PredictorCorrector(), acceptInvalidSolution(), addAnyRedistributers(), MeshGenerator::addChildMeshGenerator(), addMaterialHelper(), MeshGenerator::addMeshSubgenerator(), MeshGenerator::addMeshSubgenerator(), addOutput(), MeshGenerator::addParentMeshGenerator(), allowOutput(), AStableDirk4::AStableDirk4(), FileMesh::buildMesh(), MooseMesh::buildTypedMesh(), MooseMesh::cacheFaceInfoVariableOwnership(), MooseMesh::cacheFVElementalDoFs(), DefaultNonlinearConvergence::checkConvergence(), MeshGenerator::checkGetMesh(), checkICRestartError(), checkProblemIntegrity(), LibmeshPartitioner::clone(), BlockWeightedPartitioner::clone(), CopyMeshPartitioner::clone(), GridPartitioner::clone(), HierarchicalGridPartitioner::clone(), PetscExternalPartitioner::clone(), RandomPartitioner::clone(), SingleRankPartitioner::clone(), ElementPointNeighborLayers::clone(), ElementSideNeighborLayers::clone(), GhostAllPointNeighbors::clone(), GhostBoundary::clone(), GhostEverything::clone(), GhostHigherDLowerDPointNeighbors::clone(), GhostLowerDElems::clone(), GhostPrimaryFace::clone(), ProxyRelationshipManager::clone(), RedistributeProperties::clone(), SampledOutput::cloneMesh(), computeJacobianSys(), computeJacobianTags(), computeLinearSystemTags(), computeResidualAndJacobian(), computeResidualSys(), computeResidualTags(), Console::Console(), TimeStepper::constrainStep(), Control::Control(), CopyMeshPartitioner::CopyMeshPartitioner(), MultiApp::createApp(), MultiApp::createApps(), MoveBoundaryNodesToCurveGenerator::curveGenerator(), customSetup(), MeshGenerator::declareMeshProperty(), MeshGenerator::declareNullMeshName(), MooseMesh::determineUseDistributedMesh(), DumpObjectsProblem::dumpObjectHelper(), DumpObjectsProblem::DumpObjectsProblem(), DumpObjectsProblem::dumpVariableHelper(), EigenExecutionerBase::EigenExecutionerBase(), EigenKernel::EigenKernel(), PIDTransientControl::execute(), Eigenvalue::execute(), InversePowerMethod::execute(), NonlinearEigen::execute(), SteadyBase::execute(), TransientBase::execute(), MFEMSteady::execute(), PseudoTimestep::execute(), IterationInfo::execute(), EigenProblem::execute(), Executioner::Executioner(), Executioner::Executioner(), ExtraIDIntegralReporter::ExtraIDIntegralReporter(), FEProblemBase(), FileOutput::FileOutput(), NEML2Assembly::finalize(), ChangeOverFixedPointPostprocessor::finalize(), RadialAverage::finalize(), FixedPointSolve::FixedPointSolve(), forceOutput(), FullSolveMultiApp::FullSolveMultiApp(), FunctorSmootherTempl< T >::FunctorSmootherTempl(), FVAdvection::FVAdvection(), FileMeshGenerator::generate(), MeshGenerator::generateInternal(), MeshGenerator::generateInternalCSG(), MeshGenerator::getCSGBaseByName(), getExecutor(), MeshGenerator::getMeshByName(), NumFixedPointIterations::getValue(), NumRelationshipManagers::getValue(), GhostingUserObject::GhostingUserObject(), MooseMesh::init(), Eigenvalue::init(), InversePowerMethod::init(), NonlinearEigen::init(), TransientBase::init(), MFEMMesh::init(), init(), CompositionDT::init(), SubProblem::initialSetup(), PIDTransientControl::initialSetup(), RealFunctionControl::initialSetup(), TimePeriod::initialSetup(), EigenProblemSolve::initialSetup(), FEProblemSolve::initialSetup(), Console::initialSetup(), initialSetup(), BoundaryMeshBuilder::initialSetup(), AdvancedOutput::initOutputList(), initPetscOutputAndSomeSolverSettings(), EigenProblem::initPetscOutputAndSomeSolverSettings(), AdvancedOutput::initPostprocessorOrVectorPostprocessorLists(), meshChanged(), MeshGenerator::MeshGenerator(), MFEMProblemSolve::MFEMProblemSolve(), MooseMesh::MooseMesh(), MooseMesh::MooseMesh(), MooseObject::MooseObject(), MultiAppGeneralFieldTransfer::MultiAppGeneralFieldTransfer(), EigenExecutionerBase::normalizeSolution(), NumFailedTimeSteps::NumFailedTimeSteps(), Checkpoint::output(), Exodus::output(), Nemesis::output(), PerfGraphOutput::output(), Tecplot::output(), MortarNodalGeometryOutput::output(), ControlOutput::outputActiveObjects(), ControlOutput::outputChangedControls(), ControlOutput::outputControls(), Exodus::outputEmptyTimestep(), Console::outputInput(), Exodus::outputInput(), Exodus::outputNodalVariables(), JSONOutput::outputReporters(), Output::outputStep(), SampledOutput::outputStep(), outputStep(), Console::outputSystemInformation(), JSONOutput::outputSystemInformation(), OverlayMeshGenerator::OverlayMeshGenerator(), MultiApp::parentOutputPositionChanged(), TransientBase::preExecute(), projectSolution(), AnnularMesh::safeClone(), ConcentricCircleMesh::safeClone(), FileMesh::safeClone(), GeneratedMesh::safeClone(), ImageMesh::safeClone(), MeshGeneratorMesh::safeClone(), PatternedMesh::safeClone(), RinglebMesh::safeClone(), SpiralAnnularMesh::safeClone(), StitchedMesh::safeClone(), TiledMesh::safeClone(), MFEMFileMesh::safeClone(), MFEMMeshGeneratorMesh::safeClone(), MultiApp::setAppOutputFileBase(), FileOutput::setFileBaseInternal(), MeshGenerator::setMeshProperty(), MeshGenerator::setMeshPropertyHelper(), setRestartFile(), TransientMultiApp::setupApp(), TimeSequenceStepperBase::setupSequence(), TransientBase::setupTimeIntegrator(), Output::setWallTimeIntervalFromCommandLineParam(), SideSetExtruderGenerator::SideSetExtruderGenerator(), SolutionInvalidityReporter::SolutionInvalidityReporter(), FixedPointSolve::solve(), solve(), EigenProblem::solve(), solveLinearSystem(), PetscOutput::solveSetup(), FixedPointSolve::solveStep(), TransientMultiApp::solveStep(), subdomainSetup(), theWarehouse(), TimeExtremeValue::TimeExtremeValue(), TimeIntegratedPostprocessor::TimeIntegratedPostprocessor(), TimeIntervalTimes::TimeIntervalTimes(), TimePeriod::TimePeriod(), SubProblem::timestepSetup(), PIDTransientControl::timestepSetup(), timestepSetup(), TransientBase::TransientBase(), MooseMesh::update(), NEML2FEInterpolation::updateDofMap(), NEML2FEInterpolation::updateGradPhi(), NEML2FEInterpolation::updateInterpolations(), updateMortarMesh(), NEML2FEInterpolation::updatePhi(), Console::write(), XYQuadrilateralMeshFromBoundaryCurve::XYQuadrilateralMeshFromBoundaryCurve(), and ~FEProblemBase().

◆ _assembly

std::vector<std::vector<std::unique_ptr<Assembly> > > FEProblemBase::_assembly
protected

◆ _aux

std::shared_ptr<AuxiliarySystem> FEProblemBase::_aux
protected

The auxiliary system.

Definition at line 3227 of file FEProblemBase.h.

Referenced by addAuxArrayVariable(), addAuxKernel(), addAuxScalarKernel(), addAuxScalarVariable(), addAuxVariable(), addIndicator(), addMarker(), addMultiApp(), addObjectParamsHelper(), addTimeIntegrator(), addTransfer(), advanceState(), checkExceptionAndStopSolve(), computeBounds(), computeIndicators(), computeJacobianTags(), computeLinearSystemTags(), computeMarkers(), computePostCheck(), computeResidualAndJacobian(), computeResidualTags(), computeSystems(), computeUserObjectsInternal(), copySolutionsBackwards(), createQRules(), createTagMatrices(), createTagSolutions(), customSetup(), determineSolverSystem(), DumpObjectsProblem::DumpObjectsProblem(), duplicateVariableCheck(), EigenProblem::EigenProblem(), execute(), ExternalProblem::ExternalProblem(), FEProblem::FEProblem(), getActualFieldVariable(), getArrayVariable(), getAuxiliarySystem(), getScalarVariable(), getStandardVariable(), getSystem(), getSystemBase(), getSystemBase(), getSystemBase(), getVariable(), getVariableNames(), getVectorVariable(), hasScalarVariable(), hasSolutionState(), hasVariable(), init(), initialSetup(), meshChanged(), needBoundaryMaterialOnSide(), needSolutionState(), outputStep(), prepare(), prepare(), prepareFace(), projectInitialConditionOnCustomRange(), projectSolution(), reinitDirac(), reinitElem(), reinitElemFace(), reinitElemPhys(), reinitNeighbor(), reinitNeighborPhys(), reinitNeighborPhys(), reinitNode(), reinitNodeFace(), reinitScalars(), restoreOldSolutions(), restoreSolutions(), saveOldSolutions(), setAuxKernelParamsAndLog(), skipNextForwardSolutionCopyToOld(), systemBaseAuxiliary(), systemBaseAuxiliary(), systemNumForVariable(), timestepSetup(), updateActiveObjects(), and updateMeshXFEM().

◆ _aux_evaluable_local_elem_range

std::unique_ptr<libMesh::ConstElemRange> FEProblemBase::_aux_evaluable_local_elem_range
protected

Definition at line 3552 of file FEProblemBase.h.

◆ _between_multi_app_transfers

ExecuteMooseObjectWarehouse<Transfer> FEProblemBase::_between_multi_app_transfers
protected

Transfers executed just before MultiApps to transfer data between them.

Definition at line 3329 of file FEProblemBase.h.

Referenced by addTransfer(), execMultiAppTransfers(), getMultiAppTransferWarehouse(), getTransfers(), getTransfers(), and updateActiveObjects().

◆ _block_mat_side_cache

std::vector<std::unordered_map<SubdomainID, bool> > FEProblemBase::_block_mat_side_cache
protected

Cache for calculating materials on side.

Definition at line 3338 of file FEProblemBase.h.

Referenced by FEProblemBase(), and needInternalNeighborSideMaterial().

◆ _bnd_mat_side_cache

std::vector<std::unordered_map<BoundaryID, bool> > FEProblemBase::_bnd_mat_side_cache
protected

Cache for calculating materials on side.

Definition at line 3341 of file FEProblemBase.h.

Referenced by FEProblemBase(), and needBoundaryMaterialOnSide().

◆ _bnd_material_props

MaterialPropertyStorage& FEProblemBase::_bnd_material_props
protected

◆ _boundary_restricted_elem_integrity_check

const bool FEProblemBase::_boundary_restricted_elem_integrity_check
protected

whether to perform checking of boundary restricted elemental object variable dependencies, e.g.

whether the variable dependencies are defined on the selected boundaries

Definition at line 3480 of file FEProblemBase.h.

◆ _boundary_restricted_node_integrity_check

const bool FEProblemBase::_boundary_restricted_node_integrity_check
protected

whether to perform checking of boundary restricted nodal object variable dependencies, e.g.

whether the variable dependencies are defined on the selected boundaries

Definition at line 3476 of file FEProblemBase.h.

◆ _calculate_jacobian_in_uo

bool FEProblemBase::_calculate_jacobian_in_uo
protected

◆ _check_residual_for_nans

bool FEProblemBase::_check_residual_for_nans
protected

Whether to check the residual for NaN or Inf values.

Definition at line 3503 of file FEProblemBase.h.

Referenced by checkResidualForNans(), and setCheckResidualForNans().

◆ _checking_uo_aux_state

bool FEProblemBase::_checking_uo_aux_state = false
private

Flag used to indicate whether we are doing the uo/aux state check in execute.

Definition at line 3699 of file FEProblemBase.h.

Referenced by checkingUOAuxState(), and execute().

◆ _cli_option_found

bool Problem::_cli_option_found
protectedinherited

True if the CLI option is found.

Definition at line 52 of file Problem.h.

Referenced by Problem::_setCLIOption().

◆ _cm

std::vector<std::unique_ptr<libMesh::CouplingMatrix> > FEProblemBase::_cm
protected

Coupling matrix for variables.

Definition at line 3230 of file FEProblemBase.h.

Referenced by areCoupled(), couplingMatrix(), FEProblemBase(), and init().

◆ _color_output

bool Problem::_color_output
protectedinherited

True if we're going to attempt to write color output.

Definition at line 55 of file Problem.h.

◆ _computing_nonlinear_residual

bool SubProblem::_computing_nonlinear_residual
protectedinherited

Whether the non-linear residual is being evaluated.

Definition at line 1117 of file SubProblem.h.

Referenced by SubProblem::computingNonlinearResid(), computingNonlinearResid(), and SubProblem::computingNonlinearResid().

◆ _computing_scaling_jacobian

bool FEProblemBase::_computing_scaling_jacobian = false
private

Flag used to indicate whether we are computing the scaling Jacobian.

Definition at line 3693 of file FEProblemBase.h.

Referenced by computingScalingJacobian(), and computingScalingJacobian().

◆ _computing_scaling_residual

bool FEProblemBase::_computing_scaling_residual = false
private

Flag used to indicate whether we are computing the scaling Residual.

Definition at line 3696 of file FEProblemBase.h.

Referenced by computingScalingResidual(), and computingScalingResidual().

◆ _console

const ConsoleStream ConsoleStreamInterface::_console
inherited

An instance of helper class to write streams to the Console objects.

Definition at line 31 of file ConsoleStreamInterface.h.

Referenced by IterationAdaptiveDT::acceptStep(), MaterialOutputAction::act(), MeshOnlyAction::act(), SetupDebugAction::act(), adaptMesh(), Adaptivity::adaptMesh(), PerfGraph::addToExecutionList(), SimplePredictor::apply(), SystemBase::applyScalingFactors(), MultiApp::backup(), backupMultiApps(), CoarsenedPiecewiseLinear::buildCoarsenedGrid(), DefaultSteadyStateConvergence::checkConvergence(), MeshDiagnosticsGenerator::checkElementOverlap(), MeshDiagnosticsGenerator::checkElementTypes(), MeshDiagnosticsGenerator::checkElementVolumes(), checkExceptionAndStopSolve(), SolverSystem::checkInvalidSolution(), MeshDiagnosticsGenerator::checkLocalJacobians(), MeshDiagnosticsGenerator::checkNonConformalMesh(), MeshDiagnosticsGenerator::checkNonConformalMeshFromAdaptivity(), MeshDiagnosticsGenerator::checkNonConformingFaces(), MeshDiagnosticsGenerator::checkNonMatchingEdges(), MeshDiagnosticsGenerator::checkNonPlanarSides(), MeshDiagnosticsGenerator::checkPolygons(), checkProblemIntegrity(), ReferenceResidualConvergence::checkResidualConvergence(), MeshDiagnosticsGenerator::checkSidesetsOrientation(), MeshDiagnosticsGenerator::checkWatertightNodesets(), MeshDiagnosticsGenerator::checkWatertightSidesets(), CoarsenSurfaceMeshAlongSidesetGenerator::coarsenAlongSidesets(), IterationAdaptiveDT::computeAdaptiveDT(), TransientBase::computeConstrainedDT(), DefaultMultiAppFixedPointConvergence::computeCustomConvergencePostprocessor(), NonlinearSystemBase::computeDamping(), FixedPointIterationAdaptiveDT::computeDT(), IterationAdaptiveDT::computeDT(), IterationAdaptiveDT::computeFailedDT(), IterationAdaptiveDT::computeInitialDT(), IterationAdaptiveDT::computeInterpolationDT(), computeLinearSystemTags(), LinearSystem::computeLinearSystemTags(), NonlinearSystemBase::computeScaling(), Problem::console(), TimeStepper::constrainStep(), IterationAdaptiveDT::constrainStep(), MultiApp::createApp(), execMultiApps(), execMultiAppTransfers(), Eigenvalue::execute(), SteadyBase::execute(), MFEMSteady::execute(), MessageFromInput::execute(), ActionWarehouse::executeActionsWithAction(), ActionWarehouse::executeAllActions(), MeshGeneratorSystem::executeMeshGenerators(), SidesetAroundSubdomainUpdater::finalize(), ElementQualityChecker::finalize(), finishMultiAppStep(), MeshRepairGenerator::fixOverlappingNodes(), SurfaceSubdomainsDelaunayRemesher::General2DDelaunay(), CoarsenBlockGenerator::generate(), CoarsenSurfaceMeshAlongSidesetGenerator::generate(), OrientSurfaceMeshGenerator::generate(), PolyLineMeshFollowingNodeSetGenerator::generate(), MeshGenerator::generateInternal(), VariableCondensationPreconditioner::getDofToCondense(), InversePowerMethod::init(), NonlinearEigen::init(), initialAdaptMesh(), DefaultMultiAppFixedPointConvergence::initialize(), SubProblem::initialSetup(), EigenExecutionerBase::inversePowerIteration(), joinAndFinalize(), TransientBase::keepGoing(), IterationAdaptiveDT::limitDTByFunction(), IterationAdaptiveDT::limitDTToPostprocessorValue(), logAdd(), EigenExecutionerBase::makeBXConsistent(), Console::meshChanged(), SurfaceDelaunayGeneratorBase::meshNormalDeviation2D(), MooseBase::mooseDeprecated(), MooseBase::mooseDeprecatedNoTrace(), MooseBase::mooseInfo(), MooseBase::mooseWarning(), MooseBase::mooseWarningNonPrefixed(), ReferenceResidualConvergence::nonlinearConvergenceSetup(), Console::output(), DOFMapOutput::output(), MaterialPropertyDebugOutput::output(), PerfGraphOutput::output(), ReporterDebugOutput::output(), SolutionInvalidityOutput::output(), VariableResidualNormsDebugOutput::output(), ControlOutput::outputActiveObjects(), ControlOutput::outputChangedControls(), ControlOutput::outputControls(), Console::outputInput(), WebServerControl::outputMessage(), Console::outputPostprocessors(), PseudoTimestep::outputPseudoTimestep(), Console::outputReporters(), DefaultMultiAppFixedPointConvergence::outputResidualNorm(), Console::outputScalarVariables(), Console::outputSystemInformation(), possiblyRebuildGeomSearchPatches(), EigenExecutionerBase::postExecute(), AB2PredictorCorrector::postSolve(), ActionWarehouse::printActionDependencySets(), BlockRestrictionDebugOutput::printBlockRestrictionGroups(), BlockRestrictionDebugOutput::printBlockRestrictionMap(), BlockRestrictionDebugOutput::printBoundaryRestrictionGroups(), SolutionInvalidity::printDebug(), EigenExecutionerBase::printEigenvalue(), PicardSolve::printFixedPointConvergenceHistory(), SecantSolve::printFixedPointConvergenceHistory(), SteffensenSolve::printFixedPointConvergenceHistory(), FixedPointSolve::printFixedPointConvergenceReason(), PerfGraphLivePrint::printLiveMessage(), MaterialPropertyDebugOutput::printMaterialMap(), PerfGraphLivePrint::printStats(), NEML2Action::printSummary(), AutomaticMortarGeneration::projectPrimaryNodesSinglePair(), AutomaticMortarGeneration::projectSecondaryNodesSinglePair(), CoarsenBlockGenerator::recursiveCoarsen(), SolutionTimeAdaptiveDT::rejectStep(), MultiApp::restore(), restoreMultiApps(), restoreSolutions(), NonlinearSystemBase::setInitialSolution(), MooseApp::setupOptions(), Checkpoint::shouldOutput(), SubProblem::showFunctorRequestors(), SubProblem::showFunctors(), FullSolveMultiApp::showStatusMessage(), FEProblemSolve::solve(), FixedPointSolve::solve(), LinearSystem::solve(), NonlinearSystem::solve(), AStableDirk4::solve(), ExplicitRK2::solve(), ExplicitTVDRK2::solve(), ImplicitMidpoint::solve(), LStableDirk2::solve(), LStableDirk3::solve(), LStableDirk4::solve(), EigenProblem::solve(), FixedPointSolve::solveStep(), TransientMultiApp::solveStep(), MeshRepairGenerator::splitNonConvexPolygons(), PerfGraphLivePrint::start(), WebServerControl::startServer(), AB2PredictorCorrector::step(), NonlinearEigen::takeStep(), TransientBase::takeStep(), MFEMTransient::takeStep(), TerminateChainControl::terminate(), SubProblem::timestepSetup(), updateMeshXFEM(), Convergence::verboseOutput(), Console::writeTimestepInformation(), Console::writeVariableNorms(), and ~FEProblemBase().

◆ _const_jacobian

bool FEProblemBase::_const_jacobian
protected

true if the Jacobian is constant

Definition at line 3440 of file FEProblemBase.h.

Referenced by computeJacobianTags(), constJacobian(), prepare(), and setConstJacobian().

◆ _consumed_material_properties

std::map<MooseObjectName, std::set<std::string> > SubProblem::_consumed_material_properties
privateinherited

◆ _control_warehouse

ExecuteMooseObjectWarehouse<Control> FEProblemBase::_control_warehouse
protected

The control logic warehouse.

Definition at line 3537 of file FEProblemBase.h.

Referenced by executeControls(), getControlWarehouse(), timestepSetup(), and updateActiveObjects().

◆ _convergences

MooseObjectWarehouse<Convergence> FEProblemBase::_convergences
protected

convergence warehouse

Definition at line 3263 of file FEProblemBase.h.

Referenced by addConvergence(), getConvergence(), getConvergenceObjects(), and hasConvergence().

◆ _coupling

Moose::CouplingType FEProblemBase::_coupling
protected

Type of variable coupling.

Definition at line 3229 of file FEProblemBase.h.

Referenced by coupling(), init(), setCoupling(), and trustUserCouplingMatrix().

◆ _current_algebraic_bnd_node_range

std::unique_ptr<ConstBndNodeRange> FEProblemBase::_current_algebraic_bnd_node_range
protected

◆ _current_algebraic_elem_range

std::unique_ptr<libMesh::ConstElemRange> FEProblemBase::_current_algebraic_elem_range
protected

◆ _current_algebraic_node_range

std::unique_ptr<libMesh::ConstNodeRange> FEProblemBase::_current_algebraic_node_range
protected

Definition at line 3555 of file FEProblemBase.h.

Referenced by getCurrentAlgebraicNodeRange(), and setCurrentAlgebraicNodeRange().

◆ _current_execute_on_flag

ExecFlagType FEProblemBase::_current_execute_on_flag
protected

◆ _current_ic_state

unsigned short FEProblemBase::_current_ic_state
protected

Definition at line 3563 of file FEProblemBase.h.

Referenced by getCurrentICState().

◆ _current_linear_sys

LinearSystem* FEProblemBase::_current_linear_sys
protected

◆ _current_nl_sys

NonlinearSystemBase* FEProblemBase::_current_nl_sys
protected

◆ _current_residual_vector_tags

std::vector<VectorTag> FEProblemBase::_current_residual_vector_tags
private

A data member to store the residual vector tag(s) passed into computeResidualTag(s).

This data member will be used when APIs like cacheResidual, addCachedResiduals, etc. are called

Definition at line 3710 of file FEProblemBase.h.

Referenced by clearCurrentResidualVectorTags(), currentResidualVectorTags(), and setCurrentResidualVectorTags().

◆ _current_solver_sys

SolverSystem* FEProblemBase::_current_solver_sys
protected

The current solver system.

Definition at line 3212 of file FEProblemBase.h.

Referenced by setCurrentLinearSystem(), and setCurrentNonlinearSystem().

◆ _currently_computing_jacobian

bool SubProblem::_currently_computing_jacobian
protectedinherited

Flag to determine whether the problem is currently computing Jacobian.

Definition at line 1111 of file SubProblem.h.

Referenced by computeJacobianBlocks(), EigenProblem::computeJacobianBlocks(), computeJacobianTags(), SubProblem::currentlyComputingJacobian(), and SubProblem::setCurrentlyComputingJacobian().

◆ _currently_computing_residual

bool SubProblem::_currently_computing_residual
protectedinherited

Whether the residual is being evaluated.

Definition at line 1120 of file SubProblem.h.

Referenced by SubProblem::currentlyComputingResidual(), setCurrentlyComputingResidual(), and SubProblem::setCurrentlyComputingResidual().

◆ _currently_computing_residual_and_jacobian

bool SubProblem::_currently_computing_residual_and_jacobian
protectedinherited

Flag to determine whether the problem is currently computing the residual and Jacobian.

Definition at line 1114 of file SubProblem.h.

Referenced by SubProblem::currentlyComputingResidualAndJacobian(), and SubProblem::setCurrentlyComputingResidualAndJacobian().

◆ _cycles_completed

unsigned int FEProblemBase::_cycles_completed
protected

Definition at line 3399 of file FEProblemBase.h.

Referenced by adaptMesh(), getNumCyclesCompleted(), and initialAdaptMesh().

◆ _default_families_without_p_refinement

const std::unordered_set< FEFamily > SubProblem::_default_families_without_p_refinement
staticprivateinherited
Initial value:

The set of variable families by default disable p-refinement.

Definition at line 48 of file SubProblem.h.

54{
55class FunctorEnvelopeBase;

Referenced by SubProblem::markFamilyPRefinement().

◆ _default_ghosting

bool SubProblem::_default_ghosting
protectedinherited

Whether or not to use default libMesh coupling.

Definition at line 1105 of file SubProblem.h.

Referenced by SubProblem::defaultGhosting().

◆ _dirac_kernel_info

DiracKernelInfo SubProblem::_dirac_kernel_info
protectedinherited

◆ _discrete_materials

MaterialWarehouse FEProblemBase::_discrete_materials
protected

◆ _displaced_mesh

MooseMesh* FEProblemBase::_displaced_mesh
protected

◆ _displaced_problem

std::shared_ptr<DisplacedProblem> FEProblemBase::_displaced_problem
protected

Definition at line 3407 of file FEProblemBase.h.

Referenced by adaptMesh(), addAnyRedistributers(), addAuxArrayVariable(), addAuxScalarKernel(), addAuxScalarVariable(), addAuxVariable(), addCachedJacobian(), addCachedResidual(), addCachedResidualDirectly(), addConstraint(), addDGKernel(), addDiracKernel(), addDisplacedProblem(), addFunction(), addFunctorMaterial(), addFVKernel(), addGhostedBoundary(), addIndicator(), addInterfaceKernel(), addJacobian(), addJacobianBlockTags(), addJacobianLowerD(), addJacobianNeighbor(), addJacobianNeighborLowerD(), addMarker(), addMaterialHelper(), addMultiApp(), addNodalKernel(), addObjectParamsHelper(), addResidual(), addResidualLower(), addResidualNeighbor(), addScalarKernel(), addTimeIntegrator(), addTransfer(), addUserObject(), addVariable(), advanceState(), automaticScaling(), bumpAllQRuleOrder(), bumpVolumeQRuleOrder(), cacheJacobian(), cacheJacobianNeighbor(), cacheResidual(), cacheResidualNeighbor(), checkDisplacementOrders(), clearActiveElementalMooseVariables(), clearActiveFEVariableCoupleableMatrixTags(), clearActiveFEVariableCoupleableVectorTags(), clearActiveScalarVariableCoupleableMatrixTags(), clearActiveScalarVariableCoupleableVectorTags(), clearDiracInfo(), computeJacobianBlocks(), EigenProblem::computeJacobianBlocks(), computeJacobianTags(), computeResidualAndJacobian(), computeResidualTags(), computeUserObjectsInternal(), computingNonlinearResid(), createMortarInterface(), createQRules(), customSetup(), execute(), getDiracElements(), getDisplacedProblem(), getDisplacedProblem(), getMortarUserObjects(), ghostGhostedBoundaries(), haveADObjects(), haveDisplaced(), init(), initXFEM(), jacobianSetup(), mesh(), mesh(), meshChanged(), outputStep(), possiblyRebuildGeomSearchPatches(), prepare(), prepare(), prepareAssembly(), prepareAssemblyNeighbor(), prepareFace(), reinitBecauseOfGhostingOrNewGeomObjects(), reinitDirac(), reinitElem(), reinitElemFace(), reinitElemFaceRef(), reinitElemNeighborAndLowerD(), reinitLowerDElem(), reinitNeighbor(), reinitNeighborFaceRef(), reinitNode(), reinitNodeFace(), reinitOffDiagScalars(), reinitScalars(), resetState(), residualSetup(), restoreSolutions(), setActiveElementalMooseVariables(), setActiveFEVariableCoupleableMatrixTags(), setActiveFEVariableCoupleableVectorTags(), setActiveScalarVariableCoupleableMatrixTags(), setActiveScalarVariableCoupleableVectorTags(), setAuxKernelParamsAndLog(), setCurrentBoundaryID(), setCurrentLowerDElem(), setCurrentlyComputingResidual(), setCurrentSubdomainID(), setNeighborSubdomainID(), setNeighborSubdomainID(), setResidual(), setResidualNeighbor(), setResidualObjectParamsAndLog(), solve(), EigenProblem::solve(), timestepSetup(), uniformRefine(), and updateGeomSearch().

◆ _dt

Real& FEProblemBase::_dt
protected

Definition at line 3168 of file FEProblemBase.h.

Referenced by dt(), execMultiApps(), and FEProblemBase().

◆ _dt_old

Real& FEProblemBase::_dt_old
protected

Definition at line 3169 of file FEProblemBase.h.

Referenced by dtOld(), and FEProblemBase().

◆ _enabled

const bool& MooseObject::_enabled
protectedinherited

Reference to the "enable" InputParameters, used by Controls for toggling on/off MooseObjects.

Definition at line 71 of file MooseObject.h.

Referenced by MooseObject::enabled().

◆ _error_on_jacobian_nonzero_reallocation

bool FEProblemBase::_error_on_jacobian_nonzero_reallocation
private

Whether to error when the Jacobian is re-allocated, usually because the sparsity pattern changed.

Definition at line 3638 of file FEProblemBase.h.

Referenced by errorOnJacobianNonzeroReallocation(), and setErrorOnJacobianNonzeroReallocation().

◆ _evaluable_local_elem_range

std::unique_ptr<libMesh::ConstElemRange> FEProblemBase::_evaluable_local_elem_range
protected

Definition at line 3550 of file FEProblemBase.h.

Referenced by getEvaluableElementRange(), and meshChanged().

◆ _exception_message

std::string FEProblemBase::_exception_message
protected

The error message to go with an exception.

Definition at line 3531 of file FEProblemBase.h.

Referenced by checkExceptionAndStopSolve(), and setException().

◆ _factory

Factory& SubProblem::_factory
protectedinherited

◆ _fail_next_system_convergence_check

bool FEProblemBase::_fail_next_system_convergence_check
private

◆ _family_for_p_refinement

std::unordered_map<FEFamily, bool> SubProblem::_family_for_p_refinement
privateinherited

Indicate whether a family is disabled for p-refinement.

Definition at line 1223 of file SubProblem.h.

Referenced by SubProblem::markFamilyPRefinement(), and SubProblem::preparePRefinement().

◆ _fe_matrix_tags

std::set<TagID> FEProblemBase::_fe_matrix_tags
protected

◆ _fe_vector_tags

std::set<TagID> FEProblemBase::_fe_vector_tags
protected

◆ _force_restart

const bool FEProblemBase::_force_restart
private

Definition at line 3649 of file FEProblemBase.h.

◆ _from_multi_app_transfers

ExecuteMooseObjectWarehouse<Transfer> FEProblemBase::_from_multi_app_transfers
protected

Transfers executed just after MultiApps to transfer data from them.

Definition at line 3326 of file FEProblemBase.h.

Referenced by addTransfer(), execMultiAppTransfers(), getMultiAppTransferWarehouse(), getTransfers(), getTransfers(), and updateActiveObjects().

◆ _functions

MooseObjectWarehouse<Function> FEProblemBase::_functions
protected

◆ _functor_to_request_info

std::vector<std::multimap<std::string, std::pair<bool, bool> > > SubProblem::_functor_to_request_info
privateinherited

A multimap (for each thread) from unfilled functor requests to whether the requests were for AD functors and whether the requestor was an AD object.

Definition at line 1176 of file SubProblem.h.

Referenced by SubProblem::addFunctor(), SubProblem::getFunctor(), and SubProblem::SubProblem().

◆ _functor_to_requestors

std::map<std::string, std::set<std::string> > SubProblem::_functor_to_requestors
privateinherited

The requestors of functors where the key is the prop name and the value is a set of names of requestors.

Definition at line 1172 of file SubProblem.h.

Referenced by SubProblem::getFunctor(), SubProblem::initialSetup(), and SubProblem::showFunctorRequestors().

◆ _functors

std::vector<std::multimap<std::string, std::tuple<TrueFunctorIs, std::unique_ptr<Moose::FunctorEnvelopeBase>, std::unique_ptr<Moose::FunctorEnvelopeBase> > > > SubProblem::_functors
privateinherited

A container holding pointers to all the functors in our problem.

We hold a tuple where the zeroth item in the tuple is an enumerator that describes what type of functor the "true" functor is (either NONAD or AD), the first item in the tuple is the non-AD version of the functor, and the second item in the tuple is the AD version of the functor

Definition at line 1159 of file SubProblem.h.

Referenced by SubProblem::addFunctor(), SubProblem::getFunctor(), SubProblem::hasFunctor(), SubProblem::hasFunctorWithType(), SubProblem::initialSetup(), SubProblem::showFunctors(), and SubProblem::SubProblem().

◆ _fv_bcs_integrity_check

bool FEProblemBase::_fv_bcs_integrity_check
protected

Whether to check overlapping Dirichlet and Flux BCs and/or multiple DirichletBCs per sideset.

Definition at line 3490 of file FEProblemBase.h.

Referenced by fvBCsIntegrityCheck(), and fvBCsIntegrityCheck().

◆ _fv_face_integrity_check

const bool FEProblemBase::_fv_face_integrity_check
protected

Whether to check FV boundary and interface objects against the faces on which they execute.

Definition at line 3493 of file FEProblemBase.h.

◆ _fv_ics

FVInitialConditionWarehouse FEProblemBase::_fv_ics
protected

Definition at line 3274 of file FEProblemBase.h.

Referenced by addFVInitialCondition(), and getFVInitialConditionWarehouse().

◆ _geometric_search_data

GeometricSearchData FEProblemBase::_geometric_search_data
protected

◆ _ghosted_elems

std::set<dof_id_type> SubProblem::_ghosted_elems
protectedinherited

Elements that should have Dofs ghosted to the local processor.

Definition at line 1108 of file SubProblem.h.

Referenced by addGhostedElem(), SubProblem::ghostedElems(), meshChanged(), possiblyRebuildGeomSearchPatches(), and reinitBecauseOfGhostingOrNewGeomObjects().

◆ _grad_phi_zero

std::vector<VariablePhiGradient> FEProblemBase::_grad_phi_zero

Definition at line 2584 of file FEProblemBase.h.

Referenced by FEProblemBase(), and ~FEProblemBase().

◆ _grad_zero

std::vector<VariableGradient> FEProblemBase::_grad_zero

Definition at line 2582 of file FEProblemBase.h.

Referenced by FEProblemBase(), reinitDirac(), updateMaxQps(), and ~FEProblemBase().

◆ _has_active_elemental_moose_variables

std::vector<unsigned int> SubProblem::_has_active_elemental_moose_variables
protectedinherited

Whether or not there is currently a list of active elemental moose variables.

Definition at line 1094 of file SubProblem.h.

Referenced by SubProblem::clearActiveElementalMooseVariables(), SubProblem::hasActiveElementalMooseVariables(), SubProblem::setActiveElementalMooseVariables(), and SubProblem::SubProblem().

◆ _has_active_material_properties

std::vector<unsigned char> FEProblemBase::_has_active_material_properties
protected

Whether there are active material properties on each thread.

Definition at line 3466 of file FEProblemBase.h.

Referenced by clearActiveMaterialProperties(), FEProblemBase(), hasActiveMaterialProperties(), and setActiveMaterialProperties().

◆ _has_constraints

bool FEProblemBase::_has_constraints
protected

Whether or not this system has any Constraints.

Definition at line 3425 of file FEProblemBase.h.

Referenced by addConstraint(), NonlinearSystemBase::computeJacobianInternal(), and NonlinearSystemBase::computeResidualInternal().

◆ _has_dampers

bool FEProblemBase::_has_dampers
protected

Whether or not this system has any Dampers associated with it.

Definition at line 3422 of file FEProblemBase.h.

Referenced by addDamper(), computeDamping(), computePostCheck(), and hasDampers().

◆ _has_exception

bool FEProblemBase::_has_exception
protected

Whether or not an exception has occurred.

Definition at line 3516 of file FEProblemBase.h.

Referenced by checkExceptionAndStopSolve(), hasException(), and setException().

◆ _has_initialized_stateful

bool FEProblemBase::_has_initialized_stateful
protected

Whether nor not stateful materials have been initialized.

Definition at line 3437 of file FEProblemBase.h.

Referenced by meshChanged().

◆ _has_internal_edge_residual_objects

bool FEProblemBase::_has_internal_edge_residual_objects
private

Whether the problem has dgkernels or interface kernels.

Definition at line 3661 of file FEProblemBase.h.

Referenced by addDGKernel(), addInterfaceKernel(), and hasNeighborCoupling().

◆ _has_jacobian

bool FEProblemBase::_has_jacobian
protected

Indicates if the Jacobian was computed.

Definition at line 3443 of file FEProblemBase.h.

Referenced by computeJacobianTags(), hasJacobian(), meshChanged(), and prepare().

◆ _has_kokkos_objects

bool FEProblemBase::_has_kokkos_objects = false
private

Whether we have any Kokkos objects.

Definition at line 3727 of file FEProblemBase.h.

Referenced by hasKokkosObjects(), init(), and initElementStatefulProps().

◆ _has_kokkos_residual_objects

bool FEProblemBase::_has_kokkos_residual_objects = false
private

Whether we have any Kokkos residual objects.

Definition at line 3730 of file FEProblemBase.h.

Referenced by hasKokkosResidualObjects().

◆ _has_mortar

bool FEProblemBase::_has_mortar
private

Whether the simulation requires mortar coupling.

Definition at line 3683 of file FEProblemBase.h.

Referenced by createMortarInterface(), and hasMortarCoupling().

◆ _has_nonlocal_coupling

bool FEProblemBase::_has_nonlocal_coupling
protected

Indicates if nonlocal coupling is required/exists.

Definition at line 3460 of file FEProblemBase.h.

Referenced by addJacobian(), addJacobianBlockTags(), hasNonlocalCoupling(), prepare(), prepare(), prepareAssembly(), reinitDirac(), reinitElemPhys(), and timestepSetup().

◆ _has_time_integrator

bool FEProblemBase::_has_time_integrator
protected

Indicates whether or not this executioner has a time integrator (during setup)

Definition at line 3513 of file FEProblemBase.h.

Referenced by addTimeIntegrator(), and hasTimeIntegrator().

◆ _have_ad_objects

bool SubProblem::_have_ad_objects
protectedinherited

AD flag indicating whether any AD objects have been added.

Definition at line 1129 of file SubProblem.h.

Referenced by SubProblem::haveADObjects(), SubProblem::haveADObjects(), DisplacedProblem::haveADObjects(), and haveADObjects().

◆ _have_fv

bool FEProblemBase::_have_fv = false
private

Whether we are performing some calculations with finite volume discretizations.

Definition at line 3713 of file FEProblemBase.h.

Referenced by haveFV(), and needFV().

◆ _have_p_refinement

bool SubProblem::_have_p_refinement
privateinherited

Whether p-refinement has been requested at any point during the simulation.

Definition at line 1220 of file SubProblem.h.

Referenced by SubProblem::havePRefinement(), and SubProblem::preparePRefinement().

◆ _ics

InitialConditionWarehouse FEProblemBase::_ics
protected

Initial condition storage

Definition at line 3273 of file FEProblemBase.h.

Referenced by addInitialCondition(), and getInitialConditionWarehouse().

◆ _identify_variable_groups_in_nl

const bool FEProblemBase::_identify_variable_groups_in_nl
private

Whether to identify variable groups in nonlinear systems. This affects dof ordering.

Definition at line 3705 of file FEProblemBase.h.

Referenced by identifyVariableGroupsInNL().

◆ _ignore_zeros_in_jacobian

bool FEProblemBase::_ignore_zeros_in_jacobian
private

Whether to ignore zeros in the Jacobian, thereby leading to a reduced sparsity pattern.

Definition at line 3645 of file FEProblemBase.h.

Referenced by ignoreZerosInJacobian(), setIgnoreZerosInJacobian(), and setPreserveMatrixSparsityPattern().

◆ _immediately_print_invalid_solution

const bool& FEProblemBase::_immediately_print_invalid_solution
private

Definition at line 3655 of file FEProblemBase.h.

Referenced by immediatelyPrintInvalidSolution().

◆ _indicators

MooseObjectWarehouse<Indicator> FEProblemBase::_indicators
protected

◆ _initialized

bool FEProblemBase::_initialized
protected

Definition at line 3139 of file FEProblemBase.h.

Referenced by init(), initialized(), and updateMortarMesh().

◆ _input_file_saved

bool FEProblemBase::_input_file_saved
protected

whether input file has been written

Definition at line 3419 of file FEProblemBase.h.

◆ _interface_mat_side_cache

std::vector<std::unordered_map<BoundaryID, bool> > FEProblemBase::_interface_mat_side_cache
protected

Cache for calculating materials on interface.

Definition at line 3344 of file FEProblemBase.h.

Referenced by FEProblemBase(), and needInterfaceMaterialOnSide().

◆ _interface_materials

MaterialWarehouse FEProblemBase::_interface_materials
protected

◆ _internal_side_indicators

MooseObjectWarehouse<InternalSideIndicatorBase> FEProblemBase::_internal_side_indicators
protected

◆ _is_petsc_options_inserted

bool FEProblemBase::_is_petsc_options_inserted
protected

If or not PETSc options have been added to database.

Definition at line 3546 of file FEProblemBase.h.

Referenced by FEProblemBase(), petscOptionsInserted(), solve(), and solveLinearSystem().

◆ _kernel_coverage_blocks

std::vector<SubdomainName> FEProblemBase::_kernel_coverage_blocks
protected

Definition at line 3472 of file FEProblemBase.h.

Referenced by checkProblemIntegrity(), and FEProblemBase().

◆ _kernel_coverage_check

CoverageCheckMode FEProblemBase::_kernel_coverage_check
protected

Determines whether and which subdomains are to be checked to ensure that they have an active kernel.

Definition at line 3471 of file FEProblemBase.h.

Referenced by checkProblemIntegrity(), FEProblemBase(), setKernelCoverageCheck(), and setKernelCoverageCheck().

◆ _kokkos_assembly

Moose::Kokkos::Assembly FEProblemBase::_kokkos_assembly
protected

Definition at line 3247 of file FEProblemBase.h.

Referenced by kokkosAssembly(), and kokkosAssembly().

◆ _kokkos_bnd_material_props

Moose::Kokkos::MaterialPropertyStorage& FEProblemBase::_kokkos_bnd_material_props
protected

◆ _kokkos_fe_systems

Moose::Kokkos::Array<Moose::Kokkos::FESystem> FEProblemBase::_kokkos_fe_systems
protected

FESystem array - sparsely populated (only slots for systems needing a Kokkos::FESystem)

Definition at line 3236 of file FEProblemBase.h.

Referenced by getKokkosFESystems(), and getKokkosFESystems().

◆ _kokkos_functions

MooseObjectWarehouse<Moose::FunctionBase> FEProblemBase::_kokkos_functions
protected

◆ _kokkos_material_props

Moose::Kokkos::MaterialPropertyStorage& FEProblemBase::_kokkos_material_props
protected

◆ _kokkos_materials

MaterialWarehouse FEProblemBase::_kokkos_materials
protected

Definition at line 3297 of file FEProblemBase.h.

Referenced by getKokkosMaterialsWarehouse(), and updateActiveObjects().

◆ _kokkos_mesh_initialization_hooks

std::vector<std::function<void()> > FEProblemBase::_kokkos_mesh_initialization_hooks
private

Container holding hooks for functions that need to be called after Kokkos mesh initialization.

Definition at line 3733 of file FEProblemBase.h.

Referenced by addKokkosMeshInitializationHook().

◆ _kokkos_neighbor_material_props

Moose::Kokkos::MaterialPropertyStorage& FEProblemBase::_kokkos_neighbor_material_props
protected

◆ _kokkos_systems

Moose::Kokkos::Array<Moose::Kokkos::System> FEProblemBase::_kokkos_systems
protected

System array - sparsely populated (only slots for systems needing a Kokkos::System)

Definition at line 3234 of file FEProblemBase.h.

Referenced by getKokkosSystems(), and getKokkosSystems().

◆ _line_search

std::shared_ptr<LineSearch> FEProblemBase::_line_search
protected

◆ _linear_convergence_names

std::optional<std::vector<ConvergenceName> > FEProblemBase::_linear_convergence_names
protected

Linear system(s) convergence name(s) (if any)

Definition at line 3144 of file FEProblemBase.h.

Referenced by getLinearConvergenceNames(), hasLinearConvergenceObjects(), and setLinearConvergenceNames().

◆ _linear_matrix_tags

std::set<TagID> FEProblemBase::_linear_matrix_tags
protected

Temporary storage for filtered matrix tags for linear systems.

Definition at line 3158 of file FEProblemBase.h.

Referenced by computeLinearSystemSys().

◆ _linear_sys_name_to_num

std::map<LinearSystemName, unsigned int> FEProblemBase::_linear_sys_name_to_num
protected

Map from linear system name to number.

Definition at line 3188 of file FEProblemBase.h.

Referenced by FEProblemBase(), and linearSysNum().

◆ _linear_sys_names

const std::vector<LinearSystemName> FEProblemBase::_linear_sys_names
protected

◆ _linear_systems

std::vector<std::shared_ptr<LinearSystem> > FEProblemBase::_linear_systems
protected

◆ _linear_vector_tags

std::set<TagID> FEProblemBase::_linear_vector_tags
protected

Temporary storage for filtered vector tags for linear systems.

Definition at line 3155 of file FEProblemBase.h.

Referenced by computeLinearSystemSys().

◆ _map_block_material_props

std::map<SubdomainID, std::set<std::string> > SubProblem::_map_block_material_props
protectedinherited

Map of material properties (block_id -> list of properties)

Definition at line 1067 of file SubProblem.h.

Referenced by SubProblem::checkBlockMatProps(), SubProblem::getMaterialPropertyBlocks(), SubProblem::hasBlockMaterialProperty(), and SubProblem::storeSubdomainMatPropName().

◆ _map_block_material_props_check

std::map<SubdomainID, std::multimap<std::string, std::string> > SubProblem::_map_block_material_props_check
protectedinherited

Data structures of the requested material properties.

We store them in a map from boundary/block id to multimap. Each of the multimaps is a list of requestor object names to material property names.

Definition at line 1085 of file SubProblem.h.

Referenced by SubProblem::checkBlockMatProps(), and SubProblem::storeSubdomainDelayedCheckMatProp().

◆ _map_boundary_material_props

std::map<BoundaryID, std::set<std::string> > SubProblem::_map_boundary_material_props
protectedinherited

Map for boundary material properties (boundary_id -> list of properties)

Definition at line 1070 of file SubProblem.h.

Referenced by SubProblem::checkBoundaryMatProps(), SubProblem::getMaterialPropertyBoundaryIDs(), SubProblem::hasBoundaryMaterialProperty(), and SubProblem::storeBoundaryMatPropName().

◆ _map_boundary_material_props_check

std::map<BoundaryID, std::multimap<std::string, std::string> > SubProblem::_map_boundary_material_props_check
protectedinherited

◆ _markers

MooseObjectWarehouse<Marker> FEProblemBase::_markers
protected

◆ _material_coverage_blocks

std::vector<SubdomainName> FEProblemBase::_material_coverage_blocks
protected

Definition at line 3487 of file FEProblemBase.h.

Referenced by checkProblemIntegrity(), and FEProblemBase().

◆ _material_coverage_check

CoverageCheckMode FEProblemBase::_material_coverage_check
protected

Determines whether and which subdomains are to be checked to ensure that they have an active material.

Definition at line 3486 of file FEProblemBase.h.

Referenced by checkProblemIntegrity(), FEProblemBase(), setMaterialCoverageCheck(), and setMaterialCoverageCheck().

◆ _material_dependency_check

const bool FEProblemBase::_material_dependency_check
protected

Determines whether a check to verify material dependencies on every subdomain.

Definition at line 3496 of file FEProblemBase.h.

Referenced by checkProblemIntegrity().

◆ _material_prop_registry

MaterialPropertyRegistry FEProblemBase::_material_prop_registry
protected

Definition at line 3279 of file FEProblemBase.h.

Referenced by checkDependMaterialsHelper(), and getMaterialPropertyRegistry().

◆ _material_property_requested

std::set<std::string> SubProblem::_material_property_requested
protectedinherited

set containing all material property names that have been requested by getMaterialProperty*

Definition at line 1077 of file SubProblem.h.

Referenced by SubProblem::isMatPropRequested(), and SubProblem::markMatPropRequested().

◆ _material_props

MaterialPropertyStorage& FEProblemBase::_material_props
protected

◆ _materials

MaterialWarehouse FEProblemBase::_materials
protected

◆ _matrix_tag_id_to_tag_name

std::map<TagID, TagName> SubProblem::_matrix_tag_id_to_tag_name
protectedinherited

Reverse map.

Definition at line 1059 of file SubProblem.h.

Referenced by SubProblem::addMatrixTag(), SubProblem::matrixTagExists(), and SubProblem::matrixTagName().

◆ _matrix_tag_name_to_tag_id

std::map<TagName, TagID> SubProblem::_matrix_tag_name_to_tag_id
protectedinherited

◆ _max_qps

unsigned int FEProblemBase::_max_qps
protected

Maximum number of quadrature points used in the problem.

Definition at line 3507 of file FEProblemBase.h.

Referenced by getMaxQps(), reinitDirac(), and updateMaxQps().

◆ _max_scalar_order

libMesh::Order FEProblemBase::_max_scalar_order
protected

Maximum scalar variable order.

Definition at line 3510 of file FEProblemBase.h.

Referenced by addAuxScalarVariable(), and getMaxScalarOrder().

◆ _mesh

MooseMesh& FEProblemBase::_mesh
protected

◆ _mesh_divisions

MooseObjectWarehouse<MeshDivision> FEProblemBase::_mesh_divisions
protected

Warehouse to store mesh divisions NOTE: this could probably be moved to the MooseMesh instead of the Problem Time (and people's uses) will tell where this fits best.

Definition at line 3253 of file FEProblemBase.h.

Referenced by addMeshDivision(), and getMeshDivision().

◆ _metaname

const RestartableDataMapName Restartable::_metaname
privateinherited

Restartable metadata name.

Definition at line 247 of file Restartable.h.

Referenced by Restartable::registerRestartableDataOnApp().

◆ _mortar_data

std::unique_ptr<MortarInterfaceWarehouse> FEProblemBase::_mortar_data
protected

◆ _multi_apps

ExecuteMooseObjectWarehouse<MultiApp> FEProblemBase::_multi_apps
protected

◆ _multiapp_fixed_point_convergence_name

std::optional<ConvergenceName> FEProblemBase::_multiapp_fixed_point_convergence_name
protected

◆ _name

const std::string& MooseBase::_name
protectedinherited

The name of this class.

Definition at line 381 of file MooseBase.h.

Referenced by AddFieldSplitAction::act(), AddBCAction::act(), AddConstraintAction::act(), AddControlAction::act(), AddConvergenceAction::act(), AddCorrectorAction::act(), AddDamperAction::act(), AddDGKernelAction::act(), AddDiracKernelAction::act(), AddDistributionAction::act(), AddFunctionAction::act(), AddFunctorMaterialAction::act(), AddFVBCAction::act(), AddFVGradientMethodAction::act(), AddFVInitialConditionAction::act(), AddFVInterfaceKernelAction::act(), AddFVInterpolationMethodAction::act(), AddFVKernelAction::act(), AddHDGKernelAction::act(), AddIndicatorAction::act(), AddInitialConditionAction::act(), AddInterfaceKernelAction::act(), AddKernelAction::act(), AddLinearFVBCAction::act(), AddLinearFVKernelAction::act(), AddMarkerAction::act(), AddMaterialAction::act(), AddMeshDivisionAction::act(), AddMeshGeneratorAction::act(), AddMeshModifiersAction::act(), AddMultiAppAction::act(), AddNodalKernelAction::act(), AddOutputAction::act(), AddPositionsAction::act(), AddPostprocessorAction::act(), AddReporterAction::act(), AddSamplerAction::act(), AddScalarKernelAction::act(), AddTimesAction::act(), AddTimeStepperAction::act(), AddTransferAction::act(), AddUserObjectAction::act(), AddVectorPostprocessorAction::act(), PartitionerAction::act(), ReadExecutorParamsAction::act(), SetupPreconditionerAction::act(), SetupTimeIntegratorAction::act(), AddMFEMComplexBCComponentAction::act(), AddMFEMComplexKernelComponentAction::act(), AddMFEMFESpaceAction::act(), AddMFEMFESpaceHierarchyAction::act(), AddMFEMProblemComposerAction::act(), AddMFEMSolverAction::act(), AddMFEMSubMeshAction::act(), ADPiecewiseLinearInterpolationMaterial::ADPiecewiseLinearInterpolationMaterial(), BatchMeshGeneratorAction::BatchMeshGeneratorAction(), PiecewiseLinearBase::buildInterpolation(), CombinerGenerator::CombinerGenerator(), Executor::Executor(), ExtraIDIntegralReporter::ExtraIDIntegralReporter(), MultiApp::fillPositions(), CentroidMultiApp::fillPositions(), QuadraturePointMultiApp::fillPositions(), FunctionDT::FunctionDT(), FillBetweenCurvesGenerator::generate(), FillBetweenPointVectorsGenerator::generate(), FillBetweenSidesetsGenerator::generate(), MooseBase::MooseBase(), MooseBase::name(), ReferenceResidualConvergence::nonlinearConvergenceSetup(), ParsedFunctorMaterialTempl< is_ad >::ParsedFunctorMaterialTempl(), PiecewiseBilinear::PiecewiseBilinear(), PiecewiseLinearInterpolationMaterial::PiecewiseLinearInterpolationMaterial(), PiecewiseBase::setData(), and AddVariableAction::varName().

◆ _need_to_add_default_multiapp_fixed_point_convergence

bool FEProblemBase::_need_to_add_default_multiapp_fixed_point_convergence
protected

Flag that the problem needs to add the default fixed point convergence.

Definition at line 3174 of file FEProblemBase.h.

Referenced by needToAddDefaultMultiAppFixedPointConvergence(), and setNeedToAddDefaultMultiAppFixedPointConvergence().

◆ _need_to_add_default_nonlinear_convergence

bool FEProblemBase::_need_to_add_default_nonlinear_convergence
protected

Flag that the problem needs to add the default nonlinear convergence.

Definition at line 3172 of file FEProblemBase.h.

Referenced by needToAddDefaultNonlinearConvergence(), and setNeedToAddDefaultNonlinearConvergence().

◆ _need_to_add_default_steady_state_convergence

bool FEProblemBase::_need_to_add_default_steady_state_convergence
protected

Flag that the problem needs to add the default steady convergence.

Definition at line 3176 of file FEProblemBase.h.

Referenced by needToAddDefaultSteadyStateConvergence(), and setNeedToAddDefaultSteadyStateConvergence().

◆ _needs_old_newton_iter

bool FEProblemBase::_needs_old_newton_iter
protected

Indicates that we need to compute variable values for previous Newton iteration.

Definition at line 3446 of file FEProblemBase.h.

◆ _neighbor_material_props

MaterialPropertyStorage& FEProblemBase::_neighbor_material_props
protected

◆ _nl

std::vector<std::shared_ptr<NonlinearSystemBase> > FEProblemBase::_nl
protected

◆ _nl_evaluable_local_elem_range

std::unique_ptr<libMesh::ConstElemRange> FEProblemBase::_nl_evaluable_local_elem_range
protected

Definition at line 3551 of file FEProblemBase.h.

Referenced by getNonlinearEvaluableElementRange(), and meshChanged().

◆ _nl_sys_name_to_num

std::map<NonlinearSystemName, unsigned int> FEProblemBase::_nl_sys_name_to_num
protected

Map from nonlinear system name to number.

Definition at line 3206 of file FEProblemBase.h.

Referenced by FEProblemBase(), and nlSysNum().

◆ _nl_sys_names

const std::vector<NonlinearSystemName> FEProblemBase::_nl_sys_names
protected

◆ _nonlinear_convergence_names

std::optional<std::vector<ConvergenceName> > FEProblemBase::_nonlinear_convergence_names
protected

Nonlinear system(s) convergence name(s)

Definition at line 3142 of file FEProblemBase.h.

Referenced by getNonlinearConvergenceNames(), and setNonlinearConvergenceNames().

◆ _nonlocal_cm

std::vector<libMesh::CouplingMatrix> FEProblemBase::_nonlocal_cm
private

nonlocal coupling matrix

Definition at line 3720 of file FEProblemBase.h.

Referenced by addJacobianBlockTags(), FEProblemBase(), nonlocalCouplingMatrix(), prepare(), and setNonlocalCouplingMatrix().

◆ _nonlocal_integrated_bcs

MooseObjectWarehouse<IntegratedBCBase> FEProblemBase::_nonlocal_integrated_bcs
protected

nonlocal integrated_bcs

Definition at line 3269 of file FEProblemBase.h.

Referenced by checkNonlocalCoupling(), setNonlocalCouplingMatrix(), and timestepSetup().

◆ _nonlocal_kernels

MooseObjectWarehouse<KernelBase> FEProblemBase::_nonlocal_kernels
protected

nonlocal kernels

Definition at line 3266 of file FEProblemBase.h.

Referenced by checkNonlocalCoupling(), setNonlocalCouplingMatrix(), and timestepSetup().

◆ _not_zeroed_tagged_vectors

std::unordered_set<TagID> SubProblem::_not_zeroed_tagged_vectors
protectedinherited

the list of vector tags that will not be zeroed when all other tags are

Definition at line 1132 of file SubProblem.h.

Referenced by SubProblem::addNotZeroedVectorTag(), restoreSolutions(), and SubProblem::vectorTagNotZeroed().

◆ _notify_when_mesh_changes

std::vector<MeshChangedInterface *> FEProblemBase::_notify_when_mesh_changes
protected

Objects to be notified when the mesh changes.

Definition at line 3347 of file FEProblemBase.h.

Referenced by meshChanged(), and notifyWhenMeshChanges().

◆ _notify_when_mesh_displaces

std::vector<MeshDisplacedInterface *> FEProblemBase::_notify_when_mesh_displaces
protected

Objects to be notified when the mesh displaces.

Definition at line 3350 of file FEProblemBase.h.

Referenced by meshDisplaced(), and notifyWhenMeshDisplaces().

◆ _num_concurrent_multiapps

const unsigned int FEProblemBase::_num_concurrent_multiapps
protected

Number of concurrent applications being solved at the same time.

Definition at line 3332 of file FEProblemBase.h.

Referenced by execMultiApps(), numConcurrentMultiApps(), and partitionConcurrentMultiApps().

◆ _num_grid_steps

unsigned int FEProblemBase::_num_grid_steps
private

Number of steps in a grid sequence.

Definition at line 3686 of file FEProblemBase.h.

Referenced by addAnyRedistributers(), checkProblemIntegrity(), numGridSteps(), and timestepSetup().

◆ _num_linear_sys

const std::size_t FEProblemBase::_num_linear_sys
protected

The number of linear systems.

Definition at line 3182 of file FEProblemBase.h.

Referenced by FEProblem::FEProblem(), FEProblemBase(), numLinearSystems(), and numSolverSystems().

◆ _num_nl_sys

const std::size_t FEProblemBase::_num_nl_sys
protected

◆ _parallel_barrier_messaging

bool FEProblemBase::_parallel_barrier_messaging
protected

Whether or not information about how many transfers have completed is printed.

Definition at line 3519 of file FEProblemBase.h.

Referenced by backupMultiApps(), execMultiApps(), execMultiAppTransfers(), finishMultiAppStep(), restoreMultiApps(), and setParallelBarrierMessaging().

◆ _parent

const ParallelParamObject& DataFileInterface::_parent
privateinherited

◆ _pars

const InputParameters& MooseBase::_pars
protectedinherited

The object's parameters.

Definition at line 384 of file MooseBase.h.

Referenced by AddAuxKernelAction::act(), AddFVICAction::act(), AddICAction::act(), CommonOutputAction::act(), ComposeTimeStepperAction::act(), CreateProblemAction::act(), CreateProblemDefaultAction::act(), SetupDebugAction::act(), SetupMeshAction::act(), AddMFEMComplexBCComponentAction::act(), AddMFEMComplexKernelComponentAction::act(), FunctorMaterial::addFunctorPropertyByBlocks(), BreakMeshByBlockGenerator::BreakMeshByBlockGenerator(), PNGOutput::calculateRescalingValues(), MooseBase::callMooseError(), MooseBase::connectControllableParams(), Console::Console(), MooseApp::copyInputs(), MaterialBase::declareADProperty(), Moose::Kokkos::MaterialBase::declareKokkosOnDemandProperty(), Moose::Kokkos::MaterialBase::declareKokkosProperty(), MaterialBase::declareProperty(), FEProblemSolve::FEProblemSolve(), FileMeshGenerator::generate(), MooseBase::getBase(), MooseBase::getCheckedPointerParam(), MaterialBase::getGenericZeroMaterialProperty(), MooseBase::getHitNode(), MeshGenerator::getMeshGeneratorNameFromParam(), MeshGenerator::getMeshGeneratorNamesFromParam(), MooseBase::getParam(), MooseBase::getParam(), MooseBase::hasBase(), MeshGenerator::hasGenerateCSG(), MeshGenerator::hasGenerateData(), AddVariableAction::init(), AdvancedOutput::initExecutionTypes(), EigenProblemSolve::initialSetup(), Console::initialSetup(), MooseBase::isParamSetByUser(), MooseBase::isParamValid(), MultiApp::keepSolutionDuringRestore(), MooseBase::messagePrefix(), MooseBase::MooseBase(), MultiSystemSolveObject::MultiSystemSolveObject(), MooseApp::outputMachineReadableData(), MooseBase::paramError(), MooseBase::parameters(), MooseBase::paramInfo(), MooseBase::paramWarning(), MooseMesh::prepare(), MooseBase::queryParam(), MooseMesh::setCoordSystem(), MooseMesh::setPartitionerHelper(), SetupMeshAction::setupMesh(), TransientBase::setupTimeIntegrator(), MooseApp::showInputs(), and MooseBase::uniqueName().

◆ _pbblf_functors

std::vector<std::map<std::string, std::unique_ptr<Moose::FunctorAbstract> > > SubProblem::_pbblf_functors
privateinherited

◆ _petsc_option_data_base

PetscOptions FEProblemBase::_petsc_option_data_base
protected

◆ _petsc_options

Moose::PetscSupport::PetscOptions FEProblemBase::_petsc_options
protected

PETSc option storage.

Definition at line 3540 of file FEProblemBase.h.

Referenced by getPetscOptions(), solve(), and solveLinearSystem().

◆ _pg_moose_app

MooseApp& PerfGraphInterface::_pg_moose_app
protectedinherited

The MooseApp that owns the PerfGraph.

Definition at line 135 of file PerfGraphInterface.h.

Referenced by PerfGraphInterface::perfGraph().

◆ _phi_zero

std::vector<VariablePhiValue> FEProblemBase::_phi_zero

Definition at line 2580 of file FEProblemBase.h.

Referenced by FEProblemBase(), and ~FEProblemBase().

◆ _point_zero

std::vector<Point> FEProblemBase::_point_zero

Definition at line 2588 of file FEProblemBase.h.

Referenced by FEProblemBase().

◆ _prefix

const std::string PerfGraphInterface::_prefix
protectedinherited

A prefix to use for all sections.

Definition at line 138 of file PerfGraphInterface.h.

Referenced by PerfGraphInterface::timedSectionName().

◆ _preserve_matrix_sparsity_pattern

bool FEProblemBase::_preserve_matrix_sparsity_pattern
private

Whether to preserve the system matrix / Jacobian sparsity pattern, using 0-valued entries usually.

Definition at line 3647 of file FEProblemBase.h.

Referenced by preserveMatrixSparsityPattern(), and setPreserveMatrixSparsityPattern().

◆ _previous_multiapp_fp_aux_solution_required

bool FEProblemBase::_previous_multiapp_fp_aux_solution_required
protected

Indicates we need to save the previous multiapp fixed-point iteration auxiliary variable values.

Definition at line 3453 of file FEProblemBase.h.

Referenced by needsPreviousMultiAppFixedPointIterationAuxiliary(), and needsPreviousMultiAppFixedPointIterationAuxiliary().

◆ _previous_multiapp_fp_nl_solution_required

std::vector<bool> FEProblemBase::_previous_multiapp_fp_nl_solution_required
protected

Indicates we need to save the previous multiapp fixed-point iteration solver variable values.

Definition at line 3451 of file FEProblemBase.h.

Referenced by needsPreviousMultiAppFixedPointIterationSolution(), and needsPreviousMultiAppFixedPointIterationSolution().

◆ _previous_multisystem_fp_aux_solution_required

bool FEProblemBase::_previous_multisystem_fp_aux_solution_required
protected

Indicates we need to save the previous multi-system fixed-point iteration auxiliary variable values.

Definition at line 3457 of file FEProblemBase.h.

Referenced by needsPreviousMultiSystemFixedPointIterationAuxiliary(), and needsPreviousMultiSystemFixedPointIterationAuxiliary().

◆ _previous_multisystem_fp_nl_solution_required

std::vector<bool> FEProblemBase::_previous_multisystem_fp_nl_solution_required
protected

Indicates we need to save the previous multi-system fixed-point iteration solver variable values.

Definition at line 3455 of file FEProblemBase.h.

Referenced by needsPreviousMultiSystemFixedPointIterationSolution(), and needsPreviousMultiSystemFixedPointIterationSolution().

◆ _previous_nl_solution_required

bool FEProblemBase::_previous_nl_solution_required
protected

Indicates we need to save the previous NL iteration variable values.

Definition at line 3449 of file FEProblemBase.h.

Referenced by createTagSolutions().

◆ _print_execution_on

ExecFlagEnum FEProblemBase::_print_execution_on
private

When to print the execution of loops.

Definition at line 3702 of file FEProblemBase.h.

Referenced by setExecutionPrinting(), and shouldPrintExecution().

◆ _random_data_objects

std::map<std::string, std::unique_ptr<RandomData> > FEProblemBase::_random_data_objects
protected

A map of objects that consume random numbers.

Definition at line 3335 of file FEProblemBase.h.

Referenced by computeJacobianTags(), computeLinearSystemTags(), computeResidualAndJacobian(), computeResidualTags(), registerRandomInterface(), and timestepSetup().

◆ _real_zero

std::vector<Real> FEProblemBase::_real_zero

Convenience zeros.

Definition at line 2577 of file FEProblemBase.h.

Referenced by FEProblemBase().

◆ _regard_general_exceptions_as_errors

const bool FEProblemBase::_regard_general_exceptions_as_errors
private

If we catch an exception during residual/Jacobian evaluaton for which we don't have specific handling, immediately error instead of allowing the time step to be cut.

Definition at line 3717 of file FEProblemBase.h.

Referenced by handleException().

◆ _reinit_displaced_elem

bool FEProblemBase::_reinit_displaced_elem
protected

◆ _reinit_displaced_face

bool FEProblemBase::_reinit_displaced_face
protected

◆ _reinit_displaced_neighbor

bool FEProblemBase::_reinit_displaced_neighbor
protected

◆ _reporter_data

ReporterData FEProblemBase::_reporter_data
protected

◆ _req

The EquationSystems object, wrapped for restart.

Definition at line 3095 of file FEProblemBase.h.

Referenced by es(), and getRestartableEquationSystems().

◆ _requires_nonlocal_coupling

bool FEProblemBase::_requires_nonlocal_coupling
private

nonlocal coupling requirement flag

Definition at line 3723 of file FEProblemBase.h.

Referenced by checkNonlocalCoupling(), checkNonlocalCouplingRequirement(), and timestepSetup().

◆ _restartable_app

MooseApp& Restartable::_restartable_app
protectedinherited

Reference to the application.

Definition at line 234 of file Restartable.h.

Referenced by Restartable::registerRestartableDataOnApp(), and Restartable::registerRestartableNameWithFilterOnApp().

◆ _restartable_name

std::string Restartable::_restartable_name
privateinherited

The name of the object.

Definition at line 250 of file Restartable.h.

Referenced by Restartable::declareRestartableDataWithObjectNameWithContext(), and Restartable::restartableName().

◆ _restartable_read_only

const bool Restartable::_restartable_read_only
protectedinherited

Flag for toggling read only status (see ReporterData)

Definition at line 243 of file Restartable.h.

Referenced by Restartable::registerRestartableDataOnApp().

◆ _restartable_system_name

const std::string Restartable::_restartable_system_name
protectedinherited

The system name this object is in.

Definition at line 237 of file Restartable.h.

Referenced by Restartable::restartableName().

◆ _restartable_tid

const THREAD_ID Restartable::_restartable_tid
protectedinherited

The thread ID for this object.

Definition at line 240 of file Restartable.h.

Referenced by Restartable::declareRestartableDataHelper().

◆ _restore_original_nonzero_pattern

const bool FEProblemBase::_restore_original_nonzero_pattern
private

Whether we should restore the original nonzero pattern for every Jacobian evaluation.

This option is useful if the sparsity pattern is constantly changing and you are using hash table assembly or if you wish to continually restore the matrix to the originally preallocated sparsity pattern computed by relationship managers.

Definition at line 3643 of file FEProblemBase.h.

Referenced by computeJacobianTags(), and restoreOriginalNonzeroPattern().

◆ _root_alg_gf_to_sys_clones

std::unordered_map<libMesh::GhostingFunctor *, std::vector<std::shared_ptr<libMesh::GhostingFunctor> > > SubProblem::_root_alg_gf_to_sys_clones
privateinherited

A map from a root algebraic ghosting functor, e.g.

the ghosting functor passed into removeAlgebraicGhostingFunctor, to its clones in other systems, e.g. systems other than system 0

Definition at line 1210 of file SubProblem.h.

Referenced by SubProblem::cloneAlgebraicGhostingFunctor(), and SubProblem::removeAlgebraicGhostingFunctor().

◆ _root_coupling_gf_to_sys_clones

std::unordered_map<libMesh::GhostingFunctor *, std::vector<std::shared_ptr<libMesh::GhostingFunctor> > > SubProblem::_root_coupling_gf_to_sys_clones
privateinherited

A map from a root coupling ghosting functor, e.g.

the ghosting functor passed into removeCouplingGhostingFunctor, to its clones in other systems, e.g. systems other than system 0

Definition at line 1217 of file SubProblem.h.

Referenced by SubProblem::cloneCouplingGhostingFunctor(), and SubProblem::removeCouplingGhostingFunctor().

◆ _safe_access_tagged_matrices

bool SubProblem::_safe_access_tagged_matrices
protectedinherited

Is it safe to retrieve data from tagged matrices.

Definition at line 1123 of file SubProblem.h.

Referenced by computeJacobianTags(), computeLinearSystemTags(), computeResidualAndJacobian(), resetState(), and SubProblem::safeAccessTaggedMatrices().

◆ _safe_access_tagged_vectors

bool SubProblem::_safe_access_tagged_vectors
protectedinherited

Is it safe to retrieve data from tagged vectors.

Definition at line 1126 of file SubProblem.h.

Referenced by computeLinearSystemTags(), computeResidualAndJacobian(), computeResidualTags(), resetState(), and SubProblem::safeAccessTaggedVectors().

◆ _scalar_ics

ScalarInitialConditionWarehouse FEProblemBase::_scalar_ics
protected

◆ _scalar_zero

std::vector<VariableValue> FEProblemBase::_scalar_zero

Definition at line 2578 of file FEProblemBase.h.

Referenced by FEProblemBase(), reinitDirac(), updateMaxQps(), and ~FEProblemBase().

◆ _second_phi_zero

std::vector<VariablePhiSecond> FEProblemBase::_second_phi_zero

Definition at line 2587 of file FEProblemBase.h.

Referenced by FEProblemBase(), and ~FEProblemBase().

◆ _second_zero

std::vector<VariableSecond> FEProblemBase::_second_zero

Definition at line 2585 of file FEProblemBase.h.

Referenced by FEProblemBase(), reinitDirac(), updateMaxQps(), and ~FEProblemBase().

◆ _show_chain_control_data

bool SubProblem::_show_chain_control_data
privateinherited

Whether to output a list of all the chain control data.

Definition at line 1182 of file SubProblem.h.

Referenced by SubProblem::initialSetup(), SubProblem::setChainControlDataOutput(), and SubProblem::timestepSetup().

◆ _show_functors

bool SubProblem::_show_functors
privateinherited

Whether to output a list of the functors used and requested (currently only at initialSetup)

Definition at line 1179 of file SubProblem.h.

Referenced by SubProblem::initialSetup(), and SubProblem::setFunctorOutput().

◆ _show_invalid_solution_console

const bool FEProblemBase::_show_invalid_solution_console
private

Definition at line 3654 of file FEProblemBase.h.

Referenced by showInvalidSolutionConsole().

◆ _si_moose_base

const MooseBase& SolutionInvalidInterface::_si_moose_base
privateinherited

◆ _si_problem

const FEProblemBase* SolutionInvalidInterface::_si_problem
privateinherited

A pointer to FEProblem base.

Definition at line 114 of file SolutionInvalidInterface.h.

Referenced by SolutionInvalidInterface::flagInvalidSolutionInternal().

◆ _side_uo_interface_mat_prop_integrity_check

const bool FEProblemBase::_side_uo_interface_mat_prop_integrity_check
protected

Whether to check that side user objects do not consume interface material properties.

Definition at line 3483 of file FEProblemBase.h.

Referenced by sideUOInterfaceMatPropIntegrityCheck().

◆ _skip_exception_check

bool FEProblemBase::_skip_exception_check
protected

If or not skip 'exception and stop solve'.

Definition at line 3431 of file FEProblemBase.h.

Referenced by checkExceptionAndStopSolve(), initialSetup(), and skipExceptionCheck().

◆ _skip_nl_system_check

const bool FEProblemBase::_skip_nl_system_check
private

Definition at line 3651 of file FEProblemBase.h.

Referenced by checkProblemIntegrity(), and init().

◆ _snesmf_reuse_base

bool FEProblemBase::_snesmf_reuse_base
protected

If or not to resuse the base vector for matrix-free calculation.

Definition at line 3428 of file FEProblemBase.h.

Referenced by setSNESMFReuseBase(), and useSNESMFReuseBase().

◆ _snesmf_reuse_base_set_by_user

bool FEProblemBase::_snesmf_reuse_base_set_by_user
protected

If or not _snesmf_reuse_base is set by user.

Definition at line 3434 of file FEProblemBase.h.

Referenced by isSNESMFReuseBaseSetbyUser(), and setSNESMFReuseBase().

◆ _solve

const bool& FEProblemBase::_solve
protected

Whether or not to actually solve the nonlinear system.

Definition at line 3161 of file FEProblemBase.h.

Referenced by checkProblemIntegrity(), FEProblemBase(), init(), shouldSolve(), solve(), EigenProblem::solve(), solveLinearSystem(), EigenProblem::solverSystemConverged(), and solverSystemConverged().

◆ _solver_params

std::vector<SolverParams> FEProblemBase::_solver_params
protected

Definition at line 3468 of file FEProblemBase.h.

Referenced by FEProblemBase(), solve(), solveLinearSystem(), and solverParams().

◆ _solver_sys_name_to_num

std::map<SolverSystemName, unsigned int> FEProblemBase::_solver_sys_name_to_num
protected

Map connecting solver system names with their respective systems.

Definition at line 3221 of file FEProblemBase.h.

Referenced by FEProblemBase(), and solverSysNum().

◆ _solver_sys_names

std::vector<SolverSystemName> FEProblemBase::_solver_sys_names
protected

The union of nonlinear and linear system names.

Definition at line 3224 of file FEProblemBase.h.

Referenced by FEProblemBase(), getSolverSystemNames(), getSystemBase(), Moose::PetscSupport::setSinglePetscOption(), and solverSysNum().

◆ _solver_systems

std::vector<std::shared_ptr<SolverSystem> > FEProblemBase::_solver_systems
protected

◆ _solver_var_to_sys_num

std::map<SolverVariableName, unsigned int> FEProblemBase::_solver_var_to_sys_num
protected

Map connecting variable names with their respective solver systems.

Definition at line 3218 of file FEProblemBase.h.

Referenced by addVariable(), and determineSolverSystem().

◆ _started_initial_setup

bool FEProblemBase::_started_initial_setup
private

At or beyond initialSteup stage.

Definition at line 3658 of file FEProblemBase.h.

Referenced by initialSetup(), and startedInitialSetup().

◆ _steady_state_convergence_name

std::optional<ConvergenceName> FEProblemBase::_steady_state_convergence_name
protected

Steady-state detection convergence name.

Definition at line 3148 of file FEProblemBase.h.

Referenced by getSteadyStateConvergenceName(), hasSetSteadyStateConvergenceName(), and setSteadyStateConvergenceName().

◆ _subspace_dim

std::map<std::string, unsigned int> FEProblemBase::_subspace_dim
protected

Dimension of the subspace spanned by the vectors with a given prefix.

Definition at line 3240 of file FEProblemBase.h.

Referenced by initNullSpaceVectors(), and subspaceDim().

◆ _t_step

int& FEProblemBase::_t_step
protected

Definition at line 3167 of file FEProblemBase.h.

Referenced by FEProblemBase(), timeStep(), and timestepSetup().

◆ _termination_requested

bool Problem::_termination_requested
protectedinherited

True if termination of the solve has been requested.

Definition at line 58 of file Problem.h.

Referenced by Problem::isSolveTerminationRequested(), and Problem::terminateSolve().

◆ _time

Real& FEProblemBase::_time
protected

◆ _time_old

Real& FEProblemBase::_time_old
protected

Definition at line 3165 of file FEProblemBase.h.

Referenced by FEProblemBase(), and timeOld().

◆ _time_older

Real& FEProblemBase::_time_older
protected

Definition at line 3166 of file FEProblemBase.h.

Referenced by FEProblemBase(), and timeOlder().

◆ _to_multi_app_transfers

ExecuteMooseObjectWarehouse<Transfer> FEProblemBase::_to_multi_app_transfers
protected

Transfers executed just before MultiApps to transfer data to them.

Definition at line 3323 of file FEProblemBase.h.

Referenced by addTransfer(), execMultiAppTransfers(), getMultiAppTransferWarehouse(), getTransfers(), getTransfers(), and updateActiveObjects().

◆ _transfers

ExecuteMooseObjectWarehouse<Transfer> FEProblemBase::_transfers
protected

Normal Transfers.

Definition at line 3320 of file FEProblemBase.h.

Referenced by addTransfer(), and updateActiveObjects().

◆ _transient

bool FEProblemBase::_transient
protected

Definition at line 3163 of file FEProblemBase.h.

Referenced by isTransient(), and transient().

◆ _transient_multi_apps

ExecuteMooseObjectWarehouse<TransientMultiApp> FEProblemBase::_transient_multi_apps
protected

Storage for TransientMultiApps (only needed for calling 'computeDT')

Definition at line 3317 of file FEProblemBase.h.

Referenced by addMultiApp(), computeMultiAppsDT(), and updateActiveObjects().

◆ _trust_user_coupling_matrix

bool FEProblemBase::_trust_user_coupling_matrix = false
private

Whether to trust the user coupling matrix no matter what.

See https://github.com/idaholab/moose/issues/16395 for detailed background

Definition at line 3690 of file FEProblemBase.h.

Referenced by setCoupling(), and trustUserCouplingMatrix().

◆ _type

const std::string& MooseBase::_type
protectedinherited

◆ _typed_vector_tags

std::vector<std::vector<VectorTag> > SubProblem::_typed_vector_tags
privateinherited

The vector tags associated with each VectorTagType This is kept separate from _vector_tags for quick access into typed vector tags in places where we don't want to build a new vector every call (like in residual evaluation)

Definition at line 1192 of file SubProblem.h.

Referenced by SubProblem::addVectorTag(), SubProblem::getVectorTags(), and SubProblem::verifyVectorTags().

◆ _u_dot_old_requested

bool FEProblemBase::_u_dot_old_requested
private

Whether old solution time derivative needs to be stored.

Definition at line 3670 of file FEProblemBase.h.

Referenced by setUDotOldRequested(), and uDotOldRequested().

◆ _u_dot_requested

bool FEProblemBase::_u_dot_requested
private

Whether solution time derivative needs to be stored.

Definition at line 3664 of file FEProblemBase.h.

Referenced by setUDotRequested(), uDotOldRequested(), and uDotRequested().

◆ _u_dotdot_old_requested

bool FEProblemBase::_u_dotdot_old_requested
private

Whether old solution second time derivative needs to be stored.

Definition at line 3673 of file FEProblemBase.h.

Referenced by setUDotDotOldRequested(), and uDotDotOldRequested().

◆ _u_dotdot_requested

bool FEProblemBase::_u_dotdot_requested
private

Whether solution second time derivative needs to be stored.

Definition at line 3667 of file FEProblemBase.h.

Referenced by setUDotDotRequested(), uDotDotOldRequested(), and uDotDotRequested().

◆ _uo_aux_state_check

const bool FEProblemBase::_uo_aux_state_check
protected

Whether or not checking the state of uo/aux evaluation.

Definition at line 3499 of file FEProblemBase.h.

Referenced by execute(), and hasUOAuxStateCheck().

◆ _uo_jacobian_moose_vars

std::vector<std::vector<const MooseVariableFEBase *> > FEProblemBase::_uo_jacobian_moose_vars
protected

Definition at line 3463 of file FEProblemBase.h.

Referenced by FEProblemBase(), getUserObjectJacobianVariables(), and meshChanged().

◆ _use_hash_table_matrix_assembly

const bool FEProblemBase::_use_hash_table_matrix_assembly
protected

Whether to assemble matrices using hash tables instead of preallocating matrix memory.

This can be a good option if the sparsity pattern changes throughout the course of the simulation

Definition at line 3567 of file FEProblemBase.h.

Referenced by EigenProblem::EigenProblem(), FEProblem::FEProblem(), and useHashTableMatrixAssembly().

◆ _using_ad_mat_props

bool FEProblemBase::_using_ad_mat_props
protected

Automatic differentiaion (AD) flag which indicates whether any consumer has requested an AD material property or whether any suppier has declared an AD material property.

Definition at line 3560 of file FEProblemBase.h.

◆ _using_default_nl

const bool FEProblemBase::_using_default_nl
protected

Boolean to check if we have the default nonlinear system.

Definition at line 3194 of file FEProblemBase.h.

◆ _var_dof_map

std::map<std::string, std::vector<dof_id_type> > SubProblem::_var_dof_map
inherited

◆ _vector_curl_zero

std::vector<VectorVariableCurl> FEProblemBase::_vector_curl_zero

Definition at line 2590 of file FEProblemBase.h.

Referenced by FEProblemBase(), reinitDirac(), updateMaxQps(), and ~FEProblemBase().

◆ _vector_tags

std::vector<VectorTag> SubProblem::_vector_tags
privateinherited

◆ _vector_tags_name_map

std::map<TagName, TagID> SubProblem::_vector_tags_name_map
privateinherited

Map of vector tag TagName to TagID.

Definition at line 1195 of file SubProblem.h.

Referenced by SubProblem::addVectorTag(), SubProblem::getVectorTagID(), and SubProblem::verifyVectorTags().

◆ _vector_zero

std::vector<VectorVariableValue> FEProblemBase::_vector_zero

Definition at line 2589 of file FEProblemBase.h.

Referenced by FEProblemBase(), reinitDirac(), updateMaxQps(), and ~FEProblemBase().

◆ _verbose_multiapps

bool FEProblemBase::_verbose_multiapps
protected

Whether or not to be verbose with multiapps.

Definition at line 3525 of file FEProblemBase.h.

Referenced by backupMultiApps(), execMultiApps(), execMultiAppTransfers(), finishMultiAppStep(), restoreMultiApps(), setVerboseProblem(), and verboseMultiApps().

◆ _verbose_restore

bool FEProblemBase::_verbose_restore
protected

Whether or not to be verbose on solution restoration post a failed time step.

Definition at line 3528 of file FEProblemBase.h.

Referenced by restoreSolutions(), and setVerboseProblem().

◆ _verbose_setup

MooseEnum FEProblemBase::_verbose_setup
protected

Whether or not to be verbose during setup.

Definition at line 3522 of file FEProblemBase.h.

Referenced by logAdd(), and setVerboseProblem().

◆ _xfem

std::shared_ptr<XFEMInterface> FEProblemBase::_xfem
protected

Pointer to XFEM controller.

Definition at line 3403 of file FEProblemBase.h.

Referenced by getXFEM(), haveXFEM(), initXFEM(), and updateMeshXFEM().

◆ _zero

std::vector<VariableValue> FEProblemBase::_zero

Definition at line 2579 of file FEProblemBase.h.

Referenced by FEProblemBase(), reinitDirac(), updateMaxQps(), and ~FEProblemBase().

◆ _zero_block_material_props

std::map<SubdomainID, std::set<MaterialPropertyName> > SubProblem::_zero_block_material_props
protectedinherited

Set of properties returned as zero properties.

Definition at line 1073 of file SubProblem.h.

Referenced by SubProblem::checkBlockMatProps(), checkDependMaterialsHelper(), and SubProblem::storeSubdomainZeroMatProp().

◆ _zero_boundary_material_props

std::map<BoundaryID, std::set<MaterialPropertyName> > SubProblem::_zero_boundary_material_props
protectedinherited

◆ app_param

const std::string MooseBase::app_param = "_moose_app"
staticinherited

◆ kokkos_object_param

const std::string MooseBase::kokkos_object_param = "_kokkos_object"
staticinherited

The name of the parameter that indicates an object is a Kokkos functor.

Definition at line 64 of file MooseBase.h.

Referenced by InputParameters::isKokkosObject().

◆ moose_base_param

const std::string MooseBase::moose_base_param = "_moose_base"
staticinherited

The name of the parameter that contains the moose system base.

Definition at line 61 of file MooseBase.h.

Referenced by InputParameters::getBase(), InputParameters::hasBase(), and InputParameters::registerBase().

◆ name_param

const std::string MooseBase::name_param = "_object_name"
staticinherited

◆ type_param

const std::string MooseBase::type_param = "_type"
staticinherited

◆ unique_name_param

const std::string MooseBase::unique_name_param = "_unique_name"
staticinherited

The name of the parameter that contains the unique object name.

Definition at line 57 of file MooseBase.h.

Referenced by InputParameterWarehouse::addInputParameters(), AppFactory::create(), InputParameterWarehouse::removeInputParameters(), MooseBase::uniqueName(), and MooseBase::validParams().

◆ usingCombinedWarningSolutionWarnings

MooseObject::usingCombinedWarningSolutionWarnings
inherited

Definition at line 67 of file MooseObject.h.


The documentation for this class was generated from the following files: