https://mooseframework.inl.gov
FEProblemBase.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 #ifdef MOOSE_KOKKOS_ENABLED
13 #include "KokkosAssembly.h"
14 #include "KokkosSystem.h"
15 #endif
16 
17 // MOOSE includes
18 #include "SubProblem.h"
19 #include "GeometricSearchData.h"
20 #include "MeshDivision.h"
21 #include "ReporterData.h"
22 #include "Adaptivity.h"
26 #include "Restartable.h"
27 #include "SolverParams.h"
28 #include "PetscSupport.h"
29 #include "MooseApp.h"
31 #include "MaterialWarehouse.h"
32 #include "MooseVariableFE.h"
33 #include "MultiAppTransfer.h"
34 #include "Postprocessor.h"
35 #include "HashMap.h"
36 #include "VectorPostprocessor.h"
37 #include "PerfGraphInterface.h"
38 #include "Attributes.h"
39 #include "MooseObjectWarehouse.h"
42 #include "SolutionInvalidity.h"
43 #include "PetscSupport.h"
44 
45 #include "libmesh/enum_quadrature_type.h"
46 #include "libmesh/equation_systems.h"
47 
48 #include <unordered_map>
49 #include <memory>
50 
51 // Forward declarations
52 class AuxiliarySystem;
53 class DisplacedProblem;
54 class MooseMesh;
56 class LinearSystem;
57 class SolverSystem;
58 class NonlinearSystem;
59 class RandomInterface;
60 class RandomData;
63 class MultiMooseEnum;
65 class MaterialData;
66 class MooseEnum;
68 class Assembly;
69 class JacobianBlock;
70 class Control;
71 class MultiApp;
72 class TransientMultiApp;
74 class Indicator;
76 class Marker;
77 class Material;
78 class Transfer;
79 class XFEMInterface;
80 class SideUserObject;
81 class NodalUserObject;
82 class ElementUserObject;
85 class GeneralUserObject;
86 class Positions;
87 class Function;
88 class Distribution;
89 class Sampler;
90 class KernelBase;
91 class IntegratedBCBase;
92 class LineSearch;
93 class UserObject;
94 class UserObjectBase;
100 class Convergence;
102 class MortarUserObject;
103 class SolutionInvalidity;
104 
105 namespace Moose
106 {
107 class FunctionBase;
108 }
109 
110 #ifdef MOOSE_KOKKOS_ENABLED
111 namespace Moose::Kokkos
112 {
114 class Function;
115 class UserObject;
116 }
117 #endif
118 
119 // libMesh forward declarations
120 namespace libMesh
121 {
122 class CouplingMatrix;
123 class NonlinearImplicitSystem;
124 class LinearImplicitSystem;
125 } // namespace libMesh
126 
128 {
129  ITERATING = 0,
130  // CONVERGED_RTOL_NORMAL = 1,
131  // CONVERGED_ATOL_NORMAL = 9,
132  CONVERGED_RTOL = 2,
133  CONVERGED_ATOL = 3,
134  CONVERGED_ITS = 4,
135  // CONVERGED_CG_NEG_CURVE = 5,
136  // CONVERGED_CG_CONSTRAINED = 6,
137  // CONVERGED_STEP_LENGTH = 7,
138  // CONVERGED_HAPPY_BREAKDOWN = 8,
139  DIVERGED_NULL = -2,
140  // DIVERGED_ITS = -3,
141  // DIVERGED_DTOL = -4,
142  // DIVERGED_BREAKDOWN = -5,
143  // DIVERGED_BREAKDOWN_BICG = -6,
144  // DIVERGED_NONSYMMETRIC = -7,
145  // DIVERGED_INDEFINITE_PC = -8,
146  DIVERGED_NANORINF = -9,
147  // DIVERGED_INDEFINITE_MAT = -10
149 };
150 
155 class FEProblemBase : public SubProblem, public Restartable
156 {
157 public:
158  static InputParameters validParams();
159 
161  virtual ~FEProblemBase();
162 
166  [[nodiscard]] bool initialized() const { return _initialized; }
167 
168  enum class CoverageCheckMode
169  {
170  FALSE,
171  TRUE,
172  OFF,
173  ON,
174  SKIP_LIST,
175  ONLY_LIST,
176  };
177 
178  virtual libMesh::EquationSystems & es() override { return _req.set().es(); }
179  virtual MooseMesh & mesh() override { return _mesh; }
180  virtual const MooseMesh & mesh() const override { return _mesh; }
181  const MooseMesh & mesh(bool use_displaced) const override;
182  MooseMesh & mesh(bool use_displaced);
183 
184  void setCoordSystem(const std::vector<SubdomainName> & blocks, const MultiMooseEnum & coord_sys);
185  void setAxisymmetricCoordAxis(const MooseEnum & rz_coord_axis);
186 
193 
195 
201  void setCouplingMatrix(std::unique_ptr<libMesh::CouplingMatrix> cm,
202  const unsigned int nl_sys_num);
203 
204  // DEPRECATED METHOD
205  void setCouplingMatrix(libMesh::CouplingMatrix * cm, const unsigned int nl_sys_num);
206 
207  const libMesh::CouplingMatrix * couplingMatrix(const unsigned int nl_sys_num) const override;
208 
211 
212  bool
213  areCoupled(const unsigned int ivar, const unsigned int jvar, const unsigned int nl_sys_num) const;
214 
218  bool hasUOAuxStateCheck() const { return _uo_aux_state_check; }
219 
227 
228 #ifndef NDEBUG
229  virtual bool checkResidualForNans() const override { return _check_residual_for_nans; }
230 
232  void setCheckResidualForNans(bool check_residual_for_nans)
233  {
234  _check_residual_for_nans = check_residual_for_nans;
235  }
236 #endif
237 
244 
245  std::vector<std::pair<MooseVariableFEBase *, MooseVariableFEBase *>> &
246  couplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num);
247  std::vector<std::pair<MooseVariableFEBase *, MooseVariableFEBase *>> &
248  nonlocalCouplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num);
249 
250  virtual bool hasVariable(const std::string & var_name) const override;
251  // NOTE: hasAuxiliaryVariable defined in parent class
252  bool hasSolverVariable(const std::string & var_name) const;
254  virtual const MooseVariableFieldBase &
255  getVariable(const THREAD_ID tid,
256  const std::string & var_name,
258  Moose::VarFieldType expected_var_field_type =
259  Moose::VarFieldType::VAR_FIELD_ANY) const override;
261  const std::string & var_name) override;
262  virtual MooseVariable & getStandardVariable(const THREAD_ID tid,
263  const std::string & var_name) override;
264  virtual VectorMooseVariable & getVectorVariable(const THREAD_ID tid,
265  const std::string & var_name) override;
266  virtual ArrayMooseVariable & getArrayVariable(const THREAD_ID tid,
267  const std::string & var_name) override;
268 
269  virtual bool hasScalarVariable(const std::string & var_name) const override;
270  virtual MooseVariableScalar & getScalarVariable(const THREAD_ID tid,
271  const std::string & var_name) override;
272  virtual libMesh::System & getSystem(const std::string & var_name) override;
273 
276 
283  virtual void setActiveElementalMooseVariables(const std::set<MooseVariableFEBase *> & moose_vars,
284  const THREAD_ID tid) override;
285 
293  virtual void clearActiveElementalMooseVariables(const THREAD_ID tid) override;
294 
295  virtual void clearActiveFEVariableCoupleableMatrixTags(const THREAD_ID tid) override;
296 
297  virtual void clearActiveFEVariableCoupleableVectorTags(const THREAD_ID tid) override;
298 
299  virtual void setActiveFEVariableCoupleableVectorTags(std::set<TagID> & vtags,
300  const THREAD_ID tid) override;
301 
302  virtual void setActiveFEVariableCoupleableMatrixTags(std::set<TagID> & mtags,
303  const THREAD_ID tid) override;
304 
305  virtual void clearActiveScalarVariableCoupleableMatrixTags(const THREAD_ID tid) override;
306 
307  virtual void clearActiveScalarVariableCoupleableVectorTags(const THREAD_ID tid) override;
308 
309  virtual void setActiveScalarVariableCoupleableVectorTags(std::set<TagID> & vtags,
310  const THREAD_ID tid) override;
311 
312  virtual void setActiveScalarVariableCoupleableMatrixTags(std::set<TagID> & mtags,
313  const THREAD_ID tid) override;
314 
316  libMesh::Order order,
317  libMesh::Order volume_order = libMesh::INVALID_ORDER,
320  bool allow_negative_qweights = true);
321 
330 
331  void bumpAllQRuleOrder(libMesh::Order order, SubdomainID block);
332 
336  unsigned int getMaxQps() const;
337 
342 
346  void checkNonlocalCoupling();
348  void setVariableAllDoFMap(const std::vector<const MooseVariableFEBase *> & moose_vars);
349 
350  const std::vector<const MooseVariableFEBase *> &
352  {
353  return _uo_jacobian_moose_vars[tid];
354  }
355 
356  virtual Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) override;
357  virtual const Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) const override;
358 
359 #ifdef MOOSE_KOKKOS_ENABLED
362 #endif
363 
367  virtual std::vector<VariableName> getVariableNames();
368 
369  void initialSetup() override;
371  void timestepSetup() override;
372  void customSetup(const ExecFlagType & exec_type) override;
373  void residualSetup() override;
374  void jacobianSetup() override;
375 
376  virtual void prepare(const Elem * elem, const THREAD_ID tid) override;
377  virtual void prepareFace(const Elem * elem, const THREAD_ID tid) override;
378  virtual void prepare(const Elem * elem,
379  unsigned int ivar,
380  unsigned int jvar,
381  const std::vector<dof_id_type> & dof_indices,
382  const THREAD_ID tid) override;
383 
384  virtual void setCurrentSubdomainID(const Elem * elem, const THREAD_ID tid) override;
385  virtual void
386  setNeighborSubdomainID(const Elem * elem, unsigned int side, const THREAD_ID tid) override;
387  virtual void setNeighborSubdomainID(const Elem * elem, const THREAD_ID tid);
388  virtual void prepareAssembly(const THREAD_ID tid) override;
389 
390  virtual void addGhostedElem(dof_id_type elem_id) override;
391  virtual void addGhostedBoundary(BoundaryID boundary_id) override;
392  virtual void ghostGhostedBoundaries() override;
393 
394  virtual void sizeZeroes(unsigned int size, const THREAD_ID tid);
395  virtual bool reinitDirac(const Elem * elem, const THREAD_ID tid) override;
396 
397  virtual void reinitElem(const Elem * elem, const THREAD_ID tid) override;
398  virtual void reinitElemPhys(const Elem * elem,
399  const std::vector<Point> & phys_points_in_elem,
400  const THREAD_ID tid) override;
401  void reinitElemFace(const Elem * elem, unsigned int side, BoundaryID, const THREAD_ID tid);
402  virtual void reinitElemFace(const Elem * elem, unsigned int side, const THREAD_ID tid) override;
403  virtual void reinitLowerDElem(const Elem * lower_d_elem,
404  const THREAD_ID tid,
405  const std::vector<Point> * const pts = nullptr,
406  const std::vector<Real> * const weights = nullptr) override;
407  virtual void reinitNode(const Node * node, const THREAD_ID tid) override;
408  virtual void reinitNodeFace(const Node * node, BoundaryID bnd_id, const THREAD_ID tid) override;
409  virtual void reinitNodes(const std::vector<dof_id_type> & nodes, const THREAD_ID tid) override;
410  virtual void reinitNodesNeighbor(const std::vector<dof_id_type> & nodes,
411  const THREAD_ID tid) override;
412  virtual void reinitNeighbor(const Elem * elem, unsigned int side, const THREAD_ID tid) override;
413  virtual void reinitNeighborPhys(const Elem * neighbor,
414  unsigned int neighbor_side,
415  const std::vector<Point> & physical_points,
416  const THREAD_ID tid) override;
417  virtual void reinitNeighborPhys(const Elem * neighbor,
418  const std::vector<Point> & physical_points,
419  const THREAD_ID tid) override;
420  virtual void
421  reinitElemNeighborAndLowerD(const Elem * elem, unsigned int side, const THREAD_ID tid) override;
422  virtual void reinitScalars(const THREAD_ID tid,
423  bool reinit_for_derivative_reordering = false) override;
424  virtual void reinitOffDiagScalars(const THREAD_ID tid) override;
425 
427  virtual void getDiracElements(std::set<const Elem *> & elems) override;
428  virtual void clearDiracInfo() override;
429 
430  virtual void subdomainSetup(SubdomainID subdomain, const THREAD_ID tid);
431  virtual void neighborSubdomainSetup(SubdomainID subdomain, const THREAD_ID tid);
432 
433  virtual void newAssemblyArray(std::vector<std::shared_ptr<SolverSystem>> & solver_systems);
434  virtual void initNullSpaceVectors(const InputParameters & parameters,
435  std::vector<std::shared_ptr<NonlinearSystemBase>> & nl);
436 
437  virtual void init() override;
438  virtual void solve(const unsigned int nl_sys_num);
439 
440 #ifdef MOOSE_KOKKOS_ENABLED
441 
444  void initKokkos();
445 #endif
446 
452  virtual void solveLinearSystem(const unsigned int linear_sys_num,
453  const Moose::PetscSupport::PetscOptions * po = nullptr);
454 
456 
475 
477 
492 
494 
515 
524  virtual void setException(const std::string & message);
525 
529  virtual bool hasException() { return _has_exception; }
530 
547  virtual void checkExceptionAndStopSolve(bool print_message = true);
548 
549  virtual bool solverSystemConverged(const unsigned int solver_sys_num) override;
550  virtual unsigned int nNonlinearIterations(const unsigned int nl_sys_num) const override;
551  virtual unsigned int nLinearIterations(const unsigned int nl_sys_num) const override;
552  virtual Real finalNonlinearResidual(const unsigned int nl_sys_num) const override;
553  virtual bool computingPreSMOResidual(const unsigned int nl_sys_num) const override;
554 
558  virtual std::string solverTypeString(unsigned int solver_sys_num = 0);
559 
563  virtual bool startedInitialSetup() { return _started_initial_setup; }
564 
565  virtual void onTimestepBegin() override;
566  virtual void onTimestepEnd() override;
567 
568  virtual Real & time() const { return _time; }
569  virtual Real & timeOld() const { return _time_old; }
570  virtual int & timeStep() const { return _t_step; }
571  virtual Real & dt() const { return _dt; }
572  virtual Real & dtOld() const { return _dt_old; }
576  Real getTimeFromStateArg(const Moose::StateArg & state) const;
577 
578  virtual void transient(bool trans) { _transient = trans; }
579  virtual bool isTransient() const override { return _transient; }
580 
581  virtual void addTimeIntegrator(const std::string & type,
582  const std::string & name,
584  virtual void
585  addPredictor(const std::string & type, const std::string & name, InputParameters & parameters);
586 
587  virtual void copySolutionsBackwards();
588 
593 
598  virtual void advanceState();
599 
600  virtual void restoreSolutions();
601 
605  virtual void saveOldSolutions();
606 
610  virtual void restoreOldSolutions();
611 
617  void needSolutionState(unsigned int oldest_needed, Moose::SolutionIterationType iteration_type);
618 
624  bool hasSolutionState(unsigned int state, Moose::SolutionIterationType iteration_type) const;
625 
632  virtual void outputStep(ExecFlagType type);
633 
637  virtual void postExecute();
638 
640 
646  void allowOutput(bool state);
647  template <typename T>
648  void allowOutput(bool state);
650 
659  void forceOutput();
660 
666 
671 
675  void logAdd(const std::string & system,
676  const std::string & name,
677  const std::string & type,
678  const InputParameters & params) const;
679 
680  // Function /////
681  virtual void
682  addFunction(const std::string & type, const std::string & name, InputParameters & parameters);
683  virtual bool hasFunction(const std::string & name, const THREAD_ID tid = 0);
684  virtual Function & getFunction(const std::string & name, const THREAD_ID tid = 0);
685 
686 #ifdef MOOSE_KOKKOS_ENABLED
687 
693  virtual void addKokkosFunction(const std::string & type,
694  const std::string & name,
701  virtual bool hasKokkosFunction(const std::string & name) const;
707  virtual Moose::Kokkos::Function getKokkosFunction(const std::string & name);
714  template <typename T>
715  T & getKokkosFunction(const std::string & name);
716 #endif
717 
719  virtual void
720  addMeshDivision(const std::string & type, const std::string & name, InputParameters & params);
722  MeshDivision & getMeshDivision(const std::string & name, const THREAD_ID tid = 0) const;
723 
725  virtual void
726  addConvergence(const std::string & type, const std::string & name, InputParameters & parameters);
728  virtual Convergence & getConvergence(const std::string & name, const THREAD_ID tid = 0) const;
730  virtual const std::vector<std::shared_ptr<Convergence>> &
731  getConvergenceObjects(const THREAD_ID tid = 0) const;
733  virtual bool hasConvergence(const std::string & name, const THREAD_ID tid = 0) const;
736  {
738  }
741  {
743  }
746  {
748  }
751  {
753  }
756  {
758  }
761  {
763  }
766  {
767  return _multiapp_fixed_point_convergence_name.has_value();
768  }
771  {
772  return _steady_state_convergence_name.has_value();
773  }
781  virtual void addDefaultNonlinearConvergence(const InputParameters & params);
789  virtual bool onlyAllowDefaultNonlinearConvergence() const { return false; }
806 
810  virtual void addLineSearch(const InputParameters & /*parameters*/)
811  {
812  mooseError("Line search not implemented for this problem type yet.");
813  }
814 
818  virtual void lineSearch();
819 
823  LineSearch * getLineSearch() override { return _line_search.get(); }
824 
828  virtual void
829  addDistribution(const std::string & type, const std::string & name, InputParameters & parameters);
830  virtual bool hasDistribution(const std::string & name) const;
831  virtual Distribution & getDistribution(const std::string & name);
832 
836  virtual void
837  addSampler(const std::string & type, const std::string & name, InputParameters & parameters);
838  virtual Sampler & getSampler(const std::string & name, const THREAD_ID tid = 0);
839 
840  // NL /////
841  NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num);
842  const NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num) const;
843  void setCurrentNonlinearSystem(const unsigned int nl_sys_num);
846 
847  virtual const SystemBase & systemBaseNonlinear(const unsigned int sys_num) const override;
848  virtual SystemBase & systemBaseNonlinear(const unsigned int sys_num) override;
849 
850  virtual const SystemBase & systemBaseSolver(const unsigned int sys_num) const override;
851  virtual SystemBase & systemBaseSolver(const unsigned int sys_num) override;
852 
853  virtual const SystemBase & systemBaseAuxiliary() const override;
854  virtual SystemBase & systemBaseAuxiliary() override;
855 
856  virtual NonlinearSystem & getNonlinearSystem(const unsigned int sys_num);
857 
858 #ifdef MOOSE_KOKKOS_ENABLED
859 
866  {
867  return _kokkos_systems;
868  }
870 
876  Moose::Kokkos::System & getKokkosSystem(const unsigned int sys_num);
878  const Moose::Kokkos::System & getKokkosSystem(const unsigned int sys_num) const;
880 #endif
881 
886  virtual const SystemBase & getSystemBase(const unsigned int sys_num) const;
887 
892  virtual SystemBase & getSystemBase(const unsigned int sys_num);
893 
898  SystemBase & getSystemBase(const std::string & sys_name);
899 
904  LinearSystem & getLinearSystem(unsigned int sys_num);
905 
910  const LinearSystem & getLinearSystem(unsigned int sys_num) const;
911 
916  SolverSystem & getSolverSystem(unsigned int sys_num);
917 
922  const SolverSystem & getSolverSystem(unsigned int sys_num) const;
923 
928  void setCurrentLinearSystem(unsigned int sys_num);
929 
933  const LinearSystem & currentLinearSystem() const;
934 
939  virtual const SystemBase & systemBaseLinear(unsigned int sys_num) const override;
940 
945  virtual SystemBase & systemBaseLinear(unsigned int sys_num) override;
946 
953  virtual void
954  addVariable(const std::string & var_type, const std::string & var_name, InputParameters & params);
955 
956  virtual void addKernel(const std::string & kernel_name,
957  const std::string & name,
959  virtual void addHDGKernel(const std::string & kernel_name,
960  const std::string & name,
962  virtual void addNodalKernel(const std::string & kernel_name,
963  const std::string & name,
965  virtual void addScalarKernel(const std::string & kernel_name,
966  const std::string & name,
968  virtual void addBoundaryCondition(const std::string & bc_name,
969  const std::string & name,
971 
972 #ifdef MOOSE_KOKKOS_ENABLED
973  virtual void addKokkosKernel(const std::string & kernel_name,
974  const std::string & name,
976  virtual void addKokkosNodalKernel(const std::string & kernel_name,
977  const std::string & name,
979  virtual void addKokkosBoundaryCondition(const std::string & bc_name,
980  const std::string & name,
982 #endif
983 
984  virtual void
985  addConstraint(const std::string & c_name, const std::string & name, InputParameters & parameters);
986 
988  {
989  parameters.set<FEProblemBase *>("_fe_problem_base") = this;
990  }
991 
992  // Aux /////
993 
1000  virtual void addAuxVariable(const std::string & var_type,
1001  const std::string & var_name,
1002  InputParameters & params);
1003 
1007  virtual void addElementalFieldVariable(const std::string & var_type,
1008  const std::string & var_name,
1009  InputParameters & params);
1010 
1011  virtual void addAuxVariable(const std::string & var_name,
1012  const libMesh::FEType & type,
1013  const std::set<SubdomainID> * const active_subdomains = NULL);
1014  virtual void addAuxArrayVariable(const std::string & var_name,
1015  const libMesh::FEType & type,
1016  unsigned int components,
1017  const std::set<SubdomainID> * const active_subdomains = NULL);
1018  virtual void addAuxScalarVariable(const std::string & var_name,
1019  libMesh::Order order,
1020  Real scale_factor = 1.,
1021  const std::set<SubdomainID> * const active_subdomains = NULL);
1022  virtual void addAuxKernel(const std::string & kernel_name,
1023  const std::string & name,
1025  virtual void addAuxScalarKernel(const std::string & kernel_name,
1026  const std::string & name,
1028 
1029 #ifdef MOOSE_KOKKOS_ENABLED
1030  virtual void addKokkosAuxKernel(const std::string & kernel_name,
1031  const std::string & name,
1033 #endif
1034 
1036 
1037  // Dirac /////
1038  virtual void addDiracKernel(const std::string & kernel_name,
1039  const std::string & name,
1041 
1042  // DG /////
1043  virtual void addDGKernel(const std::string & kernel_name,
1044  const std::string & name,
1046  // FV /////
1047  virtual void addFVKernel(const std::string & kernel_name,
1048  const std::string & name,
1050 
1051  virtual void addLinearFVKernel(const std::string & kernel_name,
1052  const std::string & name,
1054  virtual void
1055  addFVBC(const std::string & fv_bc_name, const std::string & name, InputParameters & parameters);
1056  virtual void addLinearFVBC(const std::string & fv_bc_name,
1057  const std::string & name,
1059 
1060  virtual void addFVInterfaceKernel(const std::string & fv_ik_name,
1061  const std::string & name,
1063 
1064  // Interface /////
1065  virtual void addInterfaceKernel(const std::string & kernel_name,
1066  const std::string & name,
1068 
1069  // IC /////
1070  virtual void addInitialCondition(const std::string & ic_name,
1071  const std::string & name,
1079  virtual void addFVInitialCondition(const std::string & ic_name,
1080  const std::string & name,
1082 
1083  void projectSolution();
1084 
1089  unsigned short getCurrentICState();
1090 
1100  libMesh::ConstElemRange & elem_range,
1101  ConstBndNodeRange & bnd_node_range,
1102  const std::optional<std::set<VariableName>> & target_vars = std::nullopt);
1103 
1113  void projectFunctionOnCustomRange(ConstElemRange & elem_range,
1114  Number (*func)(const Point &,
1115  const libMesh::Parameters &,
1116  const std::string &,
1117  const std::string &),
1118  Gradient (*func_grad)(const Point &,
1119  const libMesh::Parameters &,
1120  const std::string &,
1121  const std::string &),
1122  const libMesh::Parameters & params,
1123  const std::vector<VariableName> & target_vars);
1124 
1125  // Materials
1126  virtual void addMaterial(const std::string & material_name,
1127  const std::string & name,
1129  virtual void addMaterialHelper(std::vector<MaterialWarehouse *> warehouse,
1130  const std::string & material_name,
1131  const std::string & name,
1133  virtual void addInterfaceMaterial(const std::string & material_name,
1134  const std::string & name,
1136  virtual void addFunctorMaterial(const std::string & functor_material_name,
1137  const std::string & name,
1139 
1140 #ifdef MOOSE_KOKKOS_ENABLED
1141  virtual void addKokkosMaterial(const std::string & material_name,
1142  const std::string & name,
1144 #endif
1145 
1157  void prepareMaterials(const std::unordered_set<unsigned int> & consumer_needed_mat_props,
1158  const SubdomainID blk_id,
1159  const THREAD_ID tid);
1160 
1161  void reinitMaterials(SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful = true);
1162 
1172  void reinitMaterialsFace(SubdomainID blk_id,
1173  const THREAD_ID tid,
1174  bool swap_stateful = true,
1175  const std::deque<MaterialBase *> * reinit_mats = nullptr);
1176 
1188  void
1189  reinitMaterialsFaceOnBoundary(const BoundaryID boundary_id,
1190  const SubdomainID blk_id,
1191  const THREAD_ID tid,
1192  const bool swap_stateful = true,
1193  const std::deque<MaterialBase *> * const reinit_mats = nullptr);
1194 
1206  void
1208  const SubdomainID blk_id,
1209  const THREAD_ID tid,
1210  const bool swap_stateful = true,
1211  const std::deque<MaterialBase *> * const reinit_mats = nullptr);
1212 
1223  const THREAD_ID tid,
1224  bool swap_stateful = true,
1225  const std::deque<MaterialBase *> * reinit_mats = nullptr);
1226 
1239  void reinitMaterialsBoundary(BoundaryID boundary_id,
1240  const THREAD_ID tid,
1241  bool swap_stateful = true,
1242  const std::deque<MaterialBase *> * reinit_mats = nullptr);
1243 
1244  void
1245  reinitMaterialsInterface(BoundaryID boundary_id, const THREAD_ID tid, bool swap_stateful = true);
1246 
1247 #ifdef MOOSE_KOKKOS_ENABLED
1248  void prepareKokkosMaterials(const std::unordered_set<unsigned int> & consumer_needed_mat_props);
1249  void reinitKokkosMaterials();
1250 #endif
1251 
1252  /*
1253  * Swap back underlying data storing stateful material properties
1254  */
1255  virtual void swapBackMaterials(const THREAD_ID tid);
1256  virtual void swapBackMaterialsFace(const THREAD_ID tid);
1257  virtual void swapBackMaterialsNeighbor(const THREAD_ID tid);
1258 
1265  void setActiveMaterialProperties(const std::unordered_set<unsigned int> & mat_prop_ids,
1266  const THREAD_ID tid);
1267 
1276  bool hasActiveMaterialProperties(const THREAD_ID tid) const;
1277 
1283  void clearActiveMaterialProperties(const THREAD_ID tid);
1284 
1296  template <typename T>
1297  std::vector<std::shared_ptr<T>> addObject(const std::string & type,
1298  const std::string & name,
1300  const bool threaded = true,
1301  const std::string & var_param_name = "variable");
1302 
1303  // Postprocessors /////
1304  virtual void addPostprocessor(const std::string & pp_name,
1305  const std::string & name,
1307 
1308  // VectorPostprocessors /////
1309  virtual void addVectorPostprocessor(const std::string & pp_name,
1310  const std::string & name,
1312 
1321  virtual void
1322  addReporter(const std::string & type, const std::string & name, InputParameters & parameters);
1323 
1324 #ifdef MOOSE_KOKKOS_ENABLED
1325  virtual void addKokkosPostprocessor(const std::string & pp_name,
1326  const std::string & name,
1328  virtual void addKokkosVectorPostprocessor(const std::string & pp_name,
1329  const std::string & name,
1331  virtual void addKokkosReporter(const std::string & type,
1332  const std::string & name,
1334 #endif
1335 
1343  const ReporterData & getReporterData() const { return _reporter_data; }
1344 
1351 
1352  // UserObjects /////
1353  virtual std::vector<std::shared_ptr<UserObject>> addUserObject(
1354  const std::string & user_object_name, const std::string & name, InputParameters & parameters);
1355 
1361  template <class T>
1362  T & getUserObject(const std::string & name, unsigned int tid = 0) const
1363  {
1364  std::vector<T *> objs;
1365  theWarehouse()
1366  .query()
1367  .condition<AttribSystem>("UserObject")
1368  .condition<AttribThread>(tid)
1369  .condition<AttribName>(name)
1370  .queryInto(objs);
1371  if (objs.empty())
1372  mooseError("Unable to find user object with name '" + name + "'");
1373  return *(objs[0]);
1374  }
1375 
1382  const UserObject & getUserObjectBase(const std::string & name, const THREAD_ID tid = 0) const;
1383 
1389  bool hasUserObject(const std::string & name) const;
1390 
1391 #ifdef MOOSE_KOKKOS_ENABLED
1392  virtual void addKokkosUserObject(const std::string & user_object_name,
1393  const std::string & name,
1395 
1401  template <class T>
1402  const T & getKokkosUserObject(const std::string & name) const
1403  {
1404  std::vector<T *> objs;
1405  theWarehouse()
1406  .query()
1407  .condition<AttribSystem>("KokkosUserObject")
1408  .condition<AttribName>(name)
1409  .queryInto(objs);
1410  if (objs.empty())
1411  mooseError("Unable to find Kokkos user object with name '" + name + "'");
1412  return *(objs[0]);
1413  }
1414 
1420  bool hasKokkosUserObject(const std::string & name) const;
1421 #endif
1422 
1428  void checkUserObjectNameCollision(const std::string & name, const std::string & type) const;
1429 
1435  const Positions & getPositionsObject(const std::string & name) const;
1436 
1443  virtual void addFVInterpolationMethod(const std::string & method_type,
1444  const std::string & name,
1446 
1452  const FVInterpolationMethod & getFVInterpolationMethod(const InterpolationMethodName & name,
1453  const THREAD_ID tid = 0) const;
1454 
1461  getFVFaceInterpolationMethod(const InterpolationMethodName & name, const THREAD_ID tid = 0) const;
1462 
1469  getFVAdvectedInterpolationMethod(const InterpolationMethodName & name,
1470  const THREAD_ID tid = 0) const;
1471 
1475  bool hasFVInterpolationMethod(const InterpolationMethodName & name) const;
1476 
1485  bool hasPostprocessorValueByName(const PostprocessorName & name) const;
1486 
1492  const Postprocessor & getPostprocessorObjectByName(const PostprocessorName & object_name,
1493  const THREAD_ID tid = 0) const;
1494 
1505  const PostprocessorValue & getPostprocessorValueByName(const PostprocessorName & name,
1506  std::size_t t_index = 0) const;
1507 
1522  void setPostprocessorValueByName(const PostprocessorName & name,
1523  const PostprocessorValue & value,
1524  std::size_t t_index = 0);
1525 
1529  bool hasPostprocessor(const std::string & name) const;
1530 
1541  const VectorPostprocessorValue &
1542  getVectorPostprocessorValueByName(const std::string & object_name,
1543  const std::string & vector_name,
1544  std::size_t t_index = 0) const;
1545 
1553  void setVectorPostprocessorValueByName(const std::string & object_name,
1554  const std::string & vector_name,
1555  const VectorPostprocessorValue & value,
1556  std::size_t t_index = 0);
1557 
1566  const VectorPostprocessor & getVectorPostprocessorObjectByName(const std::string & object_name,
1567  const THREAD_ID tid = 0) const;
1568 
1570 
1573  bool hasMultiApps() const { return _multi_apps.hasActiveObjects(); }
1574  bool hasMultiApps(ExecFlagType type) const;
1575  bool hasMultiApp(const std::string & name) const;
1577 
1578  // Dampers /////
1579  virtual void addDamper(const std::string & damper_name,
1580  const std::string & name,
1582  void setupDampers();
1583 
1587  bool hasDampers() { return _has_dampers; }
1588 
1589  // Indicators /////
1590  virtual void addIndicator(const std::string & indicator_name,
1591  const std::string & name,
1593 
1594  // Markers //////
1595  virtual void addMarker(const std::string & marker_name,
1596  const std::string & name,
1598 
1602  virtual void addMultiApp(const std::string & multi_app_name,
1603  const std::string & name,
1605 
1609  std::shared_ptr<MultiApp> getMultiApp(const std::string & multi_app_name) const;
1610 
1614  std::vector<std::shared_ptr<Transfer>> getTransfers(ExecFlagType type,
1615  Transfer::DIRECTION direction) const;
1616  std::vector<std::shared_ptr<Transfer>> getTransfers(Transfer::DIRECTION direction) const;
1617 
1623 
1630 
1634  bool execMultiApps(ExecFlagType type, bool auto_advance = true);
1635 
1636  void finalizeMultiApps();
1637 
1642 
1648  {
1649  mooseDeprecated("Deprecated method; use finishMultiAppStep and/or incrementMultiAppTStep "
1650  "depending on your purpose");
1652  }
1653 
1658  void finishMultiAppStep(ExecFlagType type, bool recurse_through_multiapp_levels = false);
1659 
1664 
1669  void restoreMultiApps(ExecFlagType type, bool force = false);
1670 
1675 
1679  virtual void addTransfer(const std::string & transfer_name,
1680  const std::string & name,
1682 
1690 
1696 
1702 
1709  virtual Real computeResidualL2Norm();
1710 
1715  const NumericVector<libMesh::Number> & soln,
1716  NumericVector<libMesh::Number> & residual);
1722  const NumericVector<libMesh::Number> & soln,
1723  NumericVector<libMesh::Number> & residual);
1724 
1728  virtual void computeResidual(const NumericVector<libMesh::Number> & soln,
1729  NumericVector<libMesh::Number> & residual,
1730  const unsigned int nl_sys_num);
1731 
1735  void computeResidualAndJacobian(const NumericVector<libMesh::Number> & soln,
1736  NumericVector<libMesh::Number> & residual,
1738 
1742  virtual void computeResidualTag(const NumericVector<libMesh::Number> & soln,
1743  NumericVector<libMesh::Number> & residual,
1744  TagID tag);
1748  virtual void computeResidualType(const NumericVector<libMesh::Number> & soln,
1749  NumericVector<libMesh::Number> & residual,
1750  TagID tag);
1751 
1756  virtual void computeResidualInternal(const NumericVector<libMesh::Number> & soln,
1757  NumericVector<libMesh::Number> & residual,
1758  const std::set<TagID> & tags);
1762  virtual void computeResidualTags(const std::set<TagID> & tags);
1763 
1768  const NumericVector<libMesh::Number> & soln,
1773  virtual void computeJacobian(const NumericVector<libMesh::Number> & soln,
1775  const unsigned int nl_sys_num);
1776 
1780  virtual void computeJacobianTag(const NumericVector<libMesh::Number> & soln,
1782  TagID tag);
1783 
1787  virtual void computeJacobianInternal(const NumericVector<libMesh::Number> & soln,
1789  const std::set<TagID> & tags);
1790 
1794  virtual void computeJacobianTags(const std::set<TagID> & tags);
1795 
1804  virtual void computeJacobianBlocks(std::vector<JacobianBlock *> & blocks,
1805  const unsigned int nl_sys_num);
1806 
1821  libMesh::System & precond_system,
1822  unsigned int ivar,
1823  unsigned int jvar);
1824 
1836  NumericVector<libMesh::Number> & rhs,
1837  const bool compute_gradients = true);
1838 
1848  void computeLinearSystemTags(const NumericVector<libMesh::Number> & soln,
1849  const std::set<TagID> & vector_tags,
1850  const std::set<TagID> & matrix_tags,
1851  const bool compute_gradients = true);
1852 
1853  virtual Real computeDamping(const NumericVector<libMesh::Number> & soln,
1854  const NumericVector<libMesh::Number> & update);
1855 
1860  virtual bool shouldUpdateSolution();
1861 
1868  virtual bool updateSolution(NumericVector<libMesh::Number> & vec_solution,
1869  NumericVector<libMesh::Number> & ghosted_solution);
1870 
1875  virtual void predictorCleanup(NumericVector<libMesh::Number> & ghosted_solution);
1876 
1878  NumericVector<libMesh::Number> & lower,
1879  NumericVector<libMesh::Number> & upper);
1881  std::vector<NumericVector<libMesh::Number> *> & sp);
1883  std::vector<NumericVector<libMesh::Number> *> & sp);
1885  std::vector<NumericVector<libMesh::Number> *> & sp);
1887  const NumericVector<libMesh::Number> & old_soln,
1888  NumericVector<libMesh::Number> & search_direction,
1889  NumericVector<libMesh::Number> & new_soln,
1890  bool & changed_search_direction,
1891  bool & changed_new_soln);
1892 
1893  virtual void computeIndicatorsAndMarkers();
1894  virtual void computeIndicators();
1895  virtual void computeMarkers();
1896 
1897  virtual void addResidual(const THREAD_ID tid) override;
1898  virtual void addResidualNeighbor(const THREAD_ID tid) override;
1899  virtual void addResidualLower(const THREAD_ID tid) override;
1900  virtual void addResidualScalar(const THREAD_ID tid = 0);
1901 
1902  virtual void cacheResidual(const THREAD_ID tid) override;
1903  virtual void cacheResidualNeighbor(const THREAD_ID tid) override;
1904  virtual void addCachedResidual(const THREAD_ID tid) override;
1905 
1913  virtual void addCachedResidualDirectly(NumericVector<libMesh::Number> & residual,
1914  const THREAD_ID tid);
1915 
1916  virtual void setResidual(NumericVector<libMesh::Number> & residual, const THREAD_ID tid) override;
1917  virtual void setResidualNeighbor(NumericVector<libMesh::Number> & residual,
1918  const THREAD_ID tid) override;
1919 
1920  virtual void addJacobian(const THREAD_ID tid) override;
1921  virtual void addJacobianNeighbor(const THREAD_ID tid) override;
1922  virtual void addJacobianNeighborLowerD(const THREAD_ID tid) override;
1923  virtual void addJacobianLowerD(const THREAD_ID tid) override;
1925  unsigned int ivar,
1926  unsigned int jvar,
1927  const DofMap & dof_map,
1928  std::vector<dof_id_type> & dof_indices,
1929  const std::set<TagID> & tags,
1930  const THREAD_ID tid);
1932  unsigned int ivar,
1933  unsigned int jvar,
1934  const DofMap & dof_map,
1935  std::vector<dof_id_type> & dof_indices,
1936  std::vector<dof_id_type> & neighbor_dof_indices,
1937  const std::set<TagID> & tags,
1938  const THREAD_ID tid) override;
1939  virtual void addJacobianScalar(const THREAD_ID tid = 0);
1940  virtual void addJacobianOffDiagScalar(unsigned int ivar, const THREAD_ID tid = 0);
1941 
1942  virtual void cacheJacobian(const THREAD_ID tid) override;
1943  virtual void cacheJacobianNeighbor(const THREAD_ID tid) override;
1944  virtual void addCachedJacobian(const THREAD_ID tid) override;
1945 
1946  virtual void prepareShapes(unsigned int var, const THREAD_ID tid) override;
1947  virtual void prepareFaceShapes(unsigned int var, const THREAD_ID tid) override;
1948  virtual void prepareNeighborShapes(unsigned int var, const THREAD_ID tid) override;
1949 
1950  // Displaced problem /////
1951  virtual void addDisplacedProblem(std::shared_ptr<DisplacedProblem> displaced_problem);
1952  virtual std::shared_ptr<const DisplacedProblem> getDisplacedProblem() const
1953  {
1954  return _displaced_problem;
1955  }
1956  virtual std::shared_ptr<DisplacedProblem> getDisplacedProblem() { return _displaced_problem; }
1957 
1958  virtual void updateGeomSearch(
1960  virtual void updateMortarMesh();
1961 
1962  void createMortarInterface(
1963  const std::pair<BoundaryID, BoundaryID> & primary_secondary_boundary_pair,
1964  const std::pair<SubdomainID, SubdomainID> & primary_secondary_subdomain_pair,
1965  bool on_displaced,
1966  bool periodic,
1967  const bool debug,
1968  const bool correct_edge_dropping,
1969  const Real minimum_projection_angle);
1970 
1977  getMortarInterface(const std::pair<BoundaryID, BoundaryID> & primary_secondary_boundary_pair,
1978  const std::pair<SubdomainID, SubdomainID> & primary_secondary_subdomain_pair,
1979  bool on_displaced) const;
1980 
1982  getMortarInterface(const std::pair<BoundaryID, BoundaryID> & primary_secondary_boundary_pair,
1983  const std::pair<SubdomainID, SubdomainID> & primary_secondary_subdomain_pair,
1984  bool on_displaced);
1986 
1987  const std::unordered_map<std::pair<BoundaryID, BoundaryID>,
1988  std::unique_ptr<AutomaticMortarGeneration>> &
1989  getMortarInterfaces(bool on_displaced) const;
1990 
1991  virtual void possiblyRebuildGeomSearchPatches();
1992 
1994 
1999  void setRestartFile(const std::string & file_name);
2000 
2005  {
2006  return _material_prop_registry;
2007  }
2008 
2017  {
2018  return _neighbor_material_props;
2019  }
2020 
2021 #ifdef MOOSE_KOKKOS_ENABLED
2023  {
2024  return _kokkos_material_props;
2025  }
2027  {
2029  }
2031  {
2033  }
2034 #endif
2035 
2043  {
2045  }
2048 
2053 
2058 
2062  SolverParams & solverParams(unsigned int solver_sys_num = 0);
2063 
2067  const SolverParams & solverParams(unsigned int solver_sys_num = 0) const;
2068 
2069 #ifdef LIBMESH_ENABLE_AMR
2070  // Adaptivity /////
2072  virtual void initialAdaptMesh();
2073 
2077  virtual bool adaptMesh();
2078 
2082  unsigned int getNumCyclesCompleted() { return _cycles_completed; }
2083 
2087  bool hasInitialAdaptivity() const { return _adaptivity.getInitialSteps() > 0; }
2088 #else
2089 
2092  bool hasInitialAdaptivity() const { return false; }
2093 #endif // LIBMESH_ENABLE_AMR
2094 
2096  void initXFEM(std::shared_ptr<XFEMInterface> xfem);
2097 
2099  std::shared_ptr<XFEMInterface> getXFEM() { return _xfem; }
2100 
2102  bool haveXFEM() { return _xfem != nullptr; }
2103 
2105  virtual bool updateMeshXFEM();
2106 
2121  virtual void
2122  meshChanged(bool intermediate_change, bool contract_mesh, bool clean_refinement_flags);
2123 
2129 
2135 
2141  void initElementStatefulProps(const libMesh::ConstElemRange & elem_range, const bool threaded);
2142 
2143 #ifdef MOOSE_KOKKOS_ENABLED
2144  void initKokkosStatefulProps();
2145 #endif
2146 
2151  virtual void checkProblemIntegrity();
2152 
2153  void registerRandomInterface(RandomInterface & random_interface, const std::string & name);
2154 
2159  void setConstJacobian(bool state) { _const_jacobian = state; }
2160 
2166 
2171  void setKernelCoverageCheck(bool flag)
2172  {
2174  }
2175 
2183 
2191  {
2193  }
2194 
2199 
2201  void setVerboseProblem(bool verbose);
2202 
2206  bool verboseMultiApps() const { return _verbose_multiapps; }
2207 
2212 
2214 
2231  bool needBoundaryMaterialOnSide(BoundaryID bnd_id, const THREAD_ID tid);
2232  bool needInterfaceMaterialOnSide(BoundaryID bnd_id, const THREAD_ID tid);
2233  bool needInternalNeighborSideMaterial(SubdomainID subdomain_id, const THREAD_ID tid);
2235 
2240  unsigned int subspaceDim(const std::string & prefix) const
2241  {
2242  if (_subspace_dim.count(prefix))
2243  return _subspace_dim.find(prefix)->second;
2244  else
2245  return 0;
2246  }
2247 
2248  /*
2249  * Return reference to function warehouse.
2250  */
2252 
2253  /*
2254  * Return a reference to the material warehouse of *all* Material objects.
2255  */
2257 
2258  /*
2259  * Return a reference to the material warehouse of Material objects to be computed.
2260  */
2264 
2265 #ifdef MOOSE_KOKKOS_ENABLED
2266  /*
2267  * Return a reference to the material warehouse of Kokkos Material objects to be computed.
2268  */
2270 #endif
2271 
2279  std::shared_ptr<MaterialBase> getMaterial(std::string name,
2281  const THREAD_ID tid = 0,
2282  bool no_warn = false);
2283 
2288  const THREAD_ID tid = 0,
2289  const MooseObject * object = nullptr) const;
2290 
2291 #ifdef MOOSE_KOKKOS_ENABLED
2292 
2296  const MooseObject * object = nullptr) const;
2297 #endif
2298 
2302  const std::set<const MooseObject *> &
2304 
2305 #ifdef MOOSE_KOKKOS_ENABLED
2306 
2309  const std::set<const MooseObject *> &
2311 #endif
2312 
2317 
2323  {
2325  }
2326 
2328  {
2330  }
2331 
2337 
2341  void setPreserveMatrixSparsityPattern(bool preserve);
2342 
2348 
2351 
2358  bool acceptInvalidSolution() const;
2363 
2368 
2373 
2375  bool hasTimeIntegrator() const { return _has_time_integrator; }
2376 
2378 
2384  const ExecFlagType & getCurrentExecuteOnFlag() const;
2385  void setCurrentExecuteOnFlag(const ExecFlagType &);
2387 
2391  virtual void execute(const ExecFlagType & exec_type);
2392  virtual void executeAllObjects(const ExecFlagType & exec_type);
2393 
2394  virtual Executor & getExecutor(const std::string & name) { return _app.getExecutor(name); }
2395 
2399  virtual void computeUserObjects(const ExecFlagType & type, const Moose::AuxGroup & group);
2400 
2404  virtual void computeUserObjectByName(const ExecFlagType & type,
2405  const Moose::AuxGroup & group,
2406  const std::string & name);
2407 
2411  void needsPreviousNewtonIteration(bool state);
2412 
2417  bool needsPreviousNewtonIteration() const;
2418 
2426  const unsigned int solver_sys_num);
2427 
2434  bool needsPreviousMultiAppFixedPointIterationSolution(const unsigned int solver_sys_num) const;
2435 
2441 
2449 
2451 
2454  std::vector<Real> _real_zero;
2455  std::vector<VariableValue> _scalar_zero;
2456  std::vector<VariableValue> _zero;
2457  std::vector<VariablePhiValue> _phi_zero;
2458  std::vector<MooseArray<ADReal>> _ad_zero;
2459  std::vector<VariableGradient> _grad_zero;
2460  std::vector<MooseArray<ADRealVectorValue>> _ad_grad_zero;
2461  std::vector<VariablePhiGradient> _grad_phi_zero;
2462  std::vector<VariableSecond> _second_zero;
2463  std::vector<MooseArray<ADRealTensorValue>> _ad_second_zero;
2464  std::vector<VariablePhiSecond> _second_phi_zero;
2465  std::vector<Point> _point_zero;
2466  std::vector<VectorVariableValue> _vector_zero;
2467  std::vector<VectorVariableCurl> _vector_curl_zero;
2469 
2474 
2478  void executeControls(const ExecFlagType & exec_type);
2479 
2483  void executeSamplers(const ExecFlagType & exec_type);
2484 
2488  virtual void updateActiveObjects();
2489 
2496 
2498 
2502  bool hasJacobian() const;
2503 
2508  bool constJacobian() const;
2509 
2513  void addOutput(const std::string &, const std::string &, InputParameters &);
2514 
2515  inline TheWarehouse & theWarehouse() const { return _app.theWarehouse(); }
2516 
2520  void setSNESMFReuseBase(bool reuse, bool set_by_user)
2521  {
2522  _snesmf_reuse_base = reuse, _snesmf_reuse_base_set_by_user = set_by_user;
2523  }
2524 
2529 
2533  void skipExceptionCheck(bool skip_exception_check)
2534  {
2535  _skip_exception_check = skip_exception_check;
2536  }
2537 
2542 
2547 
2548 #if !PETSC_RELEASE_LESS_THAN(3, 12, 0)
2549  PetscOptions & petscOptionsDatabase() { return _petsc_option_data_base; }
2550 #endif
2551 
2553  virtual void setUDotRequested(const bool u_dot_requested) { _u_dot_requested = u_dot_requested; }
2554 
2556  virtual void setUDotDotRequested(const bool u_dotdot_requested)
2557  {
2558  _u_dotdot_requested = u_dotdot_requested;
2559  }
2560 
2562  virtual void setUDotOldRequested(const bool u_dot_old_requested)
2563  {
2564  _u_dot_old_requested = u_dot_old_requested;
2565  }
2566 
2568  virtual void setUDotDotOldRequested(const bool u_dotdot_old_requested)
2569  {
2570  _u_dotdot_old_requested = u_dotdot_old_requested;
2571  }
2572 
2574  virtual bool uDotRequested() { return _u_dot_requested; }
2575 
2577  virtual bool uDotDotRequested() { return _u_dotdot_requested; }
2578 
2580  virtual bool uDotOldRequested()
2581  {
2583  mooseError("FEProblemBase: When requesting old time derivative of solution, current time "
2584  "derivative of solution should also be stored. Please set `u_dot_requested` to "
2585  "true using setUDotRequested.");
2586 
2587  return _u_dot_old_requested;
2588  }
2589 
2591  virtual bool uDotDotOldRequested()
2592  {
2594  mooseError("FEProblemBase: When requesting old second time derivative of solution, current "
2595  "second time derivation of solution should also be stored. Please set "
2596  "`u_dotdot_requested` to true using setUDotDotRequested.");
2597  return _u_dotdot_old_requested;
2598  }
2599 
2601  void haveADObjects(bool have_ad_objects) override;
2602 
2603  // Whether or not we should solve this system
2604  bool shouldSolve() const { return _solve; }
2605 
2609  const MortarInterfaceWarehouse & mortarData() const { return *_mortar_data; }
2611 
2616 
2620  virtual bool hasMortarCoupling() const { return _has_mortar; }
2621 
2623  void computingNonlinearResid(bool computing_nonlinear_residual) final;
2624 
2626  void setCurrentlyComputingResidual(bool currently_computing_residual) final;
2627 
2631  void numGridSteps(unsigned int num_grid_steps) { _num_grid_steps = num_grid_steps; }
2632 
2637  void uniformRefine();
2638 
2640  void automaticScaling(bool automatic_scaling) override;
2641 
2643 
2646  template <typename T>
2647  static void objectSetupHelper(const std::vector<T *> & objects, const ExecFlagType & exec_flag);
2648  template <typename T>
2649  static void objectExecuteHelper(const std::vector<T *> & objects);
2651 
2658  virtual void reinitElemFaceRef(const Elem * elem,
2659  unsigned int side,
2660  Real tolerance,
2661  const std::vector<Point> * const pts,
2662  const std::vector<Real> * const weights = nullptr,
2663  const THREAD_ID tid = 0) override;
2664 
2671  virtual void reinitNeighborFaceRef(const Elem * neighbor_elem,
2672  unsigned int neighbor_side,
2673  Real tolerance,
2674  const std::vector<Point> * const pts,
2675  const std::vector<Real> * const weights = nullptr,
2676  const THREAD_ID tid = 0) override;
2677 
2682 
2687  void fvBCsIntegrityCheck(bool fv_bcs_integrity_check);
2688 
2697  void getFVMatsAndDependencies(SubdomainID block_id,
2698  std::vector<std::shared_ptr<MaterialBase>> & face_materials,
2699  std::vector<std::shared_ptr<MaterialBase>> & neighbor_materials,
2700  std::set<MooseVariableFieldBase *> & variables,
2701  const THREAD_ID tid);
2702 
2709  void resizeMaterialData(Moose::MaterialDataType data_type, unsigned int nqp, const THREAD_ID tid);
2710 
2711  bool haveDisplaced() const override final { return _displaced_problem.get(); }
2712 
2714  bool hasLinearConvergenceObjects() const;
2718  void setNonlinearConvergenceNames(const std::vector<ConvergenceName> & convergence_names);
2722  void setLinearConvergenceNames(const std::vector<ConvergenceName> & convergence_names);
2726  void setMultiAppFixedPointConvergenceName(const ConvergenceName & convergence_name);
2730  void setSteadyStateConvergenceName(const ConvergenceName & convergence_name);
2731 
2735  const std::vector<ConvergenceName> & getNonlinearConvergenceNames() const;
2739  const std::vector<ConvergenceName> & getLinearConvergenceNames() const;
2743  const ConvergenceName & getMultiAppFixedPointConvergenceName() const;
2747  const ConvergenceName & getSteadyStateConvergenceName() const;
2748 
2752  void computingScalingJacobian(bool computing_scaling_jacobian)
2753  {
2754  _computing_scaling_jacobian = computing_scaling_jacobian;
2755  }
2756 
2757  bool computingScalingJacobian() const override final { return _computing_scaling_jacobian; }
2758 
2762  void computingScalingResidual(bool computing_scaling_residual)
2763  {
2764  _computing_scaling_residual = computing_scaling_residual;
2765  }
2766 
2770  bool computingScalingResidual() const override final { return _computing_scaling_residual; }
2771 
2777 
2778  virtual std::size_t numNonlinearSystems() const override { return _num_nl_sys; }
2779 
2780  virtual std::size_t numLinearSystems() const override { return _num_linear_sys; }
2781 
2782  virtual std::size_t numSolverSystems() const override { return _num_nl_sys + _num_linear_sys; }
2783 
2785  bool isSolverSystemNonlinear(const unsigned int sys_num) { return sys_num < _num_nl_sys; }
2786 
2787  virtual unsigned int currentNlSysNum() const override;
2788 
2789  virtual unsigned int currentLinearSysNum() const override;
2790 
2794  virtual unsigned int nlSysNum(const NonlinearSystemName & nl_sys_name) const override;
2795 
2799  unsigned int linearSysNum(const LinearSystemName & linear_sys_name) const override;
2800 
2804  unsigned int solverSysNum(const SolverSystemName & solver_sys_name) const override;
2805 
2810  unsigned int systemNumForVariable(const VariableName & variable_name) const;
2811 
2816 
2821 
2826 
2827  /*
2828  * Set the status of loop order of execution printing
2829  * @param print_exec set of execution flags to print on
2830  */
2831  void setExecutionPrinting(const ExecFlagEnum & print_exec) { _print_execution_on = print_exec; }
2832 
2836  bool shouldPrintExecution(const THREAD_ID tid) const;
2841  void reinitMortarUserObjects(BoundaryID primary_boundary_id,
2842  BoundaryID secondary_boundary_id,
2843  bool displaced);
2844 
2845  virtual const std::vector<VectorTag> & currentResidualVectorTags() const override;
2846 
2852  {
2853  friend class CrankNicolson;
2854  friend class FEProblemBase;
2857  };
2858 
2862  void setCurrentResidualVectorTags(const std::set<TagID> & vector_tags);
2863 
2868 
2873 
2874  virtual void needFV() override { _have_fv = true; }
2875  virtual bool haveFV() const override { return _have_fv; }
2876 
2877  virtual bool hasNonlocalCoupling() const override { return _has_nonlocal_coupling; }
2878 
2883 
2884  virtual void setCurrentLowerDElem(const Elem * const lower_d_elem, const THREAD_ID tid) override;
2885  virtual void setCurrentBoundaryID(BoundaryID bid, const THREAD_ID tid) override;
2886 
2890  const std::vector<NonlinearSystemName> & getNonlinearSystemNames() const { return _nl_sys_names; }
2894  const std::vector<LinearSystemName> & getLinearSystemNames() const { return _linear_sys_names; }
2898  const std::vector<SolverSystemName> & getSolverSystemNames() const { return _solver_sys_names; }
2899 
2900  virtual const libMesh::CouplingMatrix & nonlocalCouplingMatrix(const unsigned i) const override;
2901 
2902  virtual bool checkNonlocalCouplingRequirement() const override;
2903 
2905 
2907  {
2910 
2912  };
2913 
2915 
2917 
2918 #ifdef MOOSE_KOKKOS_ENABLED
2919 
2922  bool hasKokkosObjects() const { return _has_kokkos_objects; }
2931  void addKokkosMeshInitializationHook(std::function<void()> function)
2932  {
2933  _kokkos_mesh_initialization_hooks.push_back(function);
2934  }
2935 #endif
2936 
2937 protected:
2941  virtual void meshChanged() {}
2942 
2944  void createTagVectors();
2945 
2947  void createTagSolutions();
2948 
2952  virtual void meshDisplaced();
2953 
2957  void computeSystems(const ExecFlagType & type);
2958 
2960 
2961 private:
2964 
2976  void setResidualObjectParamsAndLog(const std::string & ro_name,
2977  const std::string & name,
2979  const unsigned int nl_sys_num,
2980  const std::string & base_name,
2981  bool & reinit_displaced);
2982 
2990  void setAuxKernelParamsAndLog(const std::string & ak_name,
2991  const std::string & name,
2993  const std::string & base_name);
2994 
2999 
3000  TheWarehouse::Query getUOQuery(const std::string & system,
3001  const ExecFlagType & type,
3002  const Moose::AuxGroup & group) const;
3003 
3004  void getUOExecutionGroups(TheWarehouse::Query & query, std::set<int> & execution_groups) const;
3005 
3006 protected:
3008 
3010  std::optional<std::vector<ConvergenceName>> _nonlinear_convergence_names;
3012  std::optional<std::vector<ConvergenceName>> _linear_convergence_names;
3014  std::optional<ConvergenceName> _multiapp_fixed_point_convergence_name;
3016  std::optional<ConvergenceName> _steady_state_convergence_name;
3017 
3018  std::set<TagID> _fe_vector_tags;
3019 
3020  std::set<TagID> _fe_matrix_tags;
3021 
3023  std::set<TagID> _linear_vector_tags;
3024 
3026  std::set<TagID> _linear_matrix_tags;
3027 
3029  const bool & _solve;
3030 
3034  int & _t_step;
3037 
3044 
3046  const std::vector<LinearSystemName> _linear_sys_names;
3047 
3049  const std::size_t _num_linear_sys;
3050 
3052  std::vector<std::shared_ptr<LinearSystem>> _linear_systems;
3053 
3055  std::map<LinearSystemName, unsigned int> _linear_sys_name_to_num;
3056 
3059 
3061  const bool _using_default_nl;
3062 
3064  const std::vector<NonlinearSystemName> _nl_sys_names;
3065 
3067  const std::size_t _num_nl_sys;
3068 
3070  std::vector<std::shared_ptr<NonlinearSystemBase>> _nl;
3071 
3073  std::map<NonlinearSystemName, unsigned int> _nl_sys_name_to_num;
3074 
3077 
3080 
3082  std::vector<std::shared_ptr<SolverSystem>> _solver_systems;
3083 
3085  std::map<SolverVariableName, unsigned int> _solver_var_to_sys_num;
3086 
3088  std::map<SolverSystemName, unsigned int> _solver_sys_name_to_num;
3089 
3091  std::vector<SolverSystemName> _solver_sys_names;
3092 
3094  std::shared_ptr<AuxiliarySystem> _aux;
3095 
3097  std::vector<std::unique_ptr<libMesh::CouplingMatrix>> _cm;
3098 
3099 #ifdef MOOSE_KOKKOS_ENABLED
3101 #endif
3102 
3104  std::map<std::string, unsigned int> _subspace_dim;
3105 
3108  std::vector<std::vector<std::unique_ptr<Assembly>>> _assembly;
3109 
3110 #ifdef MOOSE_KOKKOS_ENABLED
3112 #endif
3113 
3118 
3121 
3122 #ifdef MOOSE_KOKKOS_ENABLED
3124 #endif
3125 
3128 
3131 
3134 
3139  ScalarInitialConditionWarehouse _scalar_ics; // use base b/c of setup methods
3141 
3142  // material properties
3147 
3148 #ifdef MOOSE_KOKKOS_ENABLED
3152 #endif
3153  // Material Warehouses
3155  MaterialWarehouse _materials; // regular materials
3156  MaterialWarehouse _interface_materials; // interface materials
3157  MaterialWarehouse _discrete_materials; // Materials that the user must compute
3158  MaterialWarehouse _all_materials; // All materials for error checking and MaterialData storage
3159 
3160 #ifdef MOOSE_KOKKOS_ENABLED
3162 #endif
3163 
3166  // Indicator Warehouses
3170 
3171  // Marker Warehouse
3173 
3174  // Helper class to access Reporter object values
3176 
3179 
3182 
3185 
3188 
3191 
3194 
3196  std::map<std::string, std::unique_ptr<RandomData>> _random_data_objects;
3197 
3199  std::vector<std::unordered_map<SubdomainID, bool>> _block_mat_side_cache;
3200 
3202  std::vector<std::unordered_map<BoundaryID, bool>> _bnd_mat_side_cache;
3203 
3205  std::vector<std::unordered_map<BoundaryID, bool>> _interface_mat_side_cache;
3206 
3208  std::vector<MeshChangedInterface *> _notify_when_mesh_changes;
3209 
3211  std::vector<MeshDisplacedInterface *> _notify_when_mesh_displaces;
3212 
3214  bool duplicateVariableCheck(const std::string & var_name,
3215  const libMesh::FEType & type,
3216  bool is_aux,
3217  const std::set<SubdomainID> * const active_subdomains);
3218 
3220 
3221 #ifdef MOOSE_KOKKOS_ENABLED
3223 #endif
3224 
3226  void checkDisplacementOrders();
3227 
3228  void checkUserObjects();
3229 
3236  const std::map<SubdomainID, std::vector<std::shared_ptr<MaterialBase>>> & materials_map);
3237 
3239  void checkCoordinateSystems();
3240 
3246  void reinitBecauseOfGhostingOrNewGeomObjects(bool mortar_changed = false);
3247 
3254  void addObjectParamsHelper(InputParameters & params,
3255  const std::string & object_name,
3256  const std::string & var_param_name = "variable");
3257 
3258 #ifdef LIBMESH_ENABLE_AMR
3260  unsigned int _cycles_completed;
3261 #endif
3262 
3264  std::shared_ptr<XFEMInterface> _xfem;
3265 
3266  // Displaced mesh /////
3268  std::shared_ptr<DisplacedProblem> _displaced_problem;
3270  std::unique_ptr<MortarInterfaceWarehouse> _mortar_data;
3271 
3278 
3281 
3284 
3287 
3290 
3293 
3296 
3299 
3302 
3305 
3308 
3315 
3319 
3320  std::vector<std::vector<const MooseVariableFEBase *>> _uo_jacobian_moose_vars;
3321 
3323  std::vector<unsigned char> _has_active_material_properties;
3324 
3325  std::vector<SolverParams> _solver_params;
3326 
3329  std::vector<SubdomainName> _kernel_coverage_blocks;
3330 
3334 
3338 
3341  std::vector<SubdomainName> _material_coverage_blocks;
3342 
3345 
3348 
3351 
3352 #ifndef NDEBUG
3355 #endif
3356 
3358  unsigned int _max_qps;
3359 
3362 
3365 
3368 
3371 
3374 
3377 
3380 
3382  std::string _exception_message;
3383 
3386 
3389 
3392 #if !PETSC_RELEASE_LESS_THAN(3, 12, 0)
3394 #endif
3395 
3398 
3399  std::shared_ptr<LineSearch> _line_search;
3400 
3401  std::unique_ptr<libMesh::ConstElemRange> _evaluable_local_elem_range;
3402  std::unique_ptr<libMesh::ConstElemRange> _nl_evaluable_local_elem_range;
3403  std::unique_ptr<libMesh::ConstElemRange> _aux_evaluable_local_elem_range;
3404 
3405  std::unique_ptr<libMesh::ConstElemRange> _current_algebraic_elem_range;
3406  std::unique_ptr<libMesh::ConstNodeRange> _current_algebraic_node_range;
3407  std::unique_ptr<ConstBndNodeRange> _current_algebraic_bnd_node_range;
3408 
3412 
3413  // loop state during projection of initial conditions
3414  unsigned short _current_ic_state;
3415 
3419 
3420 private:
3425  void handleException(const std::string & calling_method);
3426 
3431  std::vector<MortarUserObject *>
3432  getMortarUserObjects(BoundaryID primary_boundary_id,
3433  BoundaryID secondary_boundary_id,
3434  bool displaced,
3435  const std::vector<MortarUserObject *> & mortar_uo_superset);
3436 
3441  std::vector<MortarUserObject *> getMortarUserObjects(BoundaryID primary_boundary_id,
3442  BoundaryID secondary_boundary_id,
3443  bool displaced);
3444 
3454  virtual std::pair<bool, unsigned int>
3455  determineSolverSystem(const std::string & var_name,
3456  bool error_if_not_found = false) const override;
3457 
3464  void checkICRestartError(const std::string & ic_name,
3465  const std::string & name,
3466  const VariableName & var_name);
3467 
3468  /*
3469  * Test if stateful property redistribution is expected to be
3470  * necessary, and set it up if so.
3471  */
3472  void addAnyRedistributers();
3473 
3474  void updateMaxQps();
3475 
3476  void joinAndFinalize(TheWarehouse::Query query, bool isgen = false);
3477 
3478 #ifdef MOOSE_KOKKOS_ENABLED
3479  void kokkosJoinAndFinalize(const std::vector<Moose::Kokkos::UserObject *> & userobjs);
3480 #endif
3481 
3485  virtual void resetState();
3486 
3487  // Parameters handling Jacobian sparsity pattern behavior
3499 
3500  const bool _force_restart;
3507 
3510 
3513 
3516 
3519 
3522 
3525 
3526  friend class AuxiliarySystem;
3527  friend class NonlinearSystemBase;
3528  friend class MooseEigenSystem;
3529  friend class Resurrector;
3530  friend class Restartable;
3531  friend class DisplacedProblem;
3532 
3535 
3537  unsigned int _num_grid_steps;
3538 
3542 
3545 
3548 
3551 
3554 
3557 
3561  std::vector<VectorTag> _current_residual_vector_tags;
3562 
3564  bool _have_fv = false;
3565 
3569 
3571  std::vector<libMesh::CouplingMatrix> _nonlocal_cm;
3572 
3575 
3576 #ifdef MOOSE_KOKKOS_ENABLED
3577  bool _has_kokkos_objects = false;
3579 
3582 
3584  std::vector<std::function<void()>> _kokkos_mesh_initialization_hooks;
3585 #endif
3586 
3587  friend void Moose::PetscSupport::setSinglePetscOption(const std::string & name,
3588  const std::string & value,
3589  FEProblemBase * const problem);
3590 };
3591 
3593 
3594 template <typename T>
3595 void
3597 {
3598  _app.getOutputWarehouse().allowOutput<T>(state);
3599 }
3600 
3601 template <typename T>
3602 void
3603 FEProblemBase::objectSetupHelper(const std::vector<T *> & objects, const ExecFlagType & exec_flag)
3604 {
3605  if (exec_flag == EXEC_INITIAL)
3606  {
3607  for (T * obj_ptr : objects)
3608  obj_ptr->initialSetup();
3609  }
3610 
3611  else if (exec_flag == EXEC_TIMESTEP_BEGIN)
3612  {
3613  for (const auto obj_ptr : objects)
3614  obj_ptr->timestepSetup();
3615  }
3616  else if (exec_flag == EXEC_SUBDOMAIN)
3617  {
3618  for (const auto obj_ptr : objects)
3619  obj_ptr->subdomainSetup();
3620  }
3621 
3622  else if (exec_flag == EXEC_NONLINEAR)
3623  {
3624  for (const auto obj_ptr : objects)
3625  obj_ptr->jacobianSetup();
3626  }
3627 
3628  else if (exec_flag == EXEC_LINEAR)
3629  {
3630  for (const auto obj_ptr : objects)
3631  obj_ptr->residualSetup();
3632  }
3633 }
3634 
3635 template <typename T>
3636 void
3637 FEProblemBase::objectExecuteHelper(const std::vector<T *> & objects)
3638 {
3639  for (T * obj_ptr : objects)
3640  obj_ptr->execute();
3641 }
3642 
3643 template <typename T>
3644 std::vector<std::shared_ptr<T>>
3645 FEProblemBase::addObject(const std::string & type,
3646  const std::string & name,
3648  const bool threaded,
3649  const std::string & var_param_name)
3650 {
3651  parallel_object_only();
3652 
3653  logAdd(MooseUtils::prettyCppType<T>(), name, type, parameters);
3654  // Add the _subproblem and _sys parameters depending on use_displaced_mesh
3655  addObjectParamsHelper(parameters, name, var_param_name);
3656 
3657  const auto n_threads = threaded ? libMesh::n_threads() : 1;
3658  std::vector<std::shared_ptr<T>> objects(n_threads);
3659  for (THREAD_ID tid = 0; tid < n_threads; ++tid)
3660  {
3661  std::shared_ptr<T> obj = _factory.create<T>(type, name, parameters, tid);
3662  theWarehouse().add(obj);
3663  objects[tid] = std::move(obj);
3664  }
3665 
3666  return objects;
3667 }
3668 
3669 inline NonlinearSystemBase &
3670 FEProblemBase::getNonlinearSystemBase(const unsigned int sys_num)
3671 {
3672  mooseAssert(sys_num < _nl.size(), "System number greater than the number of nonlinear systems");
3673  return *_nl[sys_num];
3674 }
3675 
3676 inline const NonlinearSystemBase &
3677 FEProblemBase::getNonlinearSystemBase(const unsigned int sys_num) const
3678 {
3679  mooseAssert(sys_num < _nl.size(), "System number greater than the number of nonlinear systems");
3680  return *_nl[sys_num];
3681 }
3682 
3683 inline SolverSystem &
3684 FEProblemBase::getSolverSystem(const unsigned int sys_num)
3685 {
3686  mooseAssert(sys_num < _solver_systems.size(),
3687  "System number greater than the number of solver systems");
3688  return *_solver_systems[sys_num];
3689 }
3690 
3691 inline const SolverSystem &
3692 FEProblemBase::getSolverSystem(const unsigned int sys_num) const
3693 {
3694  mooseAssert(sys_num < _solver_systems.size(),
3695  "System number greater than the number of solver systems");
3696  return *_solver_systems[sys_num];
3697 }
3698 
3699 inline NonlinearSystemBase &
3701 {
3702  mooseAssert(_current_nl_sys, "The nonlinear system is not currently set");
3703  return *_current_nl_sys;
3704 }
3705 
3706 inline const NonlinearSystemBase &
3708 {
3709  mooseAssert(_current_nl_sys, "The nonlinear system is not currently set");
3710  return *_current_nl_sys;
3711 }
3712 
3713 inline LinearSystem &
3714 FEProblemBase::getLinearSystem(const unsigned int sys_num)
3715 {
3716  mooseAssert(sys_num < _linear_systems.size(),
3717  "System number greater than the number of linear systems");
3718  return *_linear_systems[sys_num];
3719 }
3720 
3721 inline const LinearSystem &
3722 FEProblemBase::getLinearSystem(const unsigned int sys_num) const
3723 {
3724  mooseAssert(sys_num < _linear_systems.size(),
3725  "System number greater than the number of linear systems");
3726  return *_linear_systems[sys_num];
3727 }
3728 
3729 inline LinearSystem &
3731 {
3732  mooseAssert(_current_linear_sys, "The linear system is not currently set");
3733  return *_current_linear_sys;
3734 }
3735 
3736 inline const LinearSystem &
3738 {
3739  mooseAssert(_current_linear_sys, "The linear system is not currently set");
3740  return *_current_linear_sys;
3741 }
3742 
3743 inline Assembly &
3744 FEProblemBase::assembly(const THREAD_ID tid, const unsigned int sys_num)
3745 {
3746  mooseAssert(tid < _assembly.size(), "Assembly objects not initialized");
3747  mooseAssert(sys_num < _assembly[tid].size(),
3748  "System number larger than the assembly container size");
3749  return *_assembly[tid][sys_num];
3750 }
3751 
3752 inline const Assembly &
3753 FEProblemBase::assembly(const THREAD_ID tid, const unsigned int sys_num) const
3754 {
3755  mooseAssert(tid < _assembly.size(), "Assembly objects not initialized");
3756  mooseAssert(sys_num < _assembly[tid].size(),
3757  "System number larger than the assembly container size");
3758  return *_assembly[tid][sys_num];
3759 }
3760 
3761 inline const libMesh::CouplingMatrix *
3762 FEProblemBase::couplingMatrix(const unsigned int i) const
3763 {
3764  return _cm[i].get();
3765 }
3766 
3767 inline void
3768 FEProblemBase::fvBCsIntegrityCheck(const bool fv_bcs_integrity_check)
3769 {
3771  // the user has requested that we don't check integrity so we will honor that
3772  return;
3773 
3774  _fv_bcs_integrity_check = fv_bcs_integrity_check;
3775 }
3776 
3777 inline const std::vector<VectorTag> &
3779 {
3781 }
3782 
3783 inline void
3784 FEProblemBase::setCurrentResidualVectorTags(const std::set<TagID> & vector_tags)
3785 {
3787 }
3788 
3789 inline void
3791 {
3793 }
3794 
3795 #ifdef MOOSE_KOKKOS_ENABLED
3796 template <typename T>
3797 T &
3799 {
3800  if (!hasKokkosFunction(name))
3801  {
3802  // If we didn't find a function, it might be a default function, attempt to construct one now
3803  std::istringstream ss(name);
3804  Real real_value;
3805 
3806  // First see if it's just a constant. If it is, build a ConstantFunction
3807  if (ss >> real_value && ss.eof())
3808  {
3809  InputParameters params = _factory.getValidParams("KokkosConstantFunction");
3810  params.set<Real>("value") = real_value;
3811  addKokkosFunction("KokkosConstantFunction", ss.str(), params);
3812  }
3813 
3814  // Try once more
3815  if (!hasKokkosFunction(name))
3816  mooseError("Unable to find Kokkos function '" + name, "'");
3817  }
3818 
3819  auto * const ret = dynamic_cast<T *>(_kokkos_functions.getActiveObject(name).get());
3820  if (!ret)
3821  mooseError("No Kokkos function named '", name, "' of appropriate type");
3822 
3823  return *ret;
3824 }
3825 #endif
bool _reinit_displaced_elem
Whether to call DisplacedProblem::reinitElem when this->reinitElem is called.
bool initialized() const
virtual void addInterfaceMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
std::map< NonlinearSystemName, unsigned int > _nl_sys_name_to_num
Map from nonlinear system name to number.
void setCurrentAlgebraicElementRange(libMesh::ConstElemRange *range)
These functions allow setting custom ranges for the algebraic elements, nodes, and boundary nodes tha...
std::vector< Point > _point_zero
Interface for objects that need parallel consistent random numbers without patterns over the course o...
virtual void computeJacobianTag(const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian, TagID tag)
Form a Jacobian matrix for a given tag.
unsigned short getCurrentICState()
Retrieves the current initial condition state.
void resetFailNextNonlinearConvergenceCheck()
Tell the problem that the nonlinear convergence check(s) may proceed as normal.
bool _u_dot_requested
Whether solution time derivative needs to be stored.
void finalizeMultiApps()
Warehouse for storing scalar initial conditions.
virtual void addFVInitialCondition(const std::string &ic_name, const std::string &name, InputParameters &parameters)
Add an initial condition for a finite volume variables.
VarFieldType
Definition: MooseTypes.h:770
virtual void addMaterialHelper(std::vector< MaterialWarehouse *> warehouse, const std::string &material_name, const std::string &name, InputParameters &parameters)
virtual bool hasNeighborCoupling() const
Whether the simulation has neighbor coupling.
virtual bool hasVariable(const std::string &var_name) const override
Whether or not this problem has the variable.
MortarInterfaceWarehouse & mortarData()
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 shouldSolve() const
const bool _regard_general_exceptions_as_errors
If we catch an exception during residual/Jacobian evaluaton for which we don&#39;t have specific handling...
const std::vector< NonlinearSystemName > & getNonlinearSystemNames() const
const std::size_t _num_nl_sys
The number of nonlinear systems.
void setVariableAllDoFMap(const std::vector< const MooseVariableFEBase *> &moose_vars)
virtual void initPetscOutputAndSomeSolverSettings()
Reinitialize PETSc output for proper linear/nonlinear iteration display.
void setKernelCoverageCheck(CoverageCheckMode mode)
Set flag to indicate whether kernel coverage checks should be performed.
const std::vector< ConvergenceName > & getNonlinearConvergenceNames() const
Gets the nonlinear system convergence object name(s).
void timestepSetup() override
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.
bool _skip_exception_check
If or not skip &#39;exception and stop solve&#39;.
virtual void setUDotDotOldRequested(const bool u_dotdot_old_requested)
Set boolean flag to true to store old solution second time derivative.
Helper class for holding the preconditioning blocks to fill.
bool _reinit_displaced_neighbor
Whether to call DisplacedProblem::reinitNeighbor when this->reinitNeighbor is called.
virtual void meshChanged()
Deprecated.
virtual void addDamper(const std::string &damper_name, const std::string &name, InputParameters &parameters)
std::map< LinearSystemName, unsigned int > _linear_sys_name_to_num
Map from linear system name to number.
The Kokkos assembly class.
Moose::PetscSupport::PetscOptions & getPetscOptions()
Retrieve a writable reference the PETSc options (used by PetscSupport)
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.
std::vector< MooseArray< ADRealTensorValue > > _ad_second_zero
virtual Real & dtOld() const
bool _need_to_add_default_steady_state_convergence
Flag that the problem needs to add the default steady convergence.
virtual void prepareFace(const Elem *elem, const THREAD_ID tid) override
Base class for function objects.
Definition: Function.h:29
void setPreserveMatrixSparsityPattern(bool preserve)
Set whether the sparsity pattern of the matrices being formed during the solve (usually the Jacobian)...
void reinitBecauseOfGhostingOrNewGeomObjects(bool mortar_changed=false)
Call when it is possible that the needs for ghosted elements has changed.
virtual void addTransfer(const std::string &transfer_name, const std::string &name, InputParameters &parameters)
Add a Transfer to the problem.
virtual libMesh::System & getSystem(const std::string &var_name) override
Returns the equation system containing the variable provided.
A MultiMooseEnum object to hold "execute_on" flags.
Definition: ExecFlagEnum.h:21
static SolverParams makeLinearSolverParams()
Make basic solver params for linear solves.
bool _snesmf_reuse_base_set_by_user
If or not _snesmf_reuse_base is set by user.
bool _parallel_barrier_messaging
Whether or not information about how many transfers have completed is printed.
virtual void addResidualLower(const THREAD_ID tid) override
bool _computing_scaling_jacobian
Flag used to indicate whether we are computing the scaling Jacobian.
A class for creating restricted objects.
Definition: Restartable.h:28
virtual void addJacobianLowerD(const THREAD_ID tid) override
Factory & _factory
The Factory for building objects.
Definition: SubProblem.h:1054
virtual void clearActiveScalarVariableCoupleableVectorTags(const THREAD_ID tid) override
MaterialPropertyStorage & _bnd_material_props
virtual void addGhostedElem(dof_id_type elem_id) override
Will make sure that all dofs connected to elem_id are ghosted to this processor.
void setNonlocalCouplingMatrix()
Set custom coupling matrix for variables requiring nonlocal contribution.
void setExecutionPrinting(const ExecFlagEnum &print_exec)
virtual Real & time() const
std::vector< std::pair< MooseVariableFEBase *, MooseVariableFEBase * > > & couplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num)
void checkDependMaterialsHelper(const std::map< SubdomainID, std::vector< std::shared_ptr< MaterialBase >>> &materials_map)
Helper method for checking Material object dependency.
unsigned int n_threads()
void setNeedToAddDefaultSteadyStateConvergence()
Sets _need_to_add_default_steady_state_convergence to true.
virtual void cacheResidualNeighbor(const THREAD_ID tid) override
virtual void setInputParametersFEProblem(InputParameters &parameters)
bool identifyVariableGroupsInNL() const
Whether to identify variable groups in nonlinear systems.
ExecFlagType _current_execute_on_flag
Current execute_on flag.
void clearCurrentResidualVectorTags()
Clear the current residual vector tag data structure.
QueryCache is a convenient way to construct and pass around (possible partially constructed) warehous...
Definition: TheWarehouse.h:209
T & getUserObject(const std::string &name, unsigned int tid=0) const
Get the user object by its name.
std::shared_ptr< DisplacedProblem > displaced_problem
virtual bool hasNonlocalCoupling() const override
Whether the simulation has active nonlocal coupling which should be accounted for in the Jacobian...
void setNeedToAddDefaultMultiAppFixedPointConvergence()
Sets _need_to_add_default_multiapp_fixed_point_convergence to true.
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...
virtual void meshDisplaced()
Update data after a mesh displaced.
virtual bool uDotDotOldRequested()
Get boolean flag to check whether old solution second time derivative needs to be stored...
std::optional< ConvergenceName > _multiapp_fixed_point_convergence_name
MultiApp fixed point convergence name.
Keeps track of stuff related to assembling.
Definition: Assembly.h:109
MooseAppCoordTransform & coordTransform()
virtual void setActiveFEVariableCoupleableMatrixTags(std::set< TagID > &mtags, const THREAD_ID tid) override
void setCurrentAlgebraicNodeRange(libMesh::ConstNodeRange *range)
bool _error_on_jacobian_nonzero_reallocation
Whether to error when the Jacobian is re-allocated, usually because the sparsity pattern changed...
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.
unsigned int TagID
Definition: MooseTypes.h:238
virtual void reinitNode(const Node *node, const THREAD_ID tid) override
virtual std::size_t numNonlinearSystems() const override
virtual void predictorCleanup(NumericVector< libMesh::Number > &ghosted_solution)
Perform cleanup tasks after application of predictor to solution vector.
virtual void prepare(const Elem *elem, const THREAD_ID tid) override
MPI_Datatype data_type
bool verboseMultiApps() const
Whether or not to use verbose printing for MultiApps.
const MooseObjectWarehouse< Function > & getFunctionWarehouse()
bool _has_jacobian
Indicates if the Jacobian was computed.
virtual bool haveFV() const override
returns true if this problem includes/needs finite volume functionality.
char ** blocks
Interface for objects acting when the mesh has been displaced.
virtual void addKokkosMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
const Moose::Kokkos::Assembly & kokkosAssembly() const
MooseObjectWarehouse< InternalSideIndicatorBase > _internal_side_indicators
bool _has_dampers
Whether or not this system has any Dampers associated with it.
std::vector< SubdomainName > _kernel_coverage_blocks
virtual void setUDotDotRequested(const bool u_dotdot_requested)
Set boolean flag to true to store solution second time derivative.
virtual Distribution & getDistribution(const std::string &name)
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...
bool haveDisplaced() const override final
Whether we have a displaced problem in our simulation.
bool _has_nonlocal_coupling
Indicates if nonlocal coupling is required/exists.
bool useHashTableMatrixAssembly() const
std::vector< std::function< void()> > _kokkos_mesh_initialization_hooks
Container holding hooks for functions that need to be called after Kokkos mesh initialization.
void setCurrentAlgebraicBndNodeRange(ConstBndNodeRange *range)
This is the base class for Samplers as used within the Stochastic Tools module.
Definition: Sampler.h:45
bool areCoupled(const unsigned int ivar, const unsigned int jvar, const unsigned int nl_sys_num) const
Registry class for material property IDs and names.
void setPostprocessorValueByName(const PostprocessorName &name, const PostprocessorValue &value, std::size_t t_index=0)
Set the value of a PostprocessorValue.
virtual void addKokkosNodalKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
virtual void clearActiveScalarVariableCoupleableMatrixTags(const THREAD_ID tid) override
virtual void postExecute()
Method called at the end of the simulation.
virtual void addKokkosReporter(const std::string &type, const std::string &name, InputParameters &parameters)
bool isSolverSystemNonlinear(const unsigned int sys_num)
Check if the solver system is nonlinear.
void prepareKokkosMaterials(const std::unordered_set< unsigned int > &consumer_needed_mat_props)
void joinAndFinalize(TheWarehouse::Query query, bool isgen=false)
std::vector< MooseArray< ADRealVectorValue > > _ad_grad_zero
Warehouse for storing initial conditions.
std::vector< SolverParams > _solver_params
virtual void addKokkosBoundaryCondition(const std::string &bc_name, const std::string &name, InputParameters &parameters)
const std::vector< SolverSystemName > & getSolverSystemNames() const
ExecuteMooseObjectWarehouse< Control > _control_warehouse
The control logic warehouse.
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...
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::unique_ptr< libMesh::ConstNodeRange > _current_algebraic_node_range
virtual void setActiveScalarVariableCoupleableMatrixTags(std::set< TagID > &mtags, const THREAD_ID tid) override
void setCoupling(Moose::CouplingType type)
Set the coupling between variables TODO: allow user-defined coupling.
const ExecFlagType & getCurrentExecuteOnFlag() const
Return/set the current execution flag.
unsigned int _cycles_completed
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 bool uDotRequested()
Get boolean flag to check whether solution time derivative needs to be stored.
virtual void init() override
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...
Definition: TheWarehouse.C:116
virtual void needFV() override
marks this problem as including/needing finite volume functionality.
virtual void getDiracElements(std::set< const Elem *> &elems) override
Fills "elems" with the elements that should be looped over for Dirac Kernels.
void parentOutputPositionChanged()
Calls parentOutputPositionChanged() on all sub apps.
virtual void addInterfaceKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
bool _is_petsc_options_inserted
If or not PETSc options have been added to database.
void setCurrentlyComputingResidual(bool currently_computing_residual) final
Set whether or not the problem is in the process of computing the residual.
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
virtual void lineSearch()
execute MOOSE line search
virtual bool checkNonlocalCouplingRequirement() const override
virtual bool uDotDotRequested()
Get boolean flag to check whether solution second time derivative needs to be stored.
bool _has_kokkos_objects
Whether we have any Kokkos objects.
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseBase.h:131
unsigned short _current_ic_state
const MortarInterfaceWarehouse & mortarData() const
Returns the mortar data object.
virtual void reinitNeighborPhys(const Elem *neighbor, unsigned int neighbor_side, const std::vector< Point > &physical_points, const THREAD_ID tid) override
std::vector< MeshDisplacedInterface * > _notify_when_mesh_displaces
Objects to be notified when the mesh displaces.
void trustUserCouplingMatrix()
Whether to trust the user coupling matrix even if we want to do things like be paranoid and create a ...
virtual void newAssemblyArray(std::vector< std::shared_ptr< SolverSystem >> &solver_systems)
const bool _uo_aux_state_check
Whether or not checking the state of uo/aux evaluation.
virtual void addMeshDivision(const std::string &type, const std::string &name, InputParameters &params)
Add a MeshDivision.
bool _computing_scaling_residual
Flag used to indicate whether we are computing the scaling Residual.
A struct for storing the various types of petsc options and values.
Definition: PetscSupport.h:44
virtual void computeMarkers()
void reportMooseObjectDependency(MooseObject *a, MooseObject *b)
Register a MOOSE object dependency so we can either order operations properly or report when we canno...
void residualSetup() override
MaterialDataType
MaterialData types.
Definition: MooseTypes.h:740
virtual bool onlyAllowDefaultNonlinearConvergence() const
Returns true if an error will result if the user supplies &#39;nonlinear_convergence&#39;.
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
Positions objects are under the hood Reporters.
Definition: Positions.h:20
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...
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
virtual void reinitNodes(const std::vector< dof_id_type > &nodes, const THREAD_ID tid) override
virtual void updateActiveObjects()
Update the active objects in the warehouses.
Stores the stateful material properties computed by materials.
const RestartableEquationSystems & getRestartableEquationSystems() const
Get the RestartableEquationSystems object.
virtual void computeIndicatorsAndMarkers()
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
Definition: Marker.h:41
virtual void addJacobianOffDiagScalar(unsigned int ivar, const THREAD_ID tid=0)
void setCheckResidualForNans(bool check_residual_for_nans)
Setter for residual NaN/Inf checking.
virtual void setException(const std::string &message)
Set an exception, which is stored at this point by toggling a member variable in this class...
virtual void addJacobian(const THREAD_ID tid) override
CreateTaggedMatrixKey(const CreateTaggedMatrixKey &)
virtual void addAuxScalarKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
InputParameters getValidParams(const std::string &name) const
Get valid parameters for the object.
Definition: Factory.C:68
Interface for interpolation methods that provide matrix and RHS contributions for advected face value...
void setErrorOnJacobianNonzeroReallocation(bool state)
bool _has_kokkos_residual_objects
Whether we have any Kokkos residual objects.
PetscOptions _petsc_option_data_base
virtual const std::vector< VectorTag > & currentResidualVectorTags() const override
Return the residual vector tags we are currently computing.
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...
Moose::Kokkos::MaterialPropertyStorage & getKokkosNeighborMaterialPropertyStorage()
std::vector< VectorTag > _current_residual_vector_tags
A data member to store the residual vector tag(s) passed into computeResidualTag(s).
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
std::vector< SubdomainName > _material_coverage_blocks
void setSteadyStateConvergenceName(const ConvergenceName &convergence_name)
Sets the steady-state detection convergence object name if there is one.
virtual void addAuxScalarVariable(const std::string &var_name, libMesh::Order order, Real scale_factor=1., const std::set< SubdomainID > *const active_subdomains=NULL)
virtual const SystemBase & systemBaseLinear(unsigned int sys_num) const override
Get a constant base class reference to a linear system.
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 bool hasScalarVariable(const std::string &var_name) const override
Returns a Boolean indicating whether any system contains a variable with the name provided...
MultiApp Implementation for Transient Apps.
Moose::Kokkos::MaterialPropertyStorage & getKokkosBndMaterialPropertyStorage()
void resizeMaterialData(Moose::MaterialDataType data_type, unsigned int nqp, const THREAD_ID tid)
Resize material data.
Warehouse for storing finite volume initial conditions.
void finishMultiAppStep(ExecFlagType type, bool recurse_through_multiapp_levels=false)
Finish the MultiApp time step (endStep, postStep) associated with the ExecFlagType.
virtual void addFunctorMaterial(const std::string &functor_material_name, const std::string &name, InputParameters &parameters)
virtual void addKokkosUserObject(const std::string &user_object_name, const std::string &name, InputParameters &parameters)
virtual bool hasKokkosFunction(const std::string &name) const
Get whether a Kokkos function exists.
Registered base class for linear FV interpolation objects.
std::vector< VariableSecond > _second_zero
std::map< SolverVariableName, unsigned int > _solver_var_to_sys_num
Map connecting variable names with their respective solver systems.
std::vector< MooseArray< ADReal > > _ad_zero
Moose::Kokkos::MaterialPropertyStorage & getKokkosMaterialPropertyStorage()
bool _requires_nonlocal_coupling
nonlocal coupling requirement flag
virtual void onTimestepEnd() override
virtual void computeNearNullSpace(libMesh::NonlinearImplicitSystem &sys, std::vector< NumericVector< libMesh::Number > *> &sp)
virtual void addNodalKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
std::vector< std::shared_ptr< SolverSystem > > _solver_systems
Combined container to base pointer of every solver system.
All Distributions should inherit from this class.
Definition: Distribution.h:18
MaterialWarehouse _kokkos_materials
bool hasKokkosUserObject(const std::string &name) const
Check if there if a Kokkos user object of given name.
std::vector< VectorVariableCurl > _vector_curl_zero
virtual bool hasMortarCoupling() const
Whether the simulation has mortar coupling.
Base class for user objects executed one or more sidesets, which may be on the outer boundary of the ...
bool _has_exception
Whether or not an exception has occurred.
unsigned int _num_grid_steps
Number of steps in a grid sequence.
bool _needs_old_newton_iter
Indicates that we need to compute variable values for previous Newton iteration.
bool haveXFEM()
Find out whether the current analysis is using XFEM.
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)
void registerRandomInterface(RandomInterface &random_interface, const std::string &name)
bool _has_time_integrator
Indicates whether or not this executioner has a time integrator (during setup)
void computeUserObjectsInternal(const ExecFlagType &type, TheWarehouse::Query &query)
This class provides an interface for common operations on field variables of both FE and FV types wit...
ExecuteMooseObjectWarehouse< MultiApp > & getMultiAppWarehouse()
virtual void addAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
MaterialPropertyRegistry _material_prop_registry
Moose::Kokkos::Assembly & kokkosAssembly()
void clearActiveMaterialProperties(const THREAD_ID tid)
Clear the active material properties.
virtual unsigned int nLinearIterations(const unsigned int nl_sys_num) const override
MaterialBase objects are special in that they have additional objects created automatically (see FEPr...
ExecuteMooseObjectWarehouse< TransientMultiApp > _transient_multi_apps
Storage for TransientMultiApps (only needed for calling &#39;computeDT&#39;)
Moose::Kokkos::Assembly _kokkos_assembly
MaterialWarehouse _interface_materials
bool hasUserObject(const std::string &name) const
Check if there if a user object of given name.
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
bool _ignore_zeros_in_jacobian
Whether to ignore zeros in the Jacobian, thereby leading to a reduced sparsity pattern.
void kokkosJoinAndFinalize(const std::vector< Moose::Kokkos::UserObject *> &userobjs)
const libMesh::ConstElemRange & getCurrentAlgebraicElementRange()
These are the element and nodes that contribute to the jacobian and residual for this local processor...
void setCurrentExecuteOnFlag(const ExecFlagType &)
const MaterialWarehouse & getMaterialWarehouse() const
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.
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...
const libMesh::ConstNodeRange & getCurrentAlgebraicNodeRange()
void computingScalingJacobian(bool computing_scaling_jacobian)
Setter for whether we&#39;re computing the scaling jacobian.
ExecuteMooseObjectWarehouse< Transfer > _from_multi_app_transfers
Transfers executed just after MultiApps to transfer data from them.
virtual bool checkResidualForNans() const override
Whether to check residual for NaN/Inf values.
virtual void addKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
Base class for a system (of equations)
Definition: SystemBase.h:85
const InitialConditionWarehouse & getInitialConditionWarehouse() const
Return InitialCondition storage.
const std::set< const MooseObject * > & getKokkosMaterialPropertyStorageConsumers(Moose::MaterialDataType type) const
virtual void addAuxVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
Canonical method for adding an auxiliary variable.
The Kokkos system class.
Definition: KokkosSystem.h:34
std::optional< ConvergenceName > _steady_state_convergence_name
Steady-state detection convergence name.
Base class for MeshDivision objects.
Definition: MeshDivision.h:35
const MaterialPropertyStorage & getBndMaterialPropertyStorage()
std::vector< bool > _previous_multiapp_fp_nl_solution_required
Indicates we need to save the previous multiapp fixed-point iteration solver variable values...
MooseObjectWarehouse< Moose::FunctionBase > _kokkos_functions
bool computingNonlinearResid() const
Returns true if the problem is in the process of computing the nonlinear residual.
Definition: SubProblem.h:707
virtual void addFVInterfaceKernel(const std::string &fv_ik_name, const std::string &name, InputParameters &parameters)
MeshDivision & getMeshDivision(const std::string &name, const THREAD_ID tid=0) const
Get a MeshDivision.
unsigned int getNumCyclesCompleted()
Base class for creating new nodally-based mortar user objects.
bool hasDampers()
Whether or not this system has dampers.
const Positions & getPositionsObject(const std::string &name) const
Get the Positions object by its name.
std::map< SolverSystemName, unsigned int > _solver_sys_name_to_num
Map connecting solver system names with their respective systems.
FEProblemBase(const InputParameters &parameters)
void setFailNextNonlinearConvergenceCheck()
Skip further residual evaluations and fail the next nonlinear convergence check(s) ...
virtual Executor & getExecutor(const std::string &name)
virtual void cacheJacobianNeighbor(const THREAD_ID tid) override
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
bool needToAddDefaultSteadyStateConvergence() const
Returns true if the problem needs to add the default steady-state detection convergence.
std::vector< std::unordered_map< BoundaryID, bool > > _bnd_mat_side_cache
Cache for calculating materials on side.
bool _have_fv
Whether we are performing some calculations with finite volume discretizations.
bool hasLinearConvergenceObjects() const
Whether we have linear convergence objects.
ExecFlagEnum _print_execution_on
When to print the execution of loops.
bool needsPreviousMultiAppFixedPointIterationAuxiliary() const
Check to see whether we need to compute the variable values of the previous multiapp fixed point iter...
virtual void setResidual(NumericVector< libMesh::Number > &residual, const THREAD_ID tid) override
bool & petscOptionsInserted()
If PETSc options are already inserted.
virtual void solve(const unsigned int nl_sys_num)
virtual void setCurrentLowerDElem(const Elem *const lower_d_elem, const THREAD_ID tid) override
Set the current lower dimensional element.
std::set< TagID > _linear_matrix_tags
Temporary storage for filtered matrix tags for linear systems.
void bumpAllQRuleOrder(libMesh::Order order, SubdomainID block)
Real computeMultiAppsDT(ExecFlagType type)
Find the smallest timestep over all MultiApps.
void setParallelBarrierMessaging(bool flag)
Toggle parallel barrier messaging (defaults to on).
void projectSolution()
const MaterialWarehouse & getRegularMaterialsWarehouse() const
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...
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
std::unique_ptr< libMesh::ConstElemRange > _nl_evaluable_local_elem_range
virtual void computeResidualTags(const std::set< TagID > &tags)
Form multiple residual vectors and each is associated with one tag.
const bool & currentlyComputingResidual() const
Returns true if the problem is in the process of computing the residual.
Definition: SubProblem.h:720
void setMaterialCoverageCheck(CoverageCheckMode mode)
Set flag to indicate whether material coverage checks should be performed.
virtual void computeJacobianSys(libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian)
Form a Jacobian matrix.
void skipNextForwardSolutionCopyToOld()
Prevents the copy of the solution vector to the old solution vector in each system.
std::shared_ptr< MultiApp > getMultiApp(const std::string &multi_app_name) const
Get a MultiApp object by name.
virtual void reinitElemNeighborAndLowerD(const Elem *elem, unsigned int side, const THREAD_ID tid) override
bool hasSolverVariable(const std::string &var_name) const
AuxGroup
Flag for AuxKernel related execution type.
Definition: MooseTypes.h:752
virtual void addMarker(const std::string &marker_name, const std::string &name, InputParameters &parameters)
unsigned int subspaceDim(const std::string &prefix) const
Dimension of the subspace spanned by vectors with a given prefix.
virtual GeometricSearchData & geomSearchData() override
virtual void setUDotOldRequested(const bool u_dot_old_requested)
Set boolean flag to true to store old solution time derivative.
bool needsPreviousNewtonIteration() const
Check to see whether we need to compute the variable values of the previous Newton iterate...
virtual void addBoundaryCondition(const std::string &bc_name, const std::string &name, InputParameters &parameters)
const libMesh::CouplingMatrix * couplingMatrix(const unsigned int nl_sys_num) const override
The coupling matrix defining what blocks exist in the preconditioning matrix.
virtual bool computingPreSMOResidual(const unsigned int nl_sys_num) const override
Returns true if the problem is in the process of computing it&#39;s initial residual. ...
This class is a container/interface for the objects involved in automatic generation of mortar spaces...
virtual Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) override
The abstract class that provides polymorphic interfaces for a function.
void createTagMatrices(CreateTaggedMatrixKey)
const bool _skip_nl_system_check
virtual void resetState()
Reset state of this object in preparation for the next evaluation.
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 vec...
virtual void addInitialCondition(const std::string &ic_name, const std::string &name, InputParameters &parameters)
virtual void addKokkosPostprocessor(const std::string &pp_name, const std::string &name, InputParameters &parameters)
ScalarInitialConditionWarehouse _scalar_ics
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. ...
Nonlinear system to be solved.
void skipExceptionCheck(bool skip_exception_check)
Set a flag that indicates if we want to skip exception and stop solve.
Moose::Kokkos::System & getKokkosSystem(const unsigned int sys_num)
Get the Kokkos system of a specified number that is associated with MOOSE nonlinear and auxiliary sys...
virtual void swapBackMaterialsFace(const THREAD_ID tid)
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 void advanceState()
Advance all of the state holding vectors / datastructures so that we can move to the next timestep...
A user object that runs over all the nodes and does an aggregation step to compute a single value...
ExecuteMooseObjectWarehouse< Transfer > _transfers
Normal Transfers.
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.
void checkUserObjectNameCollision(const std::string &name, const std::string &type) const
Check for name collision between different user objects.
const VectorPostprocessorValue & 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.
MooseLinearConvergenceReason
virtual Function & getFunction(const std::string &name, const THREAD_ID tid=0)
virtual void addPredictor(const std::string &type, const std::string &name, InputParameters &parameters)
virtual void computeJacobianBlocks(std::vector< JacobianBlock *> &blocks, const unsigned int nl_sys_num)
Computes several Jacobian blocks simultaneously, summing their contributions into smaller preconditio...
virtual void addLineSearch(const InputParameters &)
add a MOOSE line search
virtual void copySolutionsBackwards()
const ConstBndNodeRange & getCurrentAlgebraicBndNodeRange()
bool _calculate_jacobian_in_uo
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 the...
virtual void prepareFaceShapes(unsigned int var, const THREAD_ID tid) override
virtual void addPostprocessor(const std::string &pp_name, const std::string &name, InputParameters &parameters)
virtual Real finalNonlinearResidual(const unsigned int nl_sys_num) const override
std::vector< std::shared_ptr< NonlinearSystemBase > > _nl
The nonlinear systems.
bool automaticScaling() const
Automatic scaling getter.
Definition: SubProblem.C:1163
virtual void computeUserObjects(const ExecFlagType &type, const Moose::AuxGroup &group)
Call compute methods on UserObjects.
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 MaterialWarehouse & getInterfaceMaterialsWarehouse() const
std::vector< VariablePhiGradient > _grad_phi_zero
const std::vector< const MooseVariableFEBase * > & getUserObjectJacobianVariables(const THREAD_ID tid) const
const MaterialWarehouse & getDiscreteMaterialWarehouse() const
bool hasJacobian() const
Returns _has_jacobian.
void notifyWhenMeshDisplaces(MeshDisplacedInterface *mdi)
Register an object that derives from MeshDisplacedInterface to be notified when the displaced mesh ge...
void createTagSolutions()
Create extra tagged solution vectors.
std::vector< SolverSystemName > _solver_sys_names
The union of nonlinear and linear system names.
virtual void execute(const ExecFlagType &exec_type)
Convenience function for performing execution of MOOSE systems.
bool _verbose_restore
Whether or not to be verbose on solution restoration post a failed time step.
bool _previous_nl_solution_required
Indicates we need to save the previous NL iteration variable values.
bool _trust_user_coupling_matrix
Whether to trust the user coupling matrix no matter what.
const ConvergenceName & getSteadyStateConvergenceName() const
Gets the steady-state detection convergence object name.
void handleException(const std::string &calling_method)
Handle exceptions.
virtual std::vector< VariableName > getVariableNames()
Returns a list of all the variables in the problem (both from the NL and Aux systems.
ReporterData _reporter_data
const std::string & name() const
Get the name of the class.
Definition: MooseBase.h:103
void uniformRefine()
uniformly refine the problem mesh(es).
bool hasSetMultiAppFixedPointConvergenceName() const
Returns true if the problem has set the fixed point convergence name.
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.
const ReporterData & getReporterData() const
Provides const access the ReporterData object.
virtual const libMesh::CouplingMatrix & nonlocalCouplingMatrix(const unsigned i) const override
std::unique_ptr< libMesh::ConstElemRange > _current_algebraic_elem_range
const bool & _immediately_print_invalid_solution
std::vector< std::shared_ptr< Transfer > > getTransfers(ExecFlagType type, Transfer::DIRECTION direction) const
Get Transfers by ExecFlagType and direction.
bool hasSetSteadyStateConvergenceName() const
Returns true if the problem has set the steady-state detection convergence name.
virtual void addConvergence(const std::string &type, const std::string &name, InputParameters &parameters)
Adds a Convergence object.
bool shouldPrintExecution(const THREAD_ID tid) const
Check whether the problem should output execution orders at this time.
const bool & _solve
Whether or not to actually solve the nonlinear system.
virtual const SystemBase & systemBaseSolver(const unsigned int sys_num) const override
Return the solver system object as a base class reference given the system number.
ExecuteMooseObjectWarehouse< Transfer > _to_multi_app_transfers
Transfers executed just before MultiApps to transfer data to them.
NonlinearSystemBase * _current_nl_sys
The current nonlinear system that we are solving.
bool _check_residual_for_nans
Whether to check the residual for NaN or Inf values.
MooseObjectWarehouse< Convergence > _convergences
convergence warehouse
Interface for notifications that the mesh has changed.
void setCurrentNonlinearSystem(const unsigned int nl_sys_num)
virtual std::shared_ptr< DisplacedProblem > getDisplacedProblem()
std::shared_ptr< T > getActiveObject(const std::string &name, THREAD_ID tid=0) const
This is the common base class for the three main kernel types implemented in MOOSE, Kernel, VectorKernel and ArrayKernel.
Definition: KernelBase.h:23
void numGridSteps(unsigned int num_grid_steps)
Set the number of steps in a grid sequences.
Base class for convergence criteria.
Definition: Convergence.h:21
bool hasFVInterpolationMethod(const InterpolationMethodName &name) const
Check if an FV interpolation method with a given name exists.
bool _input_file_saved
whether input file has been written
virtual void reinitElem(const Elem *elem, const THREAD_ID tid) override
virtual Convergence & getConvergence(const std::string &name, const THREAD_ID tid=0) const
Gets a Convergence object.
TheWarehouse & theWarehouse() const
void createTagVectors()
Create extra tagged vectors and matrices.
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 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 setMultiAppFixedPointConvergenceName(const ConvergenceName &convergence_name)
Sets the MultiApp fixed point convergence object name if there is one.
void addKokkosMeshInitializationHook(std::function< void()> function)
Add a function hook that needs to be called after Kokkos mesh initialization.
void computeKokkosUserObjectsInternal(const ExecFlagType &type, TheWarehouse::Query &query)
void checkUserObjects()
Moose::CouplingType _coupling
Type of variable coupling.
Every object that can be built by the factory should be derived from this class.
Definition: MooseObject.h:28
const T & getKokkosUserObject(const std::string &name) const
Get the Kokkos user object by its name.
virtual bool shouldUpdateSolution()
Check to see whether the problem should update the solution.
const FVInterpolationMethod & getFVInterpolationMethod(const InterpolationMethodName &name, const THREAD_ID tid=0) const
Retrieve an FV interpolation method.
const ConvergenceName & getMultiAppFixedPointConvergenceName() const
Gets the MultiApp fixed point convergence object name.
Real getTimeFromStateArg(const Moose::StateArg &state) const
Returns the time associated with the requested state.
virtual std::string solverTypeString(unsigned int solver_sys_num=0)
Return solver type as a human readable string.
const ExecFlagType EXEC_TIMESTEP_BEGIN
Definition: Moose.C:37
void executeSamplers(const ExecFlagType &exec_type)
Performs setup and execute calls for Sampler objects.
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 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).
const std::unordered_map< std::pair< BoundaryID, BoundaryID >, std::unique_ptr< AutomaticMortarGeneration > > & getMortarInterfaces(bool on_displaced) const
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 specif...
void getUOExecutionGroups(TheWarehouse::Query &query, std::set< int > &execution_groups) const
void addOutput(const std::string &, const std::string &, InputParameters &)
Adds an Output object.
boundary_id_type BoundaryID
const MooseObjectWarehouse< InternalSideIndicatorBase > & getInternalSideIndicatorWarehouse()
virtual void setUDotRequested(const bool u_dot_requested)
Set boolean flag to true to store solution time derivative.
const bool _allow_ics_during_restart
bool constJacobian() const
Returns _const_jacobian (whether a MOOSE object has specified that the Jacobian is the same as the pr...
virtual void clearActiveFEVariableCoupleableMatrixTags(const THREAD_ID tid) override
std::vector< MeshChangedInterface * > _notify_when_mesh_changes
Objects to be notified when the mesh changes.
void checkNonlocalCoupling()
void addDefaultSteadyStateConvergence(const InputParameters &params)
Adds the default steady-state detection Convergence.
VarKindType
Framework-wide stuff.
Definition: MooseTypes.h:763
NonlinearSystemBase & currentNonlinearSystem()
void computingScalingResidual(bool computing_scaling_residual)
Setter for whether we&#39;re computing the scaling residual.
void checkDisplacementOrders()
Verify that SECOND order mesh uses SECOND order displacements.
virtual void addFunction(const std::string &type, const std::string &name, InputParameters &parameters)
Real PostprocessorValue
various MOOSE typedefs
Definition: MooseTypes.h:230
virtual void addJacobianNeighbor(const THREAD_ID tid) override
virtual libMesh::EquationSystems & es() override
std::vector< std::unordered_map< SubdomainID, bool > > _block_mat_side_cache
Cache for calculating materials on side.
bool hasTimeIntegrator() const
Returns whether or not this Problem has a TimeIntegrator.
std::shared_ptr< AuxiliarySystem > _aux
The auxiliary system.
NumberVectorValue Gradient
TheWarehouse is a container for MooseObjects that allows querying/filtering over various customizeabl...
Definition: TheWarehouse.h:186
virtual void addVectorPostprocessor(const std::string &pp_name, const std::string &name, InputParameters &parameters)
const bool _allow_invalid_solution
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
Definition: MooseMesh.h:93
virtual unsigned int currentNlSysNum() const override
const MaterialPropertyStorage & getMaterialPropertyStorage()
Return a reference to the material property storage.
virtual void computeIndicators()
bool hasInitialAdaptivity() const
Return a Boolean indicating whether initial AMR is turned on.
virtual MooseVariableScalar & getScalarVariable(const THREAD_ID tid, const std::string &var_name) override
Returns the scalar variable reference from whichever system contains it.
static void objectSetupHelper(const std::vector< T *> &objects, const ExecFlagType &exec_flag)
Helpers for calling the necessary setup/execute functions for the supplied objects.
const bool _boundary_restricted_node_integrity_check
whether to perform checking of boundary restricted nodal object variable dependencies, e.g.
virtual void setActiveScalarVariableCoupleableVectorTags(std::set< TagID > &vtags, const THREAD_ID tid) override
MooseMesh & _mesh
virtual bool uDotOldRequested()
Get boolean flag to check whether old solution time derivative needs to be stored.
virtual bool updateMeshXFEM()
Update the mesh due to changing XFEM cuts.
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.
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...
virtual void restoreSolutions()
bool fvBCsIntegrityCheck() const
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 _u_dotdot_old_requested
Whether old solution second time derivative needs to be stored.
void setFailNextSystemConvergenceCheck()
Tell the problem that the system(s) cannot be considered converged next time convergence is checked...
void addAnyRedistributers()
void mooseDeprecated(Args &&... args) const
const std::string & type() const
Get the type of this class.
Definition: MooseBase.h:93
bool hasPostprocessorValueByName(const PostprocessorName &name) const
Whether or not a Postprocessor value exists by a given name.
void setAxisymmetricCoordAxis(const MooseEnum &rz_coord_axis)
void initialSetup() override
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
Definition: MooseEnum.h:54
Adaptivity _adaptivity
std::vector< VectorTag > getVectorTags(const std::set< TagID > &tag_ids) const
Definition: SubProblem.C:173
bool allowInvalidSolution() const
Whether to accept / allow an invalid solution.
bool needInternalNeighborSideMaterial(SubdomainID subdomain_id, const THREAD_ID tid)
virtual const SystemBase & systemBaseAuxiliary() const override
Return the auxiliary system object as a base class reference.
void setLinearConvergenceNames(const std::vector< ConvergenceName > &convergence_names)
Sets the linear convergence object name(s) if there is one.
void checkUserObjectJacobianRequirement(THREAD_ID tid)
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...
LineSearch * getLineSearch() override
getter for the MOOSE line search
virtual bool hasDistribution(const std::string &name) const
void reinitKokkosMaterials()
virtual void computeNullSpace(libMesh::NonlinearImplicitSystem &sys, std::vector< NumericVector< libMesh::Number > *> &sp)
virtual void addTimeIntegrator(const std::string &type, const std::string &name, InputParameters &parameters)
LinearSystem * _current_linear_sys
The current linear system that we are solving.
virtual void cacheResidual(const THREAD_ID tid) override
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.
const bool _force_restart
void forceOutput()
Indicates that the next call to outputStep should be forced.
const VectorPostprocessor & getVectorPostprocessorObjectByName(const std::string &object_name, const THREAD_ID tid=0) const
Return the VPP object given the name.
std::vector< VariablePhiSecond > _second_phi_zero
bool _started_initial_setup
At or beyond initialSteup stage.
std::map< std::string, std::unique_ptr< RandomData > > _random_data_objects
A map of objects that consume random numbers.
bool errorOnJacobianNonzeroReallocation() const
Will return True if the user wants to get an error when a nonzero is reallocated in the Jacobian by P...
std::unique_ptr< ConstBndNodeRange > _current_algebraic_bnd_node_range
virtual void addResidual(const THREAD_ID tid) override
NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num)
virtual void addResidualNeighbor(const THREAD_ID tid) override
virtual void addKokkosAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
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 point...
Base class for all Postprocessors.
Definition: Postprocessor.h:23
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...
MooseApp & _app
The MOOSE application this is associated with.
Definition: MooseBase.h:385
Moose::CouplingType coupling() const
virtual void clearActiveFEVariableCoupleableVectorTags(const THREAD_ID tid) override
void setCouplingMatrix(std::unique_ptr< libMesh::CouplingMatrix > cm, const unsigned int nl_sys_num)
Set custom coupling matrix.
virtual void addDefaultNonlinearConvergence(const InputParameters &params)
Adds the default nonlinear Convergence associated with the problem.
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 =0
Returns the variable reference for requested variable which must be of the expected_var_type (Nonline...
void setNonlinearConvergenceNames(const std::vector< ConvergenceName > &convergence_names)
Sets the nonlinear convergence object name(s) if there is one.
const ExecFlagType EXEC_LINEAR
Definition: Moose.C:31
virtual bool solverSystemConverged(const unsigned int solver_sys_num) override
std::string _exception_message
The error message to go with an exception.
void setNeedToAddDefaultNonlinearConvergence()
Sets _need_to_add_default_nonlinear_convergence to true.
virtual void checkProblemIntegrity()
Method called to perform a series of sanity checks before a simulation is run.
AuxiliarySystem & getAuxiliarySystem()
virtual void updateGeomSearch(GeometricSearchData::GeometricSearchType type=GeometricSearchData::ALL) override
MooseObjectWarehouse< MeshDivision > _mesh_divisions
Warehouse to store mesh divisions NOTE: this could probably be moved to the MooseMesh instead of the ...
virtual void addConstraint(const std::string &c_name, const std::string &name, InputParameters &parameters)
MooseObjectWarehouse< Indicator > _indicators
virtual void addMultiApp(const std::string &multi_app_name, const std::string &name, InputParameters &parameters)
Add a MultiApp to the problem.
The Kokkos class responsible for allocating and storing Kokkos material properties.
virtual void prepareAssembly(const THREAD_ID tid) override
bool haveADObjects() const
Method for reading wehther we have any ad objects.
Definition: SubProblem.h:771
unsigned int systemNumForVariable(const VariableName &variable_name) const
bool _checking_uo_aux_state
Flag used to indicate whether we are doing the uo/aux state check in execute.
const PostprocessorValue & 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.
bool _fv_bcs_integrity_check
Whether to check overlapping Dirichlet and Flux BCs and/or multiple DirichletBCs per sideset...
const MooseObjectWarehouse< Indicator > & getIndicatorWarehouse()
Return indicator/marker storage.
InitialConditions are objects that set the initial value of variables.
bool showInvalidSolutionConsole() const
Whether or not to print out the invalid solutions summary table in console.
Base class for user objects executed on all element sides internal to one or more blocks...
virtual void initNullSpaceVectors(const InputParameters &parameters, std::vector< std::shared_ptr< NonlinearSystemBase >> &nl)
virtual void setCurrentSubdomainID(const Elem *elem, const THREAD_ID tid) override
MaterialData & getMaterialData(Moose::MaterialDataType type, const THREAD_ID tid=0, const MooseObject *object=nullptr) const
bool getFailNextSystemConvergenceCheck() const
Whether it will fail the next system convergence check(s), triggering failed step behavior...
virtual void clearDiracInfo() override
Gets called before Dirac Kernels are asked to add the points they are supposed to be evaluated in...
virtual void addIndicator(const std::string &indicator_name, const std::string &name, InputParameters &parameters)
virtual void reinitNodesNeighbor(const std::vector< dof_id_type > &nodes, const THREAD_ID tid) override
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.
GeometricSearchType
Used to select groups of geometric search objects to update.
void backupMultiApps(ExecFlagType type)
Backup the MultiApps associated with the ExecFlagType.
virtual ~FEProblemBase()
The SolutionInvalidity will contain all the information about the occurrence(s) of solution invalidit...
MaterialData & getKokkosMaterialData(Moose::MaterialDataType type, const MooseObject *object=nullptr) const
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
Canonical method for adding a non-linear variable.
const std::vector< LinearSystemName > & getLinearSystemNames() const
ExecuteMooseObjectWarehouse< MultiApp > _multi_apps
MultiApp Warehouse.
virtual int & timeStep() const
virtual Moose::FEBackend feBackend() const
LinearSystem & getLinearSystem(unsigned int sys_num)
Get non-constant reference to a linear system.
std::vector< std::vector< std::unique_ptr< Assembly > > > _assembly
The Assembly objects.
virtual void addDisplacedProblem(std::shared_ptr< DisplacedProblem > displaced_problem)
void computeResidual(libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual)
This function is called by Libmesh to form a residual.
static void objectExecuteHelper(const std::vector< T *> &objects)
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 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.
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.
void setCoordSystem(const std::vector< SubdomainName > &blocks, const MultiMooseEnum &coord_sys)
Materials compute MaterialProperties.
Definition: Material.h:35
virtual void swapBackMaterialsNeighbor(const THREAD_ID tid)
const bool _show_invalid_solution_console
virtual void addLinearFVKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
std::unique_ptr< libMesh::ConstElemRange > _aux_evaluable_local_elem_range
virtual NonlinearSystem & getNonlinearSystem(const unsigned int sys_num)
bool _snesmf_reuse_base
If or not to resuse the base vector for matrix-free calculation.
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.
void setKernelCoverageCheck(bool flag)
Set flag to indicate whether kernel coverage checks should be performed.
This is the XFEMInterface class.
Definition: XFEMInterface.h:37
bool _need_to_add_default_multiapp_fixed_point_convergence
Flag that the problem needs to add the default fixed point convergence.
const std::vector< NonlinearSystemName > _nl_sys_names
The nonlinear system names.
const ExecFlagType EXEC_NONLINEAR
Definition: Moose.C:33
const FVAdvectedInterpolationMethod & getFVAdvectedInterpolationMethod(const InterpolationMethodName &name, const THREAD_ID tid=0) const
Retrieve an advected interpolation method.
std::vector< Real > VectorPostprocessorValue
Definition: MooseTypes.h:231
const FVInitialConditionWarehouse & getFVInitialConditionWarehouse() const
Return FVInitialCondition storage.
virtual void updateMortarMesh()
Adds tagged matrices.
virtual void addKokkosVectorPostprocessor(const std::string &pp_name, const std::string &name, InputParameters &parameters)
TheWarehouse::Query getUOQuery(const std::string &system, const ExecFlagType &type, const Moose::AuxGroup &group) const
void addDefaultMultiAppFixedPointConvergence(const InputParameters &params)
Adds the default fixed point Convergence associated with the problem.
std::set< TagID > _fe_matrix_tags
Moose::Kokkos::MaterialPropertyStorage & _kokkos_material_props
virtual void addAuxArrayVariable(const std::string &var_name, const libMesh::FEType &type, unsigned int components, const std::set< SubdomainID > *const active_subdomains=NULL)
const ExecuteMooseObjectWarehouse< Transfer > & getMultiAppTransferWarehouse(Transfer::DIRECTION direction) const
Return the complete warehouse for MultiAppTransfer object for the given direction.
virtual const SystemBase & getSystemBase(const unsigned int sys_num) const
Get constant reference to a system in this problem.
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
bool isSNESMFReuseBaseSetbyUser()
Return a flag to indicate if _snesmf_reuse_base is set by users.
virtual void addReporter(const std::string &type, const std::string &name, InputParameters &parameters)
Add a Reporter object to the simulation.
virtual void swapBackMaterials(const THREAD_ID tid)
std::vector< VariablePhiValue > _phi_zero
InitialConditionWarehouse _ics
std::vector< unsigned char > _has_active_material_properties
Whether there are active material properties on each thread.
const SubdomainID ANY_BLOCK_ID
Definition: MooseTypes.C:19
MaterialWarehouse _discrete_materials
bool _reinit_displaced_face
Whether to call DisplacedProblem::reinitElemFace when this->reinitElemFace is called.
void setSinglePetscOption(const std::string &name, const std::string &value="", FEProblemBase *const problem=nullptr)
A wrapper function for dealing with different versions of PetscOptionsSetValue.
std::unique_ptr< MortarInterfaceWarehouse > _mortar_data
virtual void addDGKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
virtual void setCurrentBoundaryID(BoundaryID bid, const THREAD_ID tid) override
sets the current boundary ID in assembly
SolverSystem * _current_solver_sys
The current solver system.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual std::shared_ptr< const DisplacedProblem > getDisplacedProblem() const
Takes care of everything related to mesh adaptivity.
Definition: Adaptivity.h:61
std::optional< std::vector< ConvergenceName > > _nonlinear_convergence_names
Nonlinear system(s) convergence name(s)
Generic class for solving transient nonlinear problems.
Definition: SubProblem.h:78
void setConstJacobian(bool state)
Set flag that Jacobian is constant (for optimization purposes)
const Postprocessor & getPostprocessorObjectByName(const PostprocessorName &object_name, const THREAD_ID tid=0) const
Return the Postprocessor object registered under the supplied object name.
Class for containing MooseEnum item information.
Definition: MooseEnumItem.h:18
unsigned int solverSysNum(const SolverSystemName &solver_sys_name) const override
Class that is used as a parameter to set/clearCurrentResidualVectorTags that allows only blessed clas...
Base class for Control objects.
Definition: Control.h:34
std::shared_ptr< MaterialBase > getMaterial(std::string name, Moose::MaterialDataType type, const THREAD_ID tid=0, bool no_warn=false)
Return a pointer to a MaterialBase object.
std::vector< VariableGradient > _grad_zero
bool hasActiveObjects(THREAD_ID tid=0) const
void clearCurrentJacobianMatrixTags()
Clear the current Jacobian matrix tag data structure ...
virtual void subdomainSetup(SubdomainID subdomain, const THREAD_ID tid)
virtual void restoreOldSolutions()
Restore old solutions from the backup vectors and deallocate them.
unsigned int getInitialSteps() const
Pull out the number of initial steps previously set by calling init()
Definition: Adaptivity.h:112
void reinitMaterials(SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful=true)
const bool _identify_variable_groups_in_nl
Whether to identify variable groups in nonlinear systems. This affects dof ordering.
PetscOptions & petscOptionsDatabase()
bool acceptInvalidSolution() const
Whether or not to accept the solution based on its invalidity.
const AutomaticMortarGeneration & 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 ...
const bool _restore_original_nonzero_pattern
Whether we should restore the original nonzero pattern for every Jacobian evaluation.
void execMultiAppTransfers(ExecFlagType type, Transfer::DIRECTION direction)
Execute MultiAppTransfers associated with execution flag and direction.
bool hasKokkosResidualObjects() const
Wrapper class that owns a libMesh EquationSystem and adds advanced restart capability to it...
void restoreMultiApps(ExecFlagType type, bool force=false)
Restore the MultiApps associated with the ExecFlagType.
virtual void addLinearFVBC(const std::string &fv_bc_name, const std::string &name, InputParameters &parameters)
void customSetup(const ExecFlagType &exec_type) override
void setRestartFile(const std::string &file_name)
Communicate to the Resurector the name of the restart filer.
void setCurrentLinearSystem(unsigned int sys_num)
Set the current linear system pointer.
void executeControls(const ExecFlagType &exec_type)
Performs setup and execute calls for Control objects.
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters &parameters)
Query query()
query creates and returns an initialized a query object for querying objects from the warehouse...
Definition: TheWarehouse.h:467
void allowOutput(bool state)
Ability to enable/disable output calls This is private, users should utilize FEProblemBase::allowOutp...
virtual void onTimestepBegin() override
virtual void computeBounds(libMesh::NonlinearImplicitSystem &sys, NumericVector< libMesh::Number > &lower, NumericVector< libMesh::Number > &upper)
Nonlinear system to be solved.
virtual void addKokkosFunction(const std::string &type, const std::string &name, InputParameters &parameters)
Add a Kokkos function to the problem.
void initKokkos()
Construct Kokkos assembly and systems and allocate Kokkos material property storages.
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)
void checkDuplicatePostprocessorVariableNames()
void computeResidualAndJacobian(const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, libMesh::SparseMatrix< libMesh::Number > &jacobian)
Form a residual and Jacobian with default tags.
std::vector< std::pair< MooseVariableFEBase *, MooseVariableFEBase * > > & nonlocalCouplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num)
bool _using_ad_mat_props
Automatic differentiaion (AD) flag which indicates whether any consumer has requested an AD material ...
std::vector< VariableValue > _scalar_zero
virtual Real computeResidualL2Norm()
Computes the residual using whatever is sitting in the current solution vector then returns the L2 no...
const std::vector< LinearSystemName > _linear_sys_names
The linear system names.
Moose::Kokkos::Array< Moose::Kokkos::System > & getKokkosSystems()
Get all Kokkos systems that are associated with MOOSE nonlinear and auxiliary systems.
std::shared_ptr< XFEMInterface > getXFEM()
Get a pointer to the XFEM controller object.
bool getFailNextNonlinearConvergenceCheck() const
Whether it will skip further residual evaluations and fail the next nonlinear convergence check(s) ...
void incrementMultiAppTStep(ExecFlagType type)
Advance the MultiApps t_step (incrementStepOrReject) associated with the ExecFlagType.
Class for scalar variables (they are different).
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.
void bumpVolumeQRuleOrder(libMesh::Order order, SubdomainID block)
Increases the element/volume quadrature order for the specified mesh block if and only if the current...
const bool _material_dependency_check
Determines whether a check to verify material dependencies on every subdomain.
std::vector< std::vector< const MooseVariableFEBase * > > _uo_jacobian_moose_vars
virtual MooseMesh & mesh() override
std::vector< VariableValue > _zero
CouplingType
Definition: MooseTypes.h:779
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:281
unsigned int linearSysNum(const LinearSystemName &linear_sys_name) const override
LinearSystem & currentLinearSystem()
Get a non-constant reference to the current linear system.
void resetFailNextSystemConvergenceCheck()
Tell the problem that the system convergence check(s) may proceed as normal.
libMesh::EquationSystems & es()
std::set< TagID > _fe_vector_tags
const std::set< const MooseObject * > & getMaterialPropertyStorageConsumers(Moose::MaterialDataType type) const
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().
Base class for deriving any boundary condition of a integrated type.
SolverParams & solverParams(unsigned int solver_sys_num=0)
Get the solver parameters.
SolverSystem & getSolverSystem(unsigned int sys_num)
Get non-constant reference to a solver system.
virtual void saveOldSolutions()
Allocate vectors and save old solutions into them.
virtual void computeTransposeNullSpace(libMesh::NonlinearImplicitSystem &sys, std::vector< NumericVector< libMesh::Number > *> &sp)
bool hasPostprocessor(const std::string &name) const
Deprecated.
virtual bool updateSolution(NumericVector< libMesh::Number > &vec_solution, NumericVector< libMesh::Number > &ghosted_solution)
Update the solution.
bool _previous_multiapp_fp_aux_solution_required
Indicates we need to save the previous multiapp fixed-point iteration auxiliary variable values...
std::shared_ptr< DisplacedProblem > _displaced_problem
GeometricSearchData _geometric_search_data
State argument for evaluating functors.
void setCurrentResidualVectorTags(const std::set< TagID > &vector_tags)
Set the current residual vector tag data structure based on the passed in tag IDs.
MooseObjectWarehouse< Function > _functions
functions
virtual Real & timeOld() const
Proxy for accessing MaterialPropertyStorage.
Definition: MaterialData.h:37
std::vector< VectorVariableValue > _vector_zero
bool hasMultiApp(const std::string &name) const
bool _u_dot_old_requested
Whether old solution time derivative needs to be stored.
bool ignoreZerosInJacobian() const
Will return true if zeros in the Jacobian are to be dropped from the sparsity pattern.
std::vector< std::unique_ptr< libMesh::CouplingMatrix > > _cm
Coupling matrix for variables.
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)
bool needInterfaceMaterialOnSide(BoundaryID bnd_id, const THREAD_ID tid)
void reinitElemFace(const Elem *elem, unsigned int side, BoundaryID, const THREAD_ID tid)
Linear system to be solved.
Definition: LinearSystem.h:39
bool needToAddDefaultNonlinearConvergence() const
Returns true if the problem needs to add the default nonlinear convergence.
std::optional< std::vector< ConvergenceName > > _linear_convergence_names
Linear system(s) convergence name(s) (if any)
bool useSNESMFReuseBase()
Return a flag that indicates if we are reusing the vector base.
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.
bool _has_initialized_stateful
Whether nor not stateful materials have been initialized.
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...
virtual void setResidualNeighbor(NumericVector< libMesh::Number > &residual, const THREAD_ID tid) override
QueryCache & condition(Args &&... args)
Adds a new condition to the query.
Definition: TheWarehouse.h:285
unsigned int _max_qps
Maximum number of quadrature points used in the problem.
void setMaterialCoverageCheck(bool flag)
Set flag to indicate whether material coverage checks should be performed.
static InputParameters validParams()
virtual void addFVInterpolationMethod(const std::string &method_type, const std::string &name, InputParameters &parameters)
Add an FV interpolation method.
virtual void addScalarKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
TheWarehouse & theWarehouse()
Definition: MooseApp.h:142
bool _preserve_matrix_sparsity_pattern
Whether to preserve the system matrix / Jacobian sparsity pattern, using 0-valued entries usually...
Base class for implementing interface user objects.
virtual unsigned int nNonlinearIterations(const unsigned int nl_sys_num) const override
CoverageCheckMode _material_coverage_check
Determines whether and which subdomains are to be checked to ensure that they have an active material...
virtual std::size_t numLinearSystems() const override
MaterialPropertyStorage & _neighbor_material_props
Moose::Kokkos::Array< Moose::Kokkos::System > _kokkos_systems
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
const std::size_t _num_linear_sys
The number of linear systems.
bool hasKokkosObjects() const
std::map< std::string, unsigned int > _subspace_dim
Dimension of the subspace spanned by the vectors with a given prefix.
ReporterData & getReporterData(ReporterData::WriteKey)
Provides non-const access the ReporterData object that is used to store reporter values.
const libMesh::ConstElemRange & getEvaluableElementRange()
In general, {evaluable elements} >= {local elements} U {algebraic ghosting elements}.
const bool _use_hash_table_matrix_assembly
Whether to assemble matrices using hash tables instead of preallocating matrix memory.
friend class Resurrector
bool restoreOriginalNonzeroPattern() const
const UserObject & getUserObjectBase(const std::string &name, const THREAD_ID tid=0) const
Get the user object by its name.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type...
bool _has_internal_edge_residual_objects
Whether the problem has dgkernels or interface kernels.
virtual void addKokkosKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
bool computingScalingJacobian() const override final
Getter for whether we&#39;re computing the scaling jacobian.
bool execMultiApps(ExecFlagType type, bool auto_advance=true)
Execute the MultiApps associated with the ExecFlagType.
ExecuteMooseObjectWarehouse< Control > & getControlWarehouse()
Reference to the control logic warehouse.
const ExecFlagType EXEC_SUBDOMAIN
Definition: Moose.C:50
virtual ArrayMooseVariable & getArrayVariable(const THREAD_ID tid, const std::string &var_name) override
Returns the variable reference for requested ArrayMooseVariable which may be in any system...
const MooseObjectWarehouse< Marker > & getMarkerWarehouse()
bool _has_constraints
Whether or not this system has any Constraints.
virtual bool isTransient() const override
bool _need_to_add_default_nonlinear_convergence
Flag that the problem needs to add the default nonlinear convergence.
bool hasMultiApps() const
Returns whether or not the current simulation has any multiapps.
virtual void reinitNeighbor(const Elem *elem, unsigned int side, const THREAD_ID tid) override
void notifyWhenMeshChanges(MeshChangedInterface *mci)
Register an object that derives from MeshChangedInterface to be notified when the mesh changes...
void setSNESMFReuseBase(bool reuse, bool set_by_user)
If or not to reuse the base vector for matrix-free calculation.
std::unique_ptr< libMesh::ConstElemRange > _evaluable_local_elem_range
bool computingScalingResidual() const override final
const FVFaceInterpolationMethod & getFVFaceInterpolationMethod(const InterpolationMethodName &name, const THREAD_ID tid=0) const
Retrieve a scalar face interpolation method.
virtual void executeAllObjects(const ExecFlagType &exec_type)
CoverageCheckMode _kernel_coverage_check
Determines whether and which subdomains are to be checked to ensure that they have an active kernel...
virtual void setActiveFEVariableCoupleableVectorTags(std::set< TagID > &vtags, const THREAD_ID tid) override
Real Number
bool _fail_next_system_convergence_check
std::vector< std::shared_ptr< LinearSystem > > _linear_systems
The vector of linear systems.
std::shared_ptr< XFEMInterface > _xfem
Pointer to XFEM controller.
const bool _boundary_restricted_elem_integrity_check
whether to perform checking of boundary restricted elemental object variable dependencies, e.g.
virtual void prepareShapes(unsigned int var, const THREAD_ID tid) override
void reinitMaterialsInterface(BoundaryID boundary_id, const THREAD_ID tid, bool swap_stateful=true)
bool _const_jacobian
true if the Jacobian is constant
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 solveLinearSystem(const unsigned int linear_sys_num, const Moose::PetscSupport::PetscOptions *po=nullptr)
Build and solve a linear system.
virtual void computeUserObjectByName(const ExecFlagType &type, const Moose::AuxGroup &group, const std::string &name)
Compute an user object with the given name.
const MaterialPropertyRegistry & getMaterialPropertyRegistry() const
virtual void possiblyRebuildGeomSearchPatches()
std::set< TagID > _linear_vector_tags
Temporary storage for filtered vector tags for linear systems.
Moose::Kokkos::MaterialPropertyStorage & _kokkos_bnd_material_props
Abstract base class for interpolation methods that produce a scalar face value from adjacent cell val...
A MultiApp represents one or more MOOSE applications that are running simultaneously.
Definition: MultiApp.h:112
bool checkingUOAuxState() const
Return a flag to indicate whether we are executing user objects and auxliary kernels for state check ...
const libMesh::ConstElemRange & getNonlinearEvaluableElementRange()
MaterialPropertyStorage & _material_props
Base class for Postprocessors that produce a vector of values.
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 depend...
virtual void addFVKernel(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)
libMesh::Order _max_scalar_order
Maximum scalar variable order.
virtual void addGhostedBoundary(BoundaryID boundary_id) override
Will make sure that all necessary elements from boundary_id are ghosted to this processor.
virtual bool hasFunction(const std::string &name, const THREAD_ID tid=0)
Adaptivity & adaptivity()
bool hasActiveMaterialProperties(const THREAD_ID tid) const
Method to check whether or not a list of active material roperties has been set.
ExecuteMooseObjectWarehouse< Transfer > _between_multi_app_transfers
Transfers executed just before MultiApps to transfer data between them.
bool hasUOAuxStateCheck() const
Whether or not MOOSE will perform a user object/auxiliary kernel state check.
virtual void cacheJacobian(const THREAD_ID tid) override
void jacobianSetup() override
virtual std::size_t numSolverSystems() const override
virtual void addHDGKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
Executor * getExecutor() const
Definition: MooseApp.h:340
const Moose::Kokkos::Array< Moose::Kokkos::System > & getKokkosSystems() const
virtual Real & dt() const
void advanceMultiApps(ExecFlagType type)
Deprecated method; use finishMultiAppStep and/or incrementMultiAppTStep depending on your purpose...
bool immediatelyPrintInvalidSolution() const
Whether or not the solution invalid warnings are printed out immediately.
Restartable::ManagedValue< RestartableEquationSystems > _req
The EquationSystems object, wrapped for restart.
virtual unsigned int currentLinearSysNum() const override
std::vector< libMesh::CouplingMatrix > _nonlocal_cm
nonlocal coupling matrix
virtual void reinitNodeFace(const Node *node, BoundaryID bnd_id, const THREAD_ID tid) override
virtual void reinitOffDiagScalars(const THREAD_ID tid) override
virtual void reinitElemPhys(const Elem *elem, const std::vector< Point > &phys_points_in_elem, const THREAD_ID tid) override
std::vector< std::unordered_map< BoundaryID, bool > > _interface_mat_side_cache
Cache for calculating materials on interface.
void initKokkosStatefulProps()
virtual void addJacobianNeighborLowerD(const THREAD_ID tid) override
virtual void prepareNeighborShapes(unsigned int var, const THREAD_ID tid) override
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.
MooseObjectWarehouse< Marker > _markers
FVInitialConditionWarehouse _fv_ics
void setVerboseProblem(bool verbose)
Make the problem be verbose.
virtual void setNeighborSubdomainID(const Elem *elem, unsigned int side, const THREAD_ID tid) override
virtual bool hasException()
Whether or not an exception has occurred.
CurrentResidualVectorTagsKey(const CurrentResidualVectorTagsKey &)
virtual void initialAdaptMesh()
virtual void addResidualScalar(const THREAD_ID tid=0)
Moose::Kokkos::MaterialPropertyStorage & _kokkos_neighbor_material_props
const bool _using_default_nl
Boolean to check if we have the default nonlinear system.
MaterialWarehouse _all_materials
bool _u_dotdot_requested
Whether solution second time derivative needs to be stored.
virtual void addCachedResidual(const THREAD_ID tid) override
A system that holds auxiliary variables.
Moose::PetscSupport::PetscOptions _petsc_options
PETSc option storage.
Crank-Nicolson time integrator.
Definition: CrankNicolson.h:22
virtual const std::vector< std::shared_ptr< Convergence > > & getConvergenceObjects(const THREAD_ID tid=0) const
Gets the Convergence objects.
bool preserveMatrixSparsityPattern() const
Will return True if the executioner in use requires preserving the sparsity pattern of the matrices b...
virtual void clearActiveElementalMooseVariables(const THREAD_ID tid) override
Clear the active elemental MooseVariableFEBase.
Base class for user-specific data.
Definition: UserObject.h:19
void allowOutput(bool state)
Ability to enable/disable all output calls.
virtual Sampler & getSampler(const std::string &name, const THREAD_ID tid=0)
virtual void outputStep(ExecFlagType type)
Output the current step.
virtual Moose::Kokkos::Function getKokkosFunction(const std::string &name)
Get a Kokkos function in an abstract type.
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/boun...
virtual unsigned int nlSysNum(const NonlinearSystemName &nl_sys_name) const override
OutputWarehouse & getOutputWarehouse()
Get the OutputWarehouse objects.
Definition: MooseApp.C:2136
MooseEnum _verbose_setup
Whether or not to be verbose during setup.
bool needToAddDefaultMultiAppFixedPointConvergence() const
Returns true if the problem needs to add the default fixed point convergence.
void setIgnoreZerosInJacobian(bool state)
Set whether the zeros in the Jacobian should be dropped from the sparsity pattern.
void computeSystems(const ExecFlagType &type)
Do generic system computations.
virtual void computeJacobianTags(const std::set< TagID > &tags)
Form multiple matrices, and each is associated with a tag.
SolutionIterationType
Definition: MooseTypes.h:269
MooseMesh * _displaced_mesh
const MaterialWarehouse & getKokkosMaterialsWarehouse() const
bool _has_mortar
Whether the simulation requires mortar coupling.
libMesh::Order getMaxScalarOrder() const
void execTransfers(ExecFlagType type)
Execute the Transfers associated with the ExecFlagType.
const std::vector< ConvergenceName > & getLinearConvergenceNames() const
Gets the linear convergence object name(s).
unsigned int THREAD_ID
Definition: MooseTypes.h:237
virtual void ghostGhostedBoundaries() override
Causes the boundaries added using addGhostedBoundary to actually be ghosted.
The Executor class directs the execution flow of simulations.
Definition: Executor.h:26
MaterialWarehouse _materials
uint8_t dof_id_type
virtual bool adaptMesh()
virtual void addJacobianScalar(const THREAD_ID tid=0)
const MaterialPropertyStorage & getNeighborMaterialPropertyStorage()
virtual void addDiracKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
MooseObjectWarehouse< IntegratedBCBase > _nonlocal_integrated_bcs
nonlocal integrated_bcs
virtual const MooseMesh & mesh() const override
virtual void computeResidualTag(const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, TagID tag)
Form a residual vector for a given tag.
virtual bool startedInitialSetup()
Returns true if we are in or beyond the initialSetup stage.
virtual VectorMooseVariable & getVectorVariable(const THREAD_ID tid, const std::string &var_name) override
Returns the variable reference for requested VectorMooseVariable which may be in any system...
std::shared_ptr< LineSearch > _line_search
void initXFEM(std::shared_ptr< XFEMInterface > xfem)
Create XFEM controller object.
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.
Base class for all Transfer objects.
Definition: Transfer.h:36
virtual void neighborSubdomainSetup(SubdomainID subdomain, const THREAD_ID tid)
virtual void addCachedJacobian(const THREAD_ID tid) override
virtual void sizeZeroes(unsigned int size, const THREAD_ID tid)
virtual Real computeDamping(const NumericVector< libMesh::Number > &soln, const NumericVector< libMesh::Number > &update)
std::vector< Real > _real_zero
Convenience zeros.
MooseObjectWarehouse< KernelBase > _nonlocal_kernels
nonlocal kernels
void checkCoordinateSystems()
Verify that there are no element type/coordinate type conflicts.
unsigned int getMaxQps() const
const ExecFlagType EXEC_INITIAL
Definition: Moose.C:30
bool _verbose_multiapps
Whether or not to be verbose with multiapps.
This is a helper class for managing the storage of declared Reporter object values.
Definition: ReporterData.h:48