https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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 "KokkosFESystem.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"
34#include "MooseVariableFE.h"
35#include "MultiAppTransfer.h"
36#include "Postprocessor.h"
37#include "HashMap.h"
38#include "VectorPostprocessor.h"
39#include "PerfGraphInterface.h"
40#include "Attributes.h"
44#include "SolutionInvalidity.h"
45#include "PetscSupport.h"
46
47#include "libmesh/enum_quadrature_type.h"
48#include "libmesh/equation_systems.h"
49
50#include <unordered_map>
51#include <memory>
52
53// Forward declarations
54class AuxiliarySystem;
56class MooseMesh;
58class LinearSystem;
59class SolverSystem;
60class NonlinearSystem;
61class RandomInterface;
62class RandomData;
65class MultiMooseEnum;
67class MaterialData;
68class MooseEnum;
70class Assembly;
71class JacobianBlock;
72class Control;
73class MultiApp;
76class Indicator;
78class Marker;
79class Material;
80class Transfer;
81class XFEMInterface;
82class SideUserObject;
83class NodalUserObject;
88class Positions;
89class Function;
90class Distribution;
91class Sampler;
92class KernelBase;
94class LineSearch;
95class UserObject;
96class UserObjectBase;
102class Convergence;
104class MortarUserObject;
106
107namespace Moose
108{
109class FunctionBase;
110}
111
112#ifdef MOOSE_KOKKOS_ENABLED
113namespace Moose::Kokkos
114{
116class Function;
117class UserObject;
118}
119#endif
120
121// libMesh forward declarations
122namespace libMesh
123{
124class CouplingMatrix;
125class NonlinearImplicitSystem;
126class LinearImplicitSystem;
127} // namespace libMesh
128
130{
131 ITERATING = 0,
132 // CONVERGED_RTOL_NORMAL = 1,
133 // CONVERGED_ATOL_NORMAL = 9,
134 CONVERGED_RTOL = 2,
135 CONVERGED_ATOL = 3,
136 CONVERGED_ITS = 4,
137 // CONVERGED_CG_NEG_CURVE = 5,
138 // CONVERGED_CG_CONSTRAINED = 6,
139 // CONVERGED_STEP_LENGTH = 7,
140 // CONVERGED_HAPPY_BREAKDOWN = 8,
141 DIVERGED_NULL = -2,
142 // DIVERGED_ITS = -3,
143 // DIVERGED_DTOL = -4,
144 // DIVERGED_BREAKDOWN = -5,
145 // DIVERGED_BREAKDOWN_BICG = -6,
146 // DIVERGED_NONSYMMETRIC = -7,
147 // DIVERGED_INDEFINITE_PC = -8,
149 // DIVERGED_INDEFINITE_MAT = -10
151};
152
158{
159public:
161
163 virtual ~FEProblemBase();
164
168 [[nodiscard]] bool initialized() const { return _initialized; }
169
171 {
172 FALSE,
173 TRUE,
174 OFF,
175 ON,
176 SKIP_LIST,
177 ONLY_LIST,
178 };
179
180 virtual libMesh::EquationSystems & es() override { return _req.set().es(); }
181 virtual MooseMesh & mesh() override { return _mesh; }
182 virtual const MooseMesh & mesh() const override { return _mesh; }
183 const MooseMesh & mesh(bool use_displaced) const override;
184 MooseMesh & mesh(bool use_displaced);
185
186 void setCoordSystem(const std::vector<SubdomainName> & blocks, const MultiMooseEnum & coord_sys);
187 void setAxisymmetricCoordAxis(const MooseEnum & rz_coord_axis);
188
195
197
203 void setCouplingMatrix(std::unique_ptr<libMesh::CouplingMatrix> cm,
204 const unsigned int nl_sys_num);
205
206 // DEPRECATED METHOD
207 void setCouplingMatrix(libMesh::CouplingMatrix * cm, const unsigned int nl_sys_num);
208
209 const libMesh::CouplingMatrix * couplingMatrix(const unsigned int nl_sys_num) const override;
210
213
214 bool
215 areCoupled(const unsigned int ivar, const unsigned int jvar, const unsigned int nl_sys_num) const;
216
221
229
230#ifndef NDEBUG
231 virtual bool checkResidualForNans() const override { return _check_residual_for_nans; }
232
234 void setCheckResidualForNans(bool check_residual_for_nans)
235 {
236 _check_residual_for_nans = check_residual_for_nans;
237 }
238#endif
239
246
247 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>> &
248 couplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num);
249 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>> &
250 nonlocalCouplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num);
251
252 virtual bool hasVariable(const std::string & var_name) const override;
253 // NOTE: hasAuxiliaryVariable defined in parent class
254 bool hasSolverVariable(const std::string & var_name) const;
256 virtual const MooseVariableFieldBase &
257 getVariable(const THREAD_ID tid,
258 const std::string & var_name,
260 Moose::VarFieldType expected_var_field_type =
263 const std::string & var_name) override;
264 virtual MooseVariable & getStandardVariable(const THREAD_ID tid,
265 const std::string & var_name) override;
267 const std::string & var_name) override;
269 const std::string & var_name) override;
270
271 virtual bool hasScalarVariable(const std::string & var_name) const override;
273 const std::string & var_name) override;
274 virtual libMesh::System & getSystem(const std::string & var_name) override;
275
278
285 virtual void setActiveElementalMooseVariables(const std::set<MooseVariableFEBase *> & moose_vars,
286 const THREAD_ID tid) override;
287
295 virtual void clearActiveElementalMooseVariables(const THREAD_ID tid) override;
296
297 virtual void clearActiveFEVariableCoupleableMatrixTags(const THREAD_ID tid) override;
298
299 virtual void clearActiveFEVariableCoupleableVectorTags(const THREAD_ID tid) override;
300
301 virtual void setActiveFEVariableCoupleableVectorTags(std::set<TagID> & vtags,
302 const THREAD_ID tid) override;
303
304 virtual void setActiveFEVariableCoupleableMatrixTags(std::set<TagID> & mtags,
305 const THREAD_ID tid) override;
306
307 virtual void clearActiveScalarVariableCoupleableMatrixTags(const THREAD_ID tid) override;
308
309 virtual void clearActiveScalarVariableCoupleableVectorTags(const THREAD_ID tid) override;
310
311 virtual void setActiveScalarVariableCoupleableVectorTags(std::set<TagID> & vtags,
312 const THREAD_ID tid) override;
313
314 virtual void setActiveScalarVariableCoupleableMatrixTags(std::set<TagID> & mtags,
315 const THREAD_ID tid) override;
316
318 libMesh::Order order,
322 bool allow_negative_qweights = true);
323
332
334
338 unsigned int getMaxQps() const;
339
344
350 void setVariableAllDoFMap(const std::vector<const MooseVariableFEBase *> & moose_vars);
351
352 const std::vector<const MooseVariableFEBase *> &
354 {
355 return _uo_jacobian_moose_vars[tid];
356 }
357
358 virtual Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) override;
359 virtual const Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) const override;
360
361#ifdef MOOSE_KOKKOS_ENABLED
364#endif
365
369 virtual std::vector<VariableName> getVariableNames();
370
371 void initialSetup() override;
373 void timestepSetup() override;
374 void customSetup(const ExecFlagType & exec_type) override;
375 void residualSetup() override;
376 void jacobianSetup() override;
377
378 virtual void prepare(const Elem * elem, const THREAD_ID tid) override;
379 virtual void prepareFace(const Elem * elem, const THREAD_ID tid) override;
380 virtual void prepare(const Elem * elem,
381 unsigned int ivar,
382 unsigned int jvar,
383 const std::vector<dof_id_type> & dof_indices,
384 const THREAD_ID tid) override;
385
386 virtual void setCurrentSubdomainID(const Elem * elem, const THREAD_ID tid) override;
387 virtual void
388 setNeighborSubdomainID(const Elem * elem, unsigned int side, const THREAD_ID tid) override;
389 virtual void setNeighborSubdomainID(const Elem * elem, const THREAD_ID tid);
390 virtual void prepareAssembly(const THREAD_ID tid) override;
394 virtual void prepareAssemblyNeighbor(const THREAD_ID tid);
395
396 virtual void addGhostedElem(dof_id_type elem_id) override;
397 virtual void addGhostedBoundary(BoundaryID boundary_id) override;
398 virtual void ghostGhostedBoundaries() override;
399
400 virtual void sizeZeroes(unsigned int size, const THREAD_ID tid);
401 virtual bool reinitDirac(const Elem * elem, const THREAD_ID tid) override;
402
403 virtual void reinitElem(const Elem * elem, const THREAD_ID tid) override;
404 virtual void reinitElemPhys(const Elem * elem,
405 const std::vector<Point> & phys_points_in_elem,
406 const THREAD_ID tid) override;
407 void reinitElemFace(const Elem * elem, unsigned int side, BoundaryID, const THREAD_ID tid);
408 virtual void reinitElemFace(const Elem * elem, unsigned int side, const THREAD_ID tid) override;
409 virtual void reinitLowerDElem(const Elem * lower_d_elem,
410 const THREAD_ID tid,
411 const std::vector<Point> * const pts = nullptr,
412 const std::vector<Real> * const weights = nullptr) override;
413 virtual void reinitNode(const Node * node, const THREAD_ID tid) override;
414 virtual void reinitNodeFace(const Node * node, BoundaryID bnd_id, const THREAD_ID tid) override;
415 virtual void reinitNodes(const std::vector<dof_id_type> & nodes, const THREAD_ID tid) override;
416 virtual void reinitNodesNeighbor(const std::vector<dof_id_type> & nodes,
417 const THREAD_ID tid) override;
418 virtual void reinitNeighbor(const Elem * elem, unsigned int side, const THREAD_ID tid) override;
419 virtual void reinitNeighborPhys(const Elem * neighbor,
420 unsigned int neighbor_side,
421 const std::vector<Point> & physical_points,
422 const THREAD_ID tid) override;
423 virtual void reinitNeighborPhys(const Elem * neighbor,
424 const std::vector<Point> & physical_points,
425 const THREAD_ID tid) override;
426 virtual void
427 reinitElemNeighborAndLowerD(const Elem * elem, unsigned int side, const THREAD_ID tid) override;
428 virtual void reinitScalars(const THREAD_ID tid,
429 bool reinit_for_derivative_reordering = false) override;
430 virtual void reinitOffDiagScalars(const THREAD_ID tid) override;
431
433 virtual void getDiracElements(std::set<const Elem *> & elems) override;
434 virtual void clearDiracInfo() override;
435
436 virtual void subdomainSetup(SubdomainID subdomain, const THREAD_ID tid);
437 virtual void neighborSubdomainSetup(SubdomainID subdomain, const THREAD_ID tid);
438
439 virtual void newAssemblyArray(std::vector<std::shared_ptr<SolverSystem>> & solver_systems);
441 std::vector<std::shared_ptr<NonlinearSystemBase>> & nl);
442
443 virtual void init() override;
444 virtual void solve(const unsigned int nl_sys_num);
445
446#ifdef MOOSE_KOKKOS_ENABLED
451#endif
452
458 virtual void solveLinearSystem(const unsigned int linear_sys_num,
459 const Moose::PetscSupport::PetscOptions * po = nullptr);
460
462
481
483
498
500
521
530 virtual void setException(const std::string & message);
531
535 virtual bool hasException() { return _has_exception; }
536
553 virtual void checkExceptionAndStopSolve(bool print_message = true);
554
555 virtual bool solverSystemConverged(const unsigned int solver_sys_num) override;
556 virtual unsigned int nNonlinearIterations(const unsigned int nl_sys_num) const override;
557 virtual unsigned int nLinearIterations(const unsigned int nl_sys_num) const override;
558 virtual Real finalNonlinearResidual(const unsigned int nl_sys_num) const override;
559 virtual bool computingPreSMOResidual(const unsigned int nl_sys_num) const override;
560
564 virtual std::string solverTypeString(unsigned int solver_sys_num = 0);
565
570
571 virtual void onTimestepBegin() override;
572 virtual void onTimestepEnd() override;
573
574 virtual Real & time() const { return _time; }
575 virtual Real & timeOld() const { return _time_old; }
576 virtual int & timeStep() const { return _t_step; }
577 virtual Real & dt() const { return _dt; }
578 virtual Real & dtOld() const { return _dt_old; }
582 Real getTimeFromStateArg(const Moose::StateArg & state) const;
583
584 virtual void transient(bool trans) { _transient = trans; }
585 virtual bool isTransient() const override { return _transient; }
586
587 virtual void addTimeIntegrator(const std::string & type,
588 const std::string & name,
590 virtual void
591 addPredictor(const std::string & type, const std::string & name, InputParameters & parameters);
592
593 virtual void copySolutionsBackwards();
594
599
604 virtual void advanceState();
605
606 virtual void restoreSolutions();
607
611 virtual void saveOldSolutions();
612
616 virtual void restoreOldSolutions();
617
623 void needSolutionState(unsigned int oldest_needed, Moose::SolutionIterationType iteration_type);
624
630 bool hasSolutionState(unsigned int state, Moose::SolutionIterationType iteration_type) const;
631
638 virtual void outputStep(ExecFlagType type);
639
643 virtual void postExecute();
644
646
652 void allowOutput(bool state);
653 template <typename T>
654 void allowOutput(bool state);
656
665 void forceOutput();
666
672
677
681 void logAdd(const std::string & system,
682 const std::string & name,
683 const std::string & type,
684 const InputParameters & params) const;
685
686 // Function /////
687 virtual void
688 addFunction(const std::string & type, const std::string & name, InputParameters & parameters);
689 virtual bool hasFunction(const std::string & name, const THREAD_ID tid = 0);
690 virtual Function & getFunction(const std::string & name, const THREAD_ID tid = 0);
691
692#ifdef MOOSE_KOKKOS_ENABLED
699 virtual void addKokkosFunction(const std::string & type,
700 const std::string & name,
707 virtual bool hasKokkosFunction(const std::string & name) const;
713 virtual Moose::Kokkos::Function getKokkosFunction(const std::string & name);
720 template <typename T>
721 T & getKokkosFunction(const std::string & name);
722#endif
723
725 virtual void
726 addMeshDivision(const std::string & type, const std::string & name, InputParameters & params);
728 MeshDivision & getMeshDivision(const std::string & name, const THREAD_ID tid = 0) const;
729
731 virtual void
732 addConvergence(const std::string & type, const std::string & name, InputParameters & parameters);
734 virtual Convergence & getConvergence(const std::string & name, const THREAD_ID tid = 0) const;
736 virtual const std::vector<std::shared_ptr<Convergence>> &
737 getConvergenceObjects(const THREAD_ID tid = 0) const;
739 virtual bool hasConvergence(const std::string & name, const THREAD_ID tid = 0) const;
777 {
778 return _steady_state_convergence_name.has_value();
779 }
787 virtual void addDefaultNonlinearConvergence(const InputParameters & params);
795 virtual bool onlyAllowDefaultNonlinearConvergence() const { return false; }
812
816 virtual void addLineSearch(const InputParameters & /*parameters*/)
817 {
818 mooseError("Line search not implemented for this problem type yet.");
819 }
820
824 virtual void lineSearch();
825
829 LineSearch * getLineSearch() override { return _line_search.get(); }
830
834 virtual void
835 addDistribution(const std::string & type, const std::string & name, InputParameters & parameters);
836 virtual bool hasDistribution(const std::string & name) const;
837 virtual Distribution & getDistribution(const std::string & name);
838
842 virtual void
843 addSampler(const std::string & type, const std::string & name, InputParameters & parameters);
844 virtual Sampler & getSampler(const std::string & name, const THREAD_ID tid = 0);
845
846 // NL /////
847 NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num);
848 const NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num) const;
849 void setCurrentNonlinearSystem(const unsigned int nl_sys_num);
852
853 virtual const SystemBase & systemBaseNonlinear(const unsigned int sys_num) const override;
854 virtual SystemBase & systemBaseNonlinear(const unsigned int sys_num) override;
855
856 virtual const SystemBase & systemBaseSolver(const unsigned int sys_num) const override;
857 virtual SystemBase & systemBaseSolver(const unsigned int sys_num) override;
858
859 virtual const SystemBase & systemBaseAuxiliary() const override;
860 virtual SystemBase & systemBaseAuxiliary() override;
861
862 virtual NonlinearSystem & getNonlinearSystem(const unsigned int sys_num);
863
864#ifdef MOOSE_KOKKOS_ENABLED
876
891
898 Moose::Kokkos::System & getKokkosSystem(const unsigned int sys_num);
899 const Moose::Kokkos::System & getKokkosSystem(const unsigned int sys_num) const;
901
908 Moose::Kokkos::FESystem & getKokkosFESystem(const unsigned int sys_num);
909 const Moose::Kokkos::FESystem & getKokkosFESystem(const unsigned int sys_num) const;
911#endif
912
917 virtual const SystemBase & getSystemBase(const unsigned int sys_num) const;
918
923 virtual SystemBase & getSystemBase(const unsigned int sys_num);
924
929 SystemBase & getSystemBase(const std::string & sys_name);
930
935 LinearSystem & getLinearSystem(unsigned int sys_num);
936
941 const LinearSystem & getLinearSystem(unsigned int sys_num) const;
942
947 SolverSystem & getSolverSystem(unsigned int sys_num);
948
953 const SolverSystem & getSolverSystem(unsigned int sys_num) const;
954
959 void setCurrentLinearSystem(unsigned int sys_num);
960
964 const LinearSystem & currentLinearSystem() const;
965
970 virtual const SystemBase & systemBaseLinear(unsigned int sys_num) const override;
971
976 virtual SystemBase & systemBaseLinear(unsigned int sys_num) override;
977
984 virtual void
985 addVariable(const std::string & var_type, const std::string & var_name, InputParameters & params);
986
987 virtual void addKernel(const std::string & kernel_name,
988 const std::string & name,
990 virtual void addHDGKernel(const std::string & kernel_name,
991 const std::string & name,
993 virtual void addNodalKernel(const std::string & kernel_name,
994 const std::string & name,
996 virtual void addScalarKernel(const std::string & kernel_name,
997 const std::string & name,
999 virtual void addBoundaryCondition(const std::string & bc_name,
1000 const std::string & name,
1002
1003#ifdef MOOSE_KOKKOS_ENABLED
1004 virtual void addKokkosKernel(const std::string & kernel_name,
1005 const std::string & name,
1007 virtual void addKokkosNodalKernel(const std::string & kernel_name,
1008 const std::string & name,
1010 virtual void addKokkosBoundaryCondition(const std::string & bc_name,
1011 const std::string & name,
1013 virtual void addKokkosLinearFVKernel(const std::string & kernel_name,
1014 const std::string & name,
1016 virtual void addKokkosLinearFVBC(const std::string & bc_name,
1017 const std::string & name,
1019#endif
1020
1021 virtual void
1022 addConstraint(const std::string & c_name, const std::string & name, InputParameters & parameters);
1023
1025 {
1026 parameters.set<FEProblemBase *>("_fe_problem_base") = this;
1027 }
1028
1029 // Aux /////
1030
1037 virtual void addAuxVariable(const std::string & var_type,
1038 const std::string & var_name,
1039 InputParameters & params);
1040
1044 virtual void addElementalFieldVariable(const std::string & var_type,
1045 const std::string & var_name,
1046 InputParameters & params);
1047
1048 virtual void addAuxVariable(const std::string & var_name,
1049 const libMesh::FEType & type,
1050 const std::set<SubdomainID> * const active_subdomains = NULL);
1051 virtual void addAuxArrayVariable(const std::string & var_name,
1052 const libMesh::FEType & type,
1053 unsigned int components,
1054 const std::set<SubdomainID> * const active_subdomains = NULL);
1055 virtual void addAuxScalarVariable(const std::string & var_name,
1056 libMesh::Order order,
1057 Real scale_factor = 1.,
1058 const std::set<SubdomainID> * const active_subdomains = NULL);
1059 virtual void addAuxKernel(const std::string & kernel_name,
1060 const std::string & name,
1062 virtual void addAuxScalarKernel(const std::string & kernel_name,
1063 const std::string & name,
1065
1066#ifdef MOOSE_KOKKOS_ENABLED
1067 virtual void addKokkosAuxKernel(const std::string & kernel_name,
1068 const std::string & name,
1070#endif
1071
1073
1074 // Dirac /////
1075 virtual void addDiracKernel(const std::string & kernel_name,
1076 const std::string & name,
1078
1079 // DG /////
1080 virtual void addDGKernel(const std::string & kernel_name,
1081 const std::string & name,
1083 // FV /////
1084 virtual void addFVKernel(const std::string & kernel_name,
1085 const std::string & name,
1087
1088 virtual void addLinearFVKernel(const std::string & kernel_name,
1089 const std::string & name,
1091 virtual void
1092 addFVBC(const std::string & fv_bc_name, const std::string & name, InputParameters & parameters);
1093 virtual void addLinearFVBC(const std::string & fv_bc_name,
1094 const std::string & name,
1096
1097 virtual void addFVInterfaceKernel(const std::string & fv_ik_name,
1098 const std::string & name,
1100
1101 // Interface /////
1102 virtual void addInterfaceKernel(const std::string & kernel_name,
1103 const std::string & name,
1105
1106 // IC /////
1107 virtual void addInitialCondition(const std::string & ic_name,
1108 const std::string & name,
1116 virtual void addFVInitialCondition(const std::string & ic_name,
1117 const std::string & name,
1119
1120 void projectSolution();
1121
1126 unsigned short getCurrentICState();
1127
1137 libMesh::ConstElemRange & elem_range,
1138 ConstBndNodeRange & bnd_node_range,
1139 const std::optional<std::set<VariableName>> & target_vars = std::nullopt);
1140
1150 void projectFunctionOnCustomRange(ConstElemRange & elem_range,
1151 Number (*func)(const Point &,
1152 const libMesh::Parameters &,
1153 const std::string &,
1154 const std::string &),
1155 Gradient (*func_grad)(const Point &,
1156 const libMesh::Parameters &,
1157 const std::string &,
1158 const std::string &),
1159 const libMesh::Parameters & params,
1160 const std::vector<VariableName> & target_vars);
1161
1162 // Materials
1163 virtual void addMaterial(const std::string & material_name,
1164 const std::string & name,
1166 virtual void addMaterialHelper(std::vector<MaterialWarehouse *> warehouse,
1167 const std::string & material_name,
1168 const std::string & name,
1170 virtual void addInterfaceMaterial(const std::string & material_name,
1171 const std::string & name,
1173 virtual void addFunctorMaterial(const std::string & functor_material_name,
1174 const std::string & name,
1176
1177#ifdef MOOSE_KOKKOS_ENABLED
1178 virtual void addKokkosMaterial(const std::string & material_name,
1179 const std::string & name,
1181#endif
1182
1194 void prepareMaterials(const std::unordered_set<unsigned int> & consumer_needed_mat_props,
1195 const SubdomainID blk_id,
1196 const THREAD_ID tid);
1197
1198 void reinitMaterials(SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful = true);
1199
1209 void reinitMaterialsFace(SubdomainID blk_id,
1210 const THREAD_ID tid,
1211 bool swap_stateful = true,
1212 const std::deque<MaterialBase *> * reinit_mats = nullptr);
1213
1225 void
1226 reinitMaterialsFaceOnBoundary(const BoundaryID boundary_id,
1227 const SubdomainID blk_id,
1228 const THREAD_ID tid,
1229 const bool swap_stateful = true,
1230 const std::deque<MaterialBase *> * const reinit_mats = nullptr);
1231
1243 void
1245 const SubdomainID blk_id,
1246 const THREAD_ID tid,
1247 const bool swap_stateful = true,
1248 const std::deque<MaterialBase *> * const reinit_mats = nullptr);
1249
1260 const THREAD_ID tid,
1261 bool swap_stateful = true,
1262 const std::deque<MaterialBase *> * reinit_mats = nullptr);
1263
1276 void reinitMaterialsBoundary(BoundaryID boundary_id,
1277 const THREAD_ID tid,
1278 bool swap_stateful = true,
1279 const std::deque<MaterialBase *> * reinit_mats = nullptr);
1280
1281 void
1282 reinitMaterialsInterface(BoundaryID boundary_id, const THREAD_ID tid, bool swap_stateful = true);
1283
1284#ifdef MOOSE_KOKKOS_ENABLED
1285 void prepareKokkosMaterials(const std::unordered_set<unsigned int> & consumer_needed_mat_props);
1287#endif
1288
1289 /*
1290 * Swap back underlying data storing stateful material properties
1291 */
1292 virtual void swapBackMaterials(const THREAD_ID tid);
1293 virtual void swapBackMaterialsFace(const THREAD_ID tid);
1294 virtual void swapBackMaterialsNeighbor(const THREAD_ID tid);
1295
1302 void setActiveMaterialProperties(const std::unordered_set<unsigned int> & mat_prop_ids,
1303 const THREAD_ID tid);
1304
1313 bool hasActiveMaterialProperties(const THREAD_ID tid) const;
1314
1321
1333 template <typename T>
1334 std::vector<std::shared_ptr<T>> addObject(const std::string & type,
1335 const std::string & name,
1337 const bool threaded = true,
1338 const std::string & var_param_name = "variable");
1339
1340 // Postprocessors /////
1341 virtual void addPostprocessor(const std::string & pp_name,
1342 const std::string & name,
1344
1345 // VectorPostprocessors /////
1346 virtual void addVectorPostprocessor(const std::string & pp_name,
1347 const std::string & name,
1349
1358 virtual void
1359 addReporter(const std::string & type, const std::string & name, InputParameters & parameters);
1360
1361#ifdef MOOSE_KOKKOS_ENABLED
1362 virtual void addKokkosPostprocessor(const std::string & pp_name,
1363 const std::string & name,
1365 virtual void addKokkosVectorPostprocessor(const std::string & pp_name,
1366 const std::string & name,
1368 virtual void addKokkosReporter(const std::string & type,
1369 const std::string & name,
1371#endif
1372
1380 const ReporterData & getReporterData() const { return _reporter_data; }
1381
1388
1389 // UserObjects /////
1390 virtual std::vector<std::shared_ptr<UserObject>> addUserObject(
1391 const std::string & user_object_name, const std::string & name, InputParameters & parameters);
1392
1398 template <class T>
1399 T & getUserObject(const std::string & name, unsigned int tid = 0) const
1400 {
1401 std::vector<T *> objs;
1402 theWarehouse()
1403 .query()
1404 .condition<AttribSystem>("UserObject")
1405 .condition<AttribThread>(tid)
1406 .condition<AttribName>(name)
1407 .queryInto(objs);
1408 if (objs.empty())
1409 mooseError("Unable to find user object with name '" + name + "'");
1410 return *(objs[0]);
1411 }
1412
1419 const UserObject & getUserObjectBase(const std::string & name, const THREAD_ID tid = 0) const;
1420
1426 bool hasUserObject(const std::string & name) const;
1427
1428#ifdef MOOSE_KOKKOS_ENABLED
1429 virtual void addKokkosUserObject(const std::string & user_object_name,
1430 const std::string & name,
1432
1438 template <class T>
1439 const T & getKokkosUserObject(const std::string & name) const
1440 {
1441 std::vector<T *> objs;
1442 theWarehouse()
1443 .query()
1444 .condition<AttribSystem>("KokkosUserObject")
1445 .condition<AttribName>(name)
1446 .queryInto(objs);
1447 if (objs.empty())
1448 mooseError("Unable to find Kokkos user object with name '" + name + "'");
1449 return *(objs[0]);
1450 }
1451
1457 bool hasKokkosUserObject(const std::string & name) const;
1458#endif
1459
1465 void checkUserObjectNameCollision(const std::string & name, const std::string & type) const;
1466
1472 const Positions & getPositionsObject(const std::string & name) const;
1473
1480 virtual void addFVInterpolationMethod(const std::string & method_type,
1481 const std::string & name,
1483
1489 const FVInterpolationMethod & getFVInterpolationMethod(const InterpolationMethodName & name,
1490 const THREAD_ID tid = 0) const;
1491
1498 getFVFaceInterpolationMethod(const InterpolationMethodName & name, const THREAD_ID tid = 0) const;
1499
1506 getFVAdvectedInterpolationMethod(const InterpolationMethodName & name,
1507 const THREAD_ID tid = 0) const;
1508
1512 bool hasFVInterpolationMethod(const InterpolationMethodName & name) const;
1513
1522 bool hasPostprocessorValueByName(const PostprocessorName & name) const;
1523
1529 const Postprocessor & getPostprocessorObjectByName(const PostprocessorName & object_name,
1530 const THREAD_ID tid = 0) const;
1531
1542 const PostprocessorValue & getPostprocessorValueByName(const PostprocessorName & name,
1543 std::size_t t_index = 0) const;
1544
1559 void setPostprocessorValueByName(const PostprocessorName & name,
1560 const PostprocessorValue & value,
1561 std::size_t t_index = 0);
1562
1566 bool hasPostprocessor(const std::string & name) const;
1567
1579 getVectorPostprocessorValueByName(const std::string & object_name,
1580 const std::string & vector_name,
1581 std::size_t t_index = 0) const;
1582
1590 void setVectorPostprocessorValueByName(const std::string & object_name,
1591 const std::string & vector_name,
1592 const VectorPostprocessorValue & value,
1593 std::size_t t_index = 0);
1594
1603 const VectorPostprocessor & getVectorPostprocessorObjectByName(const std::string & object_name,
1604 const THREAD_ID tid = 0) const;
1605
1607
1610 bool hasMultiApps() const { return _multi_apps.hasActiveObjects(); }
1611 bool hasMultiApps(ExecFlagType type) const;
1612 bool hasMultiApp(const std::string & name) const;
1614
1615 // Dampers /////
1616 virtual void addDamper(const std::string & damper_name,
1617 const std::string & name,
1619 void setupDampers();
1620
1624 bool hasDampers() { return _has_dampers; }
1625
1626 // Indicators /////
1627 virtual void addIndicator(const std::string & indicator_name,
1628 const std::string & name,
1630
1631 // Markers //////
1632 virtual void addMarker(const std::string & marker_name,
1633 const std::string & name,
1635
1639 virtual void addMultiApp(const std::string & multi_app_name,
1640 const std::string & name,
1642
1646 std::shared_ptr<MultiApp> getMultiApp(const std::string & multi_app_name) const;
1647
1651 std::vector<std::shared_ptr<Transfer>> getTransfers(ExecFlagType type,
1652 Transfer::DIRECTION direction) const;
1653 std::vector<std::shared_ptr<Transfer>> getTransfers(Transfer::DIRECTION direction) const;
1654
1660
1667
1671 bool execMultiApps(ExecFlagType type, bool auto_advance = true);
1672
1673 void finalizeMultiApps();
1674
1679
1685 {
1686 mooseDeprecated("Deprecated method; use finishMultiAppStep and/or incrementMultiAppTStep "
1687 "depending on your purpose");
1689 }
1690
1695 void finishMultiAppStep(ExecFlagType type, bool recurse_through_multiapp_levels = false);
1696
1701
1706 void restoreMultiApps(ExecFlagType type, bool force = false);
1707
1712
1716 virtual void addTransfer(const std::string & transfer_name,
1717 const std::string & name,
1719
1727
1733
1739
1746 virtual Real computeResidualL2Norm();
1747
1752 const NumericVector<libMesh::Number> & soln,
1753 NumericVector<libMesh::Number> & residual);
1759 const NumericVector<libMesh::Number> & soln,
1760 NumericVector<libMesh::Number> & residual);
1761
1765 virtual void computeResidual(const NumericVector<libMesh::Number> & soln,
1766 NumericVector<libMesh::Number> & residual,
1767 const unsigned int nl_sys_num);
1768
1772 void computeResidualAndJacobian(const NumericVector<libMesh::Number> & soln,
1773 NumericVector<libMesh::Number> & residual,
1775
1779 virtual void computeResidualTag(const NumericVector<libMesh::Number> & soln,
1780 NumericVector<libMesh::Number> & residual,
1781 TagID tag);
1785 virtual void computeResidualType(const NumericVector<libMesh::Number> & soln,
1786 NumericVector<libMesh::Number> & residual,
1787 TagID tag);
1788
1793 virtual void computeResidualInternal(const NumericVector<libMesh::Number> & soln,
1794 NumericVector<libMesh::Number> & residual,
1795 const std::set<TagID> & tags);
1799 virtual void computeResidualTags(const std::set<TagID> & tags);
1800
1805 const NumericVector<libMesh::Number> & soln,
1810 virtual void computeJacobian(const NumericVector<libMesh::Number> & soln,
1812 const unsigned int nl_sys_num);
1813
1817 virtual void computeJacobianTag(const NumericVector<libMesh::Number> & soln,
1819 TagID tag);
1820
1824 virtual void computeJacobianInternal(const NumericVector<libMesh::Number> & soln,
1826 const std::set<TagID> & tags);
1827
1831 virtual void computeJacobianTags(const std::set<TagID> & tags);
1832
1841 virtual void computeJacobianBlocks(std::vector<JacobianBlock *> & blocks,
1842 const unsigned int nl_sys_num);
1843
1858 libMesh::System & precond_system,
1859 unsigned int ivar,
1860 unsigned int jvar);
1861
1873 NumericVector<libMesh::Number> & rhs,
1874 const bool compute_gradients = true);
1875
1885 void computeLinearSystemTags(const NumericVector<libMesh::Number> & soln,
1886 const std::set<TagID> & vector_tags,
1887 const std::set<TagID> & matrix_tags,
1888 const bool compute_gradients = true);
1889
1890 virtual Real computeDamping(const NumericVector<libMesh::Number> & soln,
1891 const NumericVector<libMesh::Number> & update);
1892
1897 virtual bool shouldUpdateSolution();
1898
1905 virtual bool updateSolution(NumericVector<libMesh::Number> & vec_solution,
1906 NumericVector<libMesh::Number> & ghosted_solution);
1907
1912 virtual void predictorCleanup(NumericVector<libMesh::Number> & ghosted_solution);
1913
1915 NumericVector<libMesh::Number> & lower,
1916 NumericVector<libMesh::Number> & upper);
1918 std::vector<NumericVector<libMesh::Number> *> & sp);
1920 std::vector<NumericVector<libMesh::Number> *> & sp);
1922 std::vector<NumericVector<libMesh::Number> *> & sp);
1924 const NumericVector<libMesh::Number> & old_soln,
1925 NumericVector<libMesh::Number> & search_direction,
1926 NumericVector<libMesh::Number> & new_soln,
1927 bool & changed_search_direction,
1928 bool & changed_new_soln);
1929
1930 virtual void computeIndicatorsAndMarkers();
1931 virtual void computeIndicators();
1932 virtual void computeMarkers();
1933
1934 virtual void addResidual(const THREAD_ID tid) override;
1935 virtual void addResidualNeighbor(const THREAD_ID tid) override;
1936 virtual void addResidualLower(const THREAD_ID tid) override;
1937 virtual void addResidualScalar(const THREAD_ID tid = 0);
1938
1939 virtual void cacheResidual(const THREAD_ID tid) override;
1940 virtual void cacheResidualNeighbor(const THREAD_ID tid) override;
1941 virtual void addCachedResidual(const THREAD_ID tid) override;
1942
1950 virtual void addCachedResidualDirectly(NumericVector<libMesh::Number> & residual,
1951 const THREAD_ID tid);
1952
1953 virtual void setResidual(NumericVector<libMesh::Number> & residual, const THREAD_ID tid) override;
1954 virtual void setResidualNeighbor(NumericVector<libMesh::Number> & residual,
1955 const THREAD_ID tid) override;
1956
1957 virtual void addJacobian(const THREAD_ID tid) override;
1958 virtual void addJacobianNeighbor(const THREAD_ID tid) override;
1959 virtual void addJacobianNeighborLowerD(const THREAD_ID tid) override;
1960 virtual void addJacobianLowerD(const THREAD_ID tid) override;
1962 unsigned int ivar,
1963 unsigned int jvar,
1964 const DofMap & dof_map,
1965 std::vector<dof_id_type> & dof_indices,
1966 const std::set<TagID> & tags,
1967 const THREAD_ID tid);
1969 unsigned int ivar,
1970 unsigned int jvar,
1971 const DofMap & dof_map,
1972 std::vector<dof_id_type> & dof_indices,
1973 std::vector<dof_id_type> & neighbor_dof_indices,
1974 const std::set<TagID> & tags,
1975 const THREAD_ID tid) override;
1976 virtual void addJacobianScalar(const THREAD_ID tid = 0);
1977 virtual void addJacobianOffDiagScalar(unsigned int ivar, const THREAD_ID tid = 0);
1978
1979 virtual void cacheJacobian(const THREAD_ID tid) override;
1980 virtual void cacheJacobianNeighbor(const THREAD_ID tid) override;
1981 virtual void addCachedJacobian(const THREAD_ID tid) override;
1982
1983 virtual void prepareShapes(unsigned int var, const THREAD_ID tid) override;
1984 virtual void prepareFaceShapes(unsigned int var, const THREAD_ID tid) override;
1985 virtual void prepareNeighborShapes(unsigned int var, const THREAD_ID tid) override;
1986
1987 // Displaced problem /////
1988 virtual void addDisplacedProblem(std::shared_ptr<DisplacedProblem> displaced_problem);
1989 virtual std::shared_ptr<const DisplacedProblem> getDisplacedProblem() const
1990 {
1991 return _displaced_problem;
1992 }
1993 virtual std::shared_ptr<DisplacedProblem> getDisplacedProblem() { return _displaced_problem; }
1994
1998 virtual void updateGeomSearch(
2000 virtual void updateMortarMesh();
2001
2003 const std::pair<BoundaryID, BoundaryID> & primary_secondary_boundary_pair,
2004 const std::pair<SubdomainID, SubdomainID> & primary_secondary_subdomain_pair,
2005 bool on_displaced,
2006 bool periodic,
2007 const bool debug,
2008 const bool correct_edge_dropping,
2009 const Real minimum_projection_angle,
2010 const Mortar3DSubpatchPlane mortar_3d_subpatch_plane,
2011 const MooseEnum & triangulation,
2012 const bool triangulate_triangles,
2013 const Mortar3DQuadraturePointMapping mortar_3d_qp_mapping =
2014 Mortar3DQuadraturePointMapping::NORMAL_PROJECTION);
2015
2022 getMortarInterface(const std::pair<BoundaryID, BoundaryID> & primary_secondary_boundary_pair,
2023 const std::pair<SubdomainID, SubdomainID> & primary_secondary_subdomain_pair,
2024 bool on_displaced) const;
2025
2027 getMortarInterface(const std::pair<BoundaryID, BoundaryID> & primary_secondary_boundary_pair,
2028 const std::pair<SubdomainID, SubdomainID> & primary_secondary_subdomain_pair,
2029 bool on_displaced);
2031
2032 const std::unordered_map<std::pair<BoundaryID, BoundaryID>, MortarInterfaceConfig> &
2033 getMortarInterfaces(bool on_displaced) const;
2034
2035 virtual void possiblyRebuildGeomSearchPatches();
2036
2038
2043 void setRestartFile(const std::string & file_name);
2044
2052
2064
2065#ifdef MOOSE_KOKKOS_ENABLED
2078#endif
2080
2092
2097
2102
2106 SolverParams & solverParams(unsigned int solver_sys_num = 0);
2107
2111 const SolverParams & solverParams(unsigned int solver_sys_num = 0) const;
2112
2113#ifdef LIBMESH_ENABLE_AMR
2114 // Adaptivity /////
2116 virtual void initialAdaptMesh();
2117
2121 virtual bool adaptMesh();
2122
2126 unsigned int getNumCyclesCompleted() { return _cycles_completed; }
2127
2131 bool hasInitialAdaptivity() const { return _adaptivity.getInitialSteps() > 0; }
2132#else
2136 bool hasInitialAdaptivity() const { return false; }
2137#endif // LIBMESH_ENABLE_AMR
2138
2140 void initXFEM(std::shared_ptr<XFEMInterface> xfem);
2141
2143 std::shared_ptr<XFEMInterface> getXFEM() { return _xfem; }
2144
2146 bool haveXFEM() { return _xfem != nullptr; }
2147
2149 virtual bool updateMeshXFEM();
2150
2165 virtual void
2166 meshChanged(bool intermediate_change, bool contract_mesh, bool clean_refinement_flags);
2167
2173
2179
2185 void initElementStatefulProps(const libMesh::ConstElemRange & elem_range, const bool threaded);
2186
2187#ifdef MOOSE_KOKKOS_ENABLED
2189#endif
2190
2195 virtual void checkProblemIntegrity();
2196
2197 void registerRandomInterface(RandomInterface & random_interface, const std::string & name);
2198
2203 void setConstJacobian(bool state) { _const_jacobian = state; }
2204
2210
2219
2227
2238
2243
2245 void setVerboseProblem(bool verbose);
2246
2250 bool verboseMultiApps() const { return _verbose_multiapps; }
2251
2256
2258
2275 bool needBoundaryMaterialOnSide(BoundaryID bnd_id, const THREAD_ID tid);
2276 bool needInterfaceMaterialOnSide(BoundaryID bnd_id, const THREAD_ID tid);
2277 bool needInternalNeighborSideMaterial(SubdomainID subdomain_id, const THREAD_ID tid);
2279
2284 unsigned int subspaceDim(const std::string & prefix) const
2285 {
2286 if (_subspace_dim.count(prefix))
2287 return _subspace_dim.find(prefix)->second;
2288 else
2289 return 0;
2290 }
2291
2292 /*
2293 * Return reference to function warehouse.
2294 */
2296
2297 /*
2298 * Return a reference to the material warehouse of *all* Material objects.
2299 */
2301
2302 /*
2303 * Return a reference to the material warehouse of Material objects to be computed.
2304 */
2308
2309#ifdef MOOSE_KOKKOS_ENABLED
2310 /*
2311 * Return a reference to the material warehouse of Kokkos Material objects to be computed.
2312 */
2314#endif
2315
2323 std::shared_ptr<MaterialBase> getMaterial(std::string name,
2325 const THREAD_ID tid = 0,
2326 bool no_warn = false);
2327
2332 const THREAD_ID tid = 0,
2333 const MooseObject * object = nullptr) const;
2334
2335#ifdef MOOSE_KOKKOS_ENABLED
2340 const MooseObject * object = nullptr) const;
2341#endif
2342
2346 const std::set<const MooseObject *> &
2348
2349#ifdef MOOSE_KOKKOS_ENABLED
2353 const std::set<const MooseObject *> &
2355#endif
2356
2361
2370
2375
2381
2385 void setPreserveMatrixSparsityPattern(bool preserve);
2386
2392
2395
2402 bool acceptInvalidSolution() const;
2407
2412
2417
2420
2422
2428 const ExecFlagType & getCurrentExecuteOnFlag() const;
2431
2435 virtual void execute(const ExecFlagType & exec_type);
2436 virtual void executeAllObjects(const ExecFlagType & exec_type);
2437
2438 virtual Executor & getExecutor(const std::string & name) { return _app.getExecutor(name); }
2439
2443 virtual void computeUserObjects(const ExecFlagType & type, const Moose::AuxGroup & group);
2444
2448 virtual void computeUserObjectByName(const ExecFlagType & type,
2449 const Moose::AuxGroup & group,
2450 const std::string & name);
2451
2455 void needsPreviousNewtonIteration(bool state);
2456
2461 bool needsPreviousNewtonIteration() const;
2462
2470 const unsigned int solver_sys_num);
2471
2478 bool needsPreviousMultiAppFixedPointIterationSolution(const unsigned int solver_sys_num) const;
2479
2485
2493
2501 const unsigned int solver_sys_num);
2502
2509 bool needsPreviousMultiSystemFixedPointIterationSolution(const unsigned int solver_sys_num) const;
2510
2516
2524
2526
2529 std::vector<Real> _real_zero;
2530 std::vector<VariableValue> _scalar_zero;
2531 std::vector<VariableValue> _zero;
2532 std::vector<VariablePhiValue> _phi_zero;
2533 std::vector<MooseArray<ADReal>> _ad_zero;
2534 std::vector<VariableGradient> _grad_zero;
2535 std::vector<MooseArray<ADRealVectorValue>> _ad_grad_zero;
2536 std::vector<VariablePhiGradient> _grad_phi_zero;
2537 std::vector<VariableSecond> _second_zero;
2538 std::vector<MooseArray<ADRealTensorValue>> _ad_second_zero;
2539 std::vector<VariablePhiSecond> _second_phi_zero;
2540 std::vector<Point> _point_zero;
2541 std::vector<VectorVariableValue> _vector_zero;
2542 std::vector<VectorVariableCurl> _vector_curl_zero;
2544
2549
2553 void executeControls(const ExecFlagType & exec_type);
2554
2558 void executeSamplers(const ExecFlagType & exec_type);
2559
2563 virtual void updateActiveObjects();
2564
2571
2573
2577 bool hasJacobian() const;
2578
2583 bool constJacobian() const;
2584
2588 void addOutput(const std::string &, const std::string &, InputParameters &);
2589
2590 inline TheWarehouse & theWarehouse() const { return _app.theWarehouse(); }
2591
2595 void setSNESMFReuseBase(bool reuse, bool set_by_user)
2596 {
2598 }
2599
2604
2608 void skipExceptionCheck(bool skip_exception_check)
2609 {
2610 _skip_exception_check = skip_exception_check;
2611 }
2612
2617
2622
2623#if !PETSC_RELEASE_LESS_THAN(3, 12, 0)
2625#endif
2626
2628 virtual void setUDotRequested(const bool u_dot_requested) { _u_dot_requested = u_dot_requested; }
2629
2631 virtual void setUDotDotRequested(const bool u_dotdot_requested)
2632 {
2633 _u_dotdot_requested = u_dotdot_requested;
2634 }
2635
2637 virtual void setUDotOldRequested(const bool u_dot_old_requested)
2638 {
2639 _u_dot_old_requested = u_dot_old_requested;
2640 }
2641
2643 virtual void setUDotDotOldRequested(const bool u_dotdot_old_requested)
2644 {
2645 _u_dotdot_old_requested = u_dotdot_old_requested;
2646 }
2647
2649 virtual bool uDotRequested() { return _u_dot_requested; }
2650
2652 virtual bool uDotDotRequested() { return _u_dotdot_requested; }
2653
2655 virtual bool uDotOldRequested()
2656 {
2658 mooseError("FEProblemBase: When requesting old time derivative of solution, current time "
2659 "derivative of solution should also be stored. Please set `u_dot_requested` to "
2660 "true using setUDotRequested.");
2661
2662 return _u_dot_old_requested;
2663 }
2664
2666 virtual bool uDotDotOldRequested()
2667 {
2669 mooseError("FEProblemBase: When requesting old second time derivative of solution, current "
2670 "second time derivation of solution should also be stored. Please set "
2671 "`u_dotdot_requested` to true using setUDotDotRequested.");
2673 }
2674
2676 void haveADObjects(bool have_ad_objects) override;
2677
2678 // Whether or not we should solve this system
2679 bool shouldSolve() const { return _solve; }
2680
2686
2691
2695 virtual bool hasMortarCoupling() const { return _has_mortar; }
2696
2698 void computingNonlinearResid(bool computing_nonlinear_residual) final;
2699
2701 void setCurrentlyComputingResidual(bool currently_computing_residual) final;
2702
2706 void numGridSteps(unsigned int num_grid_steps) { _num_grid_steps = num_grid_steps; }
2707
2712 void uniformRefine();
2713
2715 void automaticScaling(bool automatic_scaling) override;
2716
2718
2721 template <typename T>
2722 static void objectSetupHelper(const std::vector<T *> & objects, const ExecFlagType & exec_flag);
2723 template <typename T>
2724 static void objectExecuteHelper(const std::vector<T *> & objects);
2726
2733 virtual void reinitElemFaceRef(const Elem * elem,
2734 unsigned int side,
2735 Real tolerance,
2736 const std::vector<Point> * const pts,
2737 const std::vector<Real> * const weights = nullptr,
2738 const THREAD_ID tid = 0) override;
2739
2746 virtual void reinitNeighborFaceRef(const Elem * neighbor_elem,
2747 unsigned int neighbor_side,
2748 Real tolerance,
2749 const std::vector<Point> * const pts,
2750 const std::vector<Real> * const weights = nullptr,
2751 const THREAD_ID tid = 0) override;
2752
2757
2766
2771 void fvBCsIntegrityCheck(bool fv_bcs_integrity_check);
2772
2782 std::vector<std::shared_ptr<MaterialBase>> & face_materials,
2783 std::vector<std::shared_ptr<MaterialBase>> & neighbor_materials,
2784 std::set<MooseVariableFieldBase *> & variables,
2785 const THREAD_ID tid);
2786
2793 void resizeMaterialData(Moose::MaterialDataType data_type, unsigned int nqp, const THREAD_ID tid);
2794
2795 bool haveDisplaced() const override final { return _displaced_problem.get(); }
2796
2798 bool hasLinearConvergenceObjects() const;
2802 void setNonlinearConvergenceNames(const std::vector<ConvergenceName> & convergence_names);
2806 void setLinearConvergenceNames(const std::vector<ConvergenceName> & convergence_names);
2810 void setMultiAppFixedPointConvergenceName(const ConvergenceName & convergence_name);
2814 void setSteadyStateConvergenceName(const ConvergenceName & convergence_name);
2815
2819 const std::vector<ConvergenceName> & getNonlinearConvergenceNames() const;
2823 const std::vector<ConvergenceName> & getLinearConvergenceNames() const;
2827 const ConvergenceName & getMultiAppFixedPointConvergenceName() const;
2831 const ConvergenceName & getSteadyStateConvergenceName() const;
2832
2836 void computingScalingJacobian(bool computing_scaling_jacobian)
2837 {
2838 _computing_scaling_jacobian = computing_scaling_jacobian;
2839 }
2840
2841 bool computingScalingJacobian() const override final { return _computing_scaling_jacobian; }
2842
2846 void computingScalingResidual(bool computing_scaling_residual)
2847 {
2848 _computing_scaling_residual = computing_scaling_residual;
2849 }
2850
2854 bool computingScalingResidual() const override final { return _computing_scaling_residual; }
2855
2861
2862 virtual std::size_t numNonlinearSystems() const override { return _num_nl_sys; }
2863
2864 virtual std::size_t numLinearSystems() const override { return _num_linear_sys; }
2865
2866 virtual std::size_t numSolverSystems() const override { return _num_nl_sys + _num_linear_sys; }
2867
2869 bool isSolverSystemNonlinear(const unsigned int sys_num) { return sys_num < _num_nl_sys; }
2870
2871 virtual unsigned int currentNlSysNum() const override;
2872
2873 virtual unsigned int currentLinearSysNum() const override;
2874
2878 virtual unsigned int nlSysNum(const NonlinearSystemName & nl_sys_name) const override;
2879
2883 unsigned int linearSysNum(const LinearSystemName & linear_sys_name) const override;
2884
2888 unsigned int solverSysNum(const SolverSystemName & solver_sys_name) const override;
2889
2894 unsigned int systemNumForVariable(const VariableName & variable_name) const;
2895
2900
2905
2910
2911 /*
2912 * Set the status of loop order of execution printing
2913 * @param print_exec set of execution flags to print on
2914 */
2915 void setExecutionPrinting(const ExecFlagEnum & print_exec) { _print_execution_on = print_exec; }
2916
2920 bool shouldPrintExecution(const THREAD_ID tid) const;
2925 void reinitMortarUserObjects(BoundaryID primary_boundary_id,
2926 BoundaryID secondary_boundary_id,
2927 bool displaced);
2928
2929 virtual const std::vector<VectorTag> & currentResidualVectorTags() const override;
2930
2942
2946 void setCurrentResidualVectorTags(const std::set<TagID> & vector_tags);
2947
2952
2957
2958 virtual void needFV() override { _have_fv = true; }
2959 virtual bool haveFV() const override { return _have_fv; }
2960
2961 virtual bool hasNonlocalCoupling() const override { return _has_nonlocal_coupling; }
2962
2967
2968 virtual void setCurrentLowerDElem(const Elem * const lower_d_elem, const THREAD_ID tid) override;
2969 virtual void setCurrentBoundaryID(BoundaryID bid, const THREAD_ID tid) override;
2970
2974 const std::vector<NonlinearSystemName> & getNonlinearSystemNames() const { return _nl_sys_names; }
2978 const std::vector<LinearSystemName> & getLinearSystemNames() const { return _linear_sys_names; }
2982 const std::vector<SolverSystemName> & getSolverSystemNames() const { return _solver_sys_names; }
2983
2984 virtual const libMesh::CouplingMatrix & nonlocalCouplingMatrix(const unsigned i) const override;
2985
2986 virtual bool checkNonlocalCouplingRequirement() const override;
2987
2989
2997
2999
3001
3002#ifdef MOOSE_KOKKOS_ENABLED
3006 bool hasKokkosObjects() const { return _has_kokkos_objects; }
3015 void addKokkosMeshInitializationHook(std::function<void()> function)
3016 {
3017 _kokkos_mesh_initialization_hooks.push_back(function);
3018 }
3019#endif
3020
3021protected:
3025 virtual void meshChanged() {}
3026
3028 void createTagVectors();
3029
3031 void createTagSolutions();
3032
3036 virtual void meshDisplaced();
3037
3041 void computeSystems(const ExecFlagType & type);
3042
3044
3045private:
3048
3060 void setResidualObjectParamsAndLog(const std::string & ro_name,
3061 const std::string & name,
3063 const unsigned int nl_sys_num,
3064 const std::string & base_name,
3065 bool & reinit_displaced);
3066
3074 void setAuxKernelParamsAndLog(const std::string & ak_name,
3075 const std::string & name,
3077 const std::string & base_name);
3078
3083
3084 TheWarehouse::Query getUOQuery(const std::string & system,
3085 const ExecFlagType & type,
3086 const Moose::AuxGroup & group) const;
3087
3088 void getUOExecutionGroups(TheWarehouse::Query & query, std::set<int> & execution_groups) const;
3089
3090protected:
3092
3094 std::optional<std::vector<ConvergenceName>> _nonlinear_convergence_names;
3096 std::optional<std::vector<ConvergenceName>> _linear_convergence_names;
3098 std::optional<ConvergenceName> _multiapp_fixed_point_convergence_name;
3100 std::optional<ConvergenceName> _steady_state_convergence_name;
3101
3102 std::set<TagID> _fe_vector_tags;
3103
3104 std::set<TagID> _fe_matrix_tags;
3105
3107 std::set<TagID> _linear_vector_tags;
3108
3110 std::set<TagID> _linear_matrix_tags;
3111
3113 const bool & _solve;
3114
3116 Real & _time;
3118 int & _t_step;
3119 Real & _dt;
3120 Real & _dt_old;
3121
3128
3130 const std::vector<LinearSystemName> _linear_sys_names;
3131
3133 const std::size_t _num_linear_sys;
3134
3136 std::vector<std::shared_ptr<LinearSystem>> _linear_systems;
3137
3139 std::map<LinearSystemName, unsigned int> _linear_sys_name_to_num;
3140
3143
3146
3148 const std::vector<NonlinearSystemName> _nl_sys_names;
3149
3151 const std::size_t _num_nl_sys;
3152
3154 std::vector<std::shared_ptr<NonlinearSystemBase>> _nl;
3155
3157 std::map<NonlinearSystemName, unsigned int> _nl_sys_name_to_num;
3158
3161
3164
3166 std::vector<std::shared_ptr<SolverSystem>> _solver_systems;
3167
3169 std::map<SolverVariableName, unsigned int> _solver_var_to_sys_num;
3170
3172 std::map<SolverSystemName, unsigned int> _solver_sys_name_to_num;
3173
3175 std::vector<SolverSystemName> _solver_sys_names;
3176
3178 std::shared_ptr<AuxiliarySystem> _aux;
3179
3181 std::vector<std::unique_ptr<libMesh::CouplingMatrix>> _cm;
3182
3183#ifdef MOOSE_KOKKOS_ENABLED
3188#endif
3189
3191 std::map<std::string, unsigned int> _subspace_dim;
3192
3195 std::vector<std::vector<std::unique_ptr<Assembly>>> _assembly;
3196
3197#ifdef MOOSE_KOKKOS_ENABLED
3199#endif
3200
3205
3208
3209#ifdef MOOSE_KOKKOS_ENABLED
3211#endif
3212
3215
3218
3221
3226 ScalarInitialConditionWarehouse _scalar_ics; // use base b/c of setup methods
3228
3229 // material properties
3234
3235#ifdef MOOSE_KOKKOS_ENABLED
3239#endif
3241 // Material Warehouses
3242 MaterialWarehouse _materials; // regular materials
3244 MaterialWarehouse _discrete_materials; // Materials that the user must compute
3245 MaterialWarehouse _all_materials; // All materials for error checking and MaterialData storage
3246
3247#ifdef MOOSE_KOKKOS_ENABLED
3249#endif
3251
3253 // Indicator Warehouses
3257
3258 // Marker Warehouse
3260
3261 // Helper class to access Reporter object values
3263
3266
3269
3272
3275
3278
3281
3283 std::map<std::string, std::unique_ptr<RandomData>> _random_data_objects;
3284
3286 std::vector<std::unordered_map<SubdomainID, bool>> _block_mat_side_cache;
3287
3289 std::vector<std::unordered_map<BoundaryID, bool>> _bnd_mat_side_cache;
3290
3292 std::vector<std::unordered_map<BoundaryID, bool>> _interface_mat_side_cache;
3293
3295 std::vector<MeshChangedInterface *> _notify_when_mesh_changes;
3296
3298 std::vector<MeshDisplacedInterface *> _notify_when_mesh_displaces;
3299
3301 bool duplicateVariableCheck(const std::string & var_name,
3302 const libMesh::FEType & type,
3303 bool is_aux,
3304 const std::set<SubdomainID> * const active_subdomains);
3305
3307
3308#ifdef MOOSE_KOKKOS_ENABLED
3310#endif
3311
3314
3315 void checkUserObjects();
3316
3323 const std::map<SubdomainID, std::vector<std::shared_ptr<MaterialBase>>> & materials_map);
3324
3327
3333 void reinitBecauseOfGhostingOrNewGeomObjects(bool mortar_changed = false);
3334
3342 const std::string & object_name,
3343 const std::string & var_param_name = "variable");
3344
3345#ifdef LIBMESH_ENABLE_AMR
3347 unsigned int _cycles_completed;
3348#endif
3349
3351 std::shared_ptr<XFEMInterface> _xfem;
3352
3353 // Displaced mesh /////
3355 std::shared_ptr<DisplacedProblem> _displaced_problem;
3357 std::unique_ptr<MortarInterfaceWarehouse> _mortar_data;
3358
3365
3368
3371
3374
3377
3380
3383
3386
3389
3392
3395
3406
3410
3411 std::vector<std::vector<const MooseVariableFEBase *>> _uo_jacobian_moose_vars;
3412
3414 std::vector<unsigned char> _has_active_material_properties;
3415
3416 std::vector<SolverParams> _solver_params;
3417
3420 std::vector<SubdomainName> _kernel_coverage_blocks;
3421
3425
3429
3432
3435 std::vector<SubdomainName> _material_coverage_blocks;
3436
3439
3442
3445
3446#ifndef NDEBUG
3449#endif
3450
3452 unsigned int _max_qps;
3453
3456
3459
3462
3465
3468
3471
3474
3477
3480
3483
3486#if !PETSC_RELEASE_LESS_THAN(3, 12, 0)
3488#endif
3489
3492
3493 std::shared_ptr<LineSearch> _line_search;
3494
3495 std::unique_ptr<libMesh::ConstElemRange> _evaluable_local_elem_range;
3496 std::unique_ptr<libMesh::ConstElemRange> _nl_evaluable_local_elem_range;
3497 std::unique_ptr<libMesh::ConstElemRange> _aux_evaluable_local_elem_range;
3498
3499 std::unique_ptr<libMesh::ConstElemRange> _current_algebraic_elem_range;
3500 std::unique_ptr<libMesh::ConstNodeRange> _current_algebraic_node_range;
3501 std::unique_ptr<ConstBndNodeRange> _current_algebraic_bnd_node_range;
3502
3506
3507 // loop state during projection of initial conditions
3508 unsigned short _current_ic_state;
3509
3513
3514private:
3519 void handleException(const std::string & calling_method);
3520
3525 std::vector<MortarUserObject *>
3526 getMortarUserObjects(BoundaryID primary_boundary_id,
3527 BoundaryID secondary_boundary_id,
3528 bool displaced,
3529 const std::vector<MortarUserObject *> & mortar_uo_superset);
3530
3535 std::vector<MortarUserObject *> getMortarUserObjects(BoundaryID primary_boundary_id,
3536 BoundaryID secondary_boundary_id,
3537 bool displaced);
3538
3548 virtual std::pair<bool, unsigned int>
3549 determineSolverSystem(const std::string & var_name,
3550 bool error_if_not_found = false) const override;
3551
3558 void checkICRestartError(const std::string & ic_name,
3559 const std::string & name,
3560 const VariableName & var_name);
3561
3562 /*
3563 * Test if stateful property redistribution is expected to be
3564 * necessary, and set it up if so.
3565 */
3566 void addAnyRedistributers();
3567
3568 void updateMaxQps();
3569
3570 void joinAndFinalize(TheWarehouse::Query query, bool isgen = false);
3571
3572#ifdef MOOSE_KOKKOS_ENABLED
3573 void kokkosJoinAndFinalize(const std::vector<Moose::Kokkos::UserObject *> & userobjs);
3574#endif
3575
3579 virtual void resetState();
3580
3581 // Parameters handling Jacobian sparsity pattern behavior
3593
3594 const bool _force_restart;
3601
3604
3607
3610
3613
3616
3619
3620 friend class AuxiliarySystem;
3622 friend class MooseEigenSystem;
3623 friend class Resurrector;
3624 friend class Restartable;
3625 friend class DisplacedProblem;
3626
3629
3631 unsigned int _num_grid_steps;
3632
3636
3639
3642
3645
3648
3651
3655 std::vector<VectorTag> _current_residual_vector_tags;
3656
3658 bool _have_fv = false;
3659
3663
3665 std::vector<libMesh::CouplingMatrix> _nonlocal_cm;
3666
3669
3670#ifdef MOOSE_KOKKOS_ENABLED
3673
3676
3678 std::vector<std::function<void()>> _kokkos_mesh_initialization_hooks;
3679#endif
3680
3681 friend void Moose::PetscSupport::setSinglePetscOption(const std::string & name,
3682 const std::string & value,
3683 FEProblemBase * const problem);
3684};
3685
3687
3688template <typename T>
3689void
3691{
3693}
3694
3695template <typename T>
3696void
3697FEProblemBase::objectSetupHelper(const std::vector<T *> & objects, const ExecFlagType & exec_flag)
3698{
3699 if (exec_flag == EXEC_INITIAL)
3700 {
3701 for (T * obj_ptr : objects)
3702 obj_ptr->initialSetup();
3703 }
3704
3705 else if (exec_flag == EXEC_TIMESTEP_BEGIN)
3706 {
3707 for (const auto obj_ptr : objects)
3708 obj_ptr->timestepSetup();
3709 }
3710 else if (exec_flag == EXEC_SUBDOMAIN)
3711 {
3712 for (const auto obj_ptr : objects)
3713 obj_ptr->subdomainSetup();
3714 }
3715
3716 else if (exec_flag == EXEC_NONLINEAR)
3717 {
3718 for (const auto obj_ptr : objects)
3719 obj_ptr->jacobianSetup();
3720 }
3721
3722 else if (exec_flag == EXEC_LINEAR)
3723 {
3724 for (const auto obj_ptr : objects)
3725 obj_ptr->residualSetup();
3726 }
3727}
3728
3729template <typename T>
3730void
3731FEProblemBase::objectExecuteHelper(const std::vector<T *> & objects)
3732{
3733 for (T * obj_ptr : objects)
3734 obj_ptr->execute();
3735}
3736
3737template <typename T>
3738std::vector<std::shared_ptr<T>>
3739FEProblemBase::addObject(const std::string & type,
3740 const std::string & name,
3742 const bool threaded,
3743 const std::string & var_param_name)
3744{
3745 parallel_object_only();
3746
3747 logAdd(MooseUtils::prettyCppType<T>(), name, type, parameters);
3748 // Add the _subproblem and _sys parameters depending on use_displaced_mesh
3749 addObjectParamsHelper(parameters, name, var_param_name);
3750
3751 const auto n_threads = threaded ? libMesh::n_threads() : 1;
3752 std::vector<std::shared_ptr<T>> objects(n_threads);
3753 for (THREAD_ID tid = 0; tid < n_threads; ++tid)
3754 {
3755 std::shared_ptr<T> obj = _factory.create<T>(type, name, parameters, tid);
3756 theWarehouse().add(obj);
3757 objects[tid] = std::move(obj);
3758 }
3759
3760 return objects;
3761}
3762
3763inline NonlinearSystemBase &
3764FEProblemBase::getNonlinearSystemBase(const unsigned int sys_num)
3765{
3766 mooseAssert(sys_num < _nl.size(), "System number greater than the number of nonlinear systems");
3767 return *_nl[sys_num];
3768}
3769
3770inline const NonlinearSystemBase &
3771FEProblemBase::getNonlinearSystemBase(const unsigned int sys_num) const
3772{
3773 mooseAssert(sys_num < _nl.size(), "System number greater than the number of nonlinear systems");
3774 return *_nl[sys_num];
3775}
3776
3777inline SolverSystem &
3778FEProblemBase::getSolverSystem(const unsigned int sys_num)
3779{
3780 mooseAssert(sys_num < _solver_systems.size(),
3781 "System number greater than the number of solver systems");
3782 return *_solver_systems[sys_num];
3783}
3784
3785inline const SolverSystem &
3786FEProblemBase::getSolverSystem(const unsigned int sys_num) const
3787{
3788 mooseAssert(sys_num < _solver_systems.size(),
3789 "System number greater than the number of solver systems");
3790 return *_solver_systems[sys_num];
3791}
3792
3793inline NonlinearSystemBase &
3795{
3796 mooseAssert(_current_nl_sys, "The nonlinear system is not currently set");
3797 return *_current_nl_sys;
3798}
3799
3800inline const NonlinearSystemBase &
3802{
3803 mooseAssert(_current_nl_sys, "The nonlinear system is not currently set");
3804 return *_current_nl_sys;
3805}
3806
3807inline LinearSystem &
3808FEProblemBase::getLinearSystem(const unsigned int sys_num)
3809{
3810 mooseAssert(sys_num < _linear_systems.size(),
3811 "System number greater than the number of linear systems");
3812 return *_linear_systems[sys_num];
3813}
3814
3815inline const LinearSystem &
3816FEProblemBase::getLinearSystem(const unsigned int sys_num) const
3817{
3818 mooseAssert(sys_num < _linear_systems.size(),
3819 "System number greater than the number of linear systems");
3820 return *_linear_systems[sys_num];
3821}
3822
3823inline LinearSystem &
3825{
3826 mooseAssert(_current_linear_sys, "The linear system is not currently set");
3827 return *_current_linear_sys;
3828}
3829
3830inline const LinearSystem &
3832{
3833 mooseAssert(_current_linear_sys, "The linear system is not currently set");
3834 return *_current_linear_sys;
3835}
3836
3837inline Assembly &
3838FEProblemBase::assembly(const THREAD_ID tid, const unsigned int sys_num)
3839{
3840 mooseAssert(tid < _assembly.size(), "Assembly objects not initialized");
3841 mooseAssert(sys_num < _assembly[tid].size(),
3842 "System number larger than the assembly container size");
3843 return *_assembly[tid][sys_num];
3844}
3845
3846inline const Assembly &
3847FEProblemBase::assembly(const THREAD_ID tid, const unsigned int sys_num) const
3848{
3849 mooseAssert(tid < _assembly.size(), "Assembly objects not initialized");
3850 mooseAssert(sys_num < _assembly[tid].size(),
3851 "System number larger than the assembly container size");
3852 return *_assembly[tid][sys_num];
3853}
3854
3855inline const libMesh::CouplingMatrix *
3856FEProblemBase::couplingMatrix(const unsigned int i) const
3857{
3858 return _cm[i].get();
3859}
3860
3861inline void
3862FEProblemBase::fvBCsIntegrityCheck(const bool fv_bcs_integrity_check)
3863{
3865 // the user has requested that we don't check integrity so we will honor that
3866 return;
3867
3868 _fv_bcs_integrity_check = fv_bcs_integrity_check;
3869}
3870
3871inline const std::vector<VectorTag> &
3876
3877inline void
3878FEProblemBase::setCurrentResidualVectorTags(const std::set<TagID> & vector_tags)
3879{
3881}
3882
3883inline void
3888
3889#ifdef MOOSE_KOKKOS_ENABLED
3890template <typename T>
3891T &
3893{
3894 if (!hasKokkosFunction(name))
3895 {
3896 // If we didn't find a function, it might be a default function, attempt to construct one now
3897 std::istringstream ss(name);
3898 Real real_value;
3899
3900 // First see if it's just a constant. If it is, build a ConstantFunction
3901 if (ss >> real_value && ss.eof())
3902 {
3903 InputParameters params = _factory.getValidParams("KokkosConstantFunction");
3904 params.set<Real>("value") = real_value;
3905 addKokkosFunction("KokkosConstantFunction", ss.str(), params);
3906 }
3907
3908 // Try once more
3909 if (!hasKokkosFunction(name))
3910 mooseError("Unable to find Kokkos function '" + name, "'");
3911 }
3912
3913 auto * const ret = dynamic_cast<T *>(_kokkos_functions.getActiveObject(name).get());
3914 if (!ret)
3915 mooseError("No Kokkos function named '", name, "' of appropriate type");
3916
3917 return *ret;
3918}
3919#endif
boundary_id_type BoundaryID
MooseLinearConvergenceReason
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
void mooseDeprecated(Args &&... args)
Emit a deprecated code/feature message with the given stringified, concatenated args.
Definition MooseError.h:363
unsigned int TagID
Definition MooseTypes.h:238
Real PostprocessorValue
various MOOSE typedefs
Definition MooseTypes.h:230
unsigned int THREAD_ID
Definition MooseTypes.h:237
std::vector< Real > VectorPostprocessorValue
Definition MooseTypes.h:231
const ExecFlagType EXEC_SUBDOMAIN
Definition Moose.C:52
const ExecFlagType EXEC_TIMESTEP_BEGIN
Definition Moose.C:37
const ExecFlagType EXEC_INITIAL
Definition Moose.C:30
const ExecFlagType EXEC_LINEAR
Definition Moose.C:31
const ExecFlagType EXEC_NONLINEAR
Definition Moose.C:33
std::shared_ptr< DisplacedProblem > displaced_problem
char ** blocks
Takes care of everything related to mesh adaptivity.
Definition Adaptivity.h:64
unsigned int getInitialSteps() const
Pull out the number of initial steps previously set by calling init()
Definition Adaptivity.h:112
Keeps track of stuff related to assembling.
Definition Assembly.h:110
This class is a container/interface for the objects involved in automatic generation of mortar spaces...
A system that holds auxiliary variables.
Base class for Control objects.
Definition Control.h:44
Base class for convergence criteria.
Definition Convergence.h:26
Crank-Nicolson time integrator.
All Distributions should inherit from this class.
A MultiMooseEnum object to hold "execute_on" flags.
A class for storing MooseObjects based on execution flag.
The Executor class directs the execution flow of simulations.
Definition Executor.h:27
CreateTaggedMatrixKey(const CreateTaggedMatrixKey &)
Class that is used as a parameter to set/clearCurrentResidualVectorTags that allows only blessed clas...
CurrentResidualVectorTagsKey(const CurrentResidualVectorTagsKey &)
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
virtual void addJacobianScalar(const THREAD_ID tid=0)
virtual bool reinitDirac(const Elem *elem, const THREAD_ID tid) override
Returns true if the Problem has Dirac kernels it needs to compute on elem.
virtual void addJacobianLowerD(const THREAD_ID tid) override
const FVInterpolationMethod & getFVInterpolationMethod(const InterpolationMethodName &name, const THREAD_ID tid=0) const
Retrieve an FV interpolation method.
virtual void addKokkosAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
MaterialData & getMaterialData(Moose::MaterialDataType type, const THREAD_ID tid=0, const MooseObject *object=nullptr) const
std::unique_ptr< libMesh::ConstElemRange > _nl_evaluable_local_elem_range
void prepareKokkosMaterials(const std::unordered_set< unsigned int > &consumer_needed_mat_props)
bool _previous_nl_solution_required
Indicates we need to save the previous NL iteration variable values.
virtual void addKokkosBoundaryCondition(const std::string &bc_name, const std::string &name, InputParameters &parameters)
std::shared_ptr< AuxiliarySystem > _aux
The auxiliary system.
std::vector< SubdomainName > _material_coverage_blocks
bool _have_fv
Whether we are performing some calculations with finite volume discretizations.
bool hasLinearConvergenceObjects() const
Whether we have linear convergence objects.
bool hasPostprocessor(const std::string &name) const
Deprecated.
std::vector< VariablePhiSecond > _second_phi_zero
unsigned int subspaceDim(const std::string &prefix) const
Dimension of the subspace spanned by vectors with a given prefix.
MooseObjectWarehouse< IntegratedBCBase > _nonlocal_integrated_bcs
nonlocal integrated_bcs
virtual void clearDiracInfo() override
Gets called before Dirac Kernels are asked to add the points they are supposed to be evaluated in.
MaterialWarehouse _materials
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)
PetscOptions & petscOptionsDatabase()
LinearSystem * _current_linear_sys
The current linear system that we are solving.
std::set< TagID > _fe_vector_tags
std::vector< VariablePhiGradient > _grad_phi_zero
virtual void computeJacobian(const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian, const unsigned int nl_sys_num)
Form a Jacobian matrix with the default tag (system).
void advanceMultiApps(ExecFlagType type)
Deprecated method; use finishMultiAppStep and/or incrementMultiAppTStep depending on your purpose.
ReporterData & getReporterData(ReporterData::WriteKey)
Provides non-const access the ReporterData object that is used to store reporter values.
bool verboseMultiApps() const
Whether or not to use verbose printing for MultiApps.
virtual void computeNearNullSpace(libMesh::NonlinearImplicitSystem &sys, std::vector< NumericVector< libMesh::Number > * > &sp)
Moose::Kokkos::MaterialPropertyStorage & getKokkosBndMaterialPropertyStorage()
const bool _using_default_nl
Boolean to check if we have the default nonlinear system.
void numGridSteps(unsigned int num_grid_steps)
Set the number of steps in a grid sequences.
ExecuteMooseObjectWarehouse< Transfer > _between_multi_app_transfers
Transfers executed just before MultiApps to transfer data between them.
bool _trust_user_coupling_matrix
Whether to trust the user coupling matrix no matter what.
virtual Sampler & getSampler(const std::string &name, const THREAD_ID tid=0)
virtual void reinitNodesNeighbor(const std::vector< dof_id_type > &nodes, const THREAD_ID tid) override
virtual void reinitElemPhys(const Elem *elem, const std::vector< Point > &phys_points_in_elem, const THREAD_ID tid) override
virtual void init() override
const MortarInterfaceWarehouse & mortarData() const
Returns the mortar data object.
virtual const std::vector< std::shared_ptr< Convergence > > & getConvergenceObjects(const THREAD_ID tid=0) const
Gets the Convergence objects.
SolverSystem * _current_solver_sys
The current solver system.
void needSolutionState(unsigned int oldest_needed, Moose::SolutionIterationType iteration_type)
Declare that we need up to old (1) or older (2) solution states for a given type of iteration.
virtual void cacheResidual(const THREAD_ID tid) override
void checkDependMaterialsHelper(const std::map< SubdomainID, std::vector< std::shared_ptr< MaterialBase > > > &materials_map)
Helper method for checking Material object dependency.
virtual void addMaterialHelper(std::vector< MaterialWarehouse * > warehouse, const std::string &material_name, const std::string &name, InputParameters &parameters)
const std::vector< ConvergenceName > & getNonlinearConvergenceNames() const
Gets the nonlinear system convergence object name(s).
void resizeMaterialData(Moose::MaterialDataType data_type, unsigned int nqp, const THREAD_ID tid)
Resize material data.
bool needsPreviousMultiAppFixedPointIterationAuxiliary() const
Check to see whether we need to compute the variable values of the previous multiapp fixed point iter...
virtual void checkProblemIntegrity()
Method called to perform a series of sanity checks before a simulation is run.
void setCouplingMatrix(std::unique_ptr< libMesh::CouplingMatrix > cm, const unsigned int nl_sys_num)
Set custom coupling matrix.
unsigned int getMaxQps() const
void setLinearConvergenceNames(const std::vector< ConvergenceName > &convergence_names)
Sets the linear convergence object name(s) if there is one.
std::string _exception_message
The error message to go with an exception.
std::vector< MooseArray< ADRealVectorValue > > _ad_grad_zero
const bool _allow_invalid_solution
bool hasJacobian() const
Returns _has_jacobian.
virtual void onTimestepEnd() override
const bool _skip_nl_system_check
std::vector< std::unordered_map< SubdomainID, bool > > _block_mat_side_cache
Cache for calculating materials on side.
std::vector< SolverParams > _solver_params
virtual NonlinearSystem & getNonlinearSystem(const unsigned int sys_num)
ScalarInitialConditionWarehouse _scalar_ics
virtual void addJacobianNeighbor(const THREAD_ID tid) override
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.
void createTagVectors()
Create extra tagged vectors and matrices.
bool hasKokkosUserObject(const std::string &name) const
Check if there if a Kokkos user object of given name.
virtual void addResidualLower(const THREAD_ID tid) override
virtual void lineSearch()
execute MOOSE line search
bool _verbose_multiapps
Whether or not to be verbose with multiapps.
TheWarehouse::Query getUOQuery(const std::string &system, const ExecFlagType &type, const Moose::AuxGroup &group) const
virtual void reinitNeighborPhys(const Elem *neighbor, unsigned int neighbor_side, const std::vector< Point > &physical_points, const THREAD_ID tid) override
virtual void addPredictor(const std::string &type, const std::string &name, InputParameters &parameters)
bool _computing_scaling_jacobian
Flag used to indicate whether we are computing the scaling Jacobian.
const VectorPostprocessor & getVectorPostprocessorObjectByName(const std::string &object_name, const THREAD_ID tid=0) const
Return the VPP object given the name.
void clearCurrentJacobianMatrixTags()
Clear the current Jacobian matrix tag data structure ... if someone creates it.
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 setActiveScalarVariableCoupleableVectorTags(std::set< TagID > &vtags, const THREAD_ID tid) override
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 & _solve
Whether or not to actually solve the nonlinear system.
bool _parallel_barrier_messaging
Whether or not information about how many transfers have completed is printed.
virtual bool hasScalarVariable(const std::string &var_name) const override
Returns a Boolean indicating whether any system contains a variable with the name provided.
T & getUserObject(const std::string &name, unsigned int tid=0) const
Get the user object by its name.
const MaterialWarehouse & getInterfaceMaterialsWarehouse() const
void skipNextForwardSolutionCopyToOld()
Prevents the copy of the solution vector to the old solution vector in each system.
MaterialWarehouse _interface_materials
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().
const Postprocessor & getPostprocessorObjectByName(const PostprocessorName &object_name, const THREAD_ID tid=0) const
Return the Postprocessor object registered under the supplied object name.
const bool _identify_variable_groups_in_nl
Whether to identify variable groups in nonlinear systems. This affects dof ordering.
void reportMooseObjectDependency(MooseObject *a, MooseObject *b)
Register a MOOSE object dependency so we can either order operations properly or report when we canno...
void checkDisplacementOrders()
Verify that SECOND order mesh uses SECOND order displacements.
std::unique_ptr< MortarInterfaceWarehouse > _mortar_data
void customSetup(const ExecFlagType &exec_type) override
MaterialData & getKokkosMaterialData(Moose::MaterialDataType type, const MooseObject *object=nullptr) const
virtual void computeResidualTags(const std::set< TagID > &tags)
Form multiple residual vectors and each is associated with one tag.
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...
bool _has_dampers
Whether or not this system has any Dampers associated with it.
virtual bool hasException()
Whether or not an exception has occurred.
virtual void computeUserObjects(const ExecFlagType &type, const Moose::AuxGroup &group)
Call compute methods on UserObjects.
std::shared_ptr< MultiApp > getMultiApp(const std::string &multi_app_name) const
Get a MultiApp object by name.
bool _checking_uo_aux_state
Flag used to indicate whether we are doing the uo/aux state check in execute.
virtual bool hasMortarCoupling() const
Whether the simulation has mortar coupling.
bool needInternalNeighborSideMaterial(SubdomainID subdomain_id, const THREAD_ID tid)
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.
bool hasSetSteadyStateConvergenceName() const
Returns true if the problem has set the steady-state detection convergence name.
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters &parameters)
const MaterialPropertyStorage & getMaterialPropertyStorage()
Return a reference to the material property storage.
virtual bool hasDistribution(const std::string &name) const
virtual std::size_t numLinearSystems() const override
void createTagMatrices(CreateTaggedMatrixKey)
bool hasFVInterpolationMethod(const InterpolationMethodName &name) const
Check if an FV interpolation method with a given name exists.
static void objectExecuteHelper(const std::vector< T * > &objects)
virtual bool haveFV() const override
returns true if this problem includes/needs finite volume functionality.
bool _computing_scaling_residual
Flag used to indicate whether we are computing the scaling Residual.
Moose::Kokkos::MaterialPropertyStorage & _kokkos_neighbor_material_props
libMesh::Order getMaxScalarOrder() const
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
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.
void notifyWhenMeshDisplaces(MeshDisplacedInterface *mdi)
Register an object that derives from MeshDisplacedInterface to be notified when the displaced mesh ge...
void jacobianSetup() override
virtual bool updateMeshXFEM()
Update the mesh due to changing XFEM cuts.
virtual void prepareFaceShapes(unsigned int var, const THREAD_ID tid) override
virtual void resetState()
Reset state of this object in preparation for the next evaluation.
virtual unsigned int currentLinearSysNum() const override
bool areCoupled(const unsigned int ivar, const unsigned int jvar, const unsigned int nl_sys_num) const
virtual void addResidual(const THREAD_ID tid) override
void setNeedToAddDefaultNonlinearConvergence()
Sets _need_to_add_default_nonlinear_convergence to true.
virtual void addInterfaceMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
MortarInterfaceWarehouse & mortarData()
virtual MooseVariableScalar & getScalarVariable(const THREAD_ID tid, const std::string &var_name) override
Returns the scalar variable reference from whichever system contains it.
MooseObjectWarehouse< KernelBase > _nonlocal_kernels
nonlocal kernels
ReporterData _reporter_data
const ConvergenceName & getSteadyStateConvergenceName() const
Gets the steady-state detection convergence object name.
std::vector< VariableGradient > _grad_zero
virtual void addConvergence(const std::string &type, const std::string &name, InputParameters &parameters)
Adds a Convergence object.
void setKernelCoverageCheck(CoverageCheckMode mode)
Set flag to indicate whether kernel coverage checks should be performed.
virtual libMesh::EquationSystems & es() override
bool needInterfaceMaterialOnSide(BoundaryID bnd_id, const THREAD_ID tid)
void setCurrentAlgebraicNodeRange(libMesh::ConstNodeRange *range)
ExecuteMooseObjectWarehouse< MultiApp > _multi_apps
MultiApp Warehouse.
std::vector< bool > _previous_multisystem_fp_nl_solution_required
Indicates we need to save the previous multi-system fixed-point iteration solver variable values.
const FVFaceInterpolationMethod & getFVFaceInterpolationMethod(const InterpolationMethodName &name, const THREAD_ID tid=0) const
Retrieve a scalar face interpolation method.
virtual void setCurrentBoundaryID(BoundaryID bid, const THREAD_ID tid) override
sets the current boundary ID in assembly
virtual void addLineSearch(const InputParameters &)
add a MOOSE line search
static void objectSetupHelper(const std::vector< T * > &objects, const ExecFlagType &exec_flag)
Helpers for calling the necessary setup/execute functions for the supplied objects.
bool _need_to_add_default_nonlinear_convergence
Flag that the problem needs to add the default nonlinear convergence.
virtual void addResidualScalar(const THREAD_ID tid=0)
std::shared_ptr< XFEMInterface > getXFEM()
Get a pointer to the XFEM controller object.
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...
const bool _boundary_restricted_node_integrity_check
whether to perform checking of boundary restricted nodal object variable dependencies,...
virtual void addHDGKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
std::shared_ptr< LineSearch > _line_search
virtual bool uDotRequested()
Get boolean flag to check whether solution time derivative needs to be stored.
bool restoreOriginalNonzeroPattern() const
virtual bool checkResidualForNans() const override
Whether to check residual for NaN/Inf values.
Moose::Kokkos::Array< Moose::Kokkos::System > & getKokkosSystems()
Get the Kokkos System array (always populated when any Kokkos object exists)
virtual void prepareShapes(unsigned int var, const THREAD_ID tid) override
std::vector< VariableSecond > _second_zero
virtual void addCachedResidual(const THREAD_ID tid) override
AuxiliarySystem & getAuxiliarySystem()
MaterialPropertyStorage & _material_props
void trustUserCouplingMatrix()
Whether to trust the user coupling matrix even if we want to do things like be paranoid and create a ...
void joinAndFinalize(TheWarehouse::Query query, bool isgen=false)
void setAxisymmetricCoordAxis(const MooseEnum &rz_coord_axis)
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
const MaterialPropertyStorage & getNeighborMaterialPropertyStorage()
void execTransfers(ExecFlagType type)
Execute the Transfers associated with the ExecFlagType.
virtual void neighborSubdomainSetup(SubdomainID subdomain, const THREAD_ID tid)
virtual const libMesh::CouplingMatrix & nonlocalCouplingMatrix(const unsigned i) const override
const RestartableEquationSystems & getRestartableEquationSystems() const
Get the RestartableEquationSystems object.
void setNonlinearConvergenceNames(const std::vector< ConvergenceName > &convergence_names)
Sets the nonlinear convergence object name(s) if there is one.
bool haveXFEM()
Find out whether the current analysis is using XFEM.
virtual std::size_t numSolverSystems() const override
bool _needs_old_newton_iter
Indicates that we need to compute variable values for previous Newton iteration.
bool needsPreviousNewtonIteration() const
Check to see whether we need to compute the variable values of the previous Newton iterate.
bool _reinit_displaced_neighbor
Whether to call DisplacedProblem::reinitNeighbor when this->reinitNeighbor is called.
virtual const MooseMesh & mesh() const override
bool & petscOptionsInserted()
If PETSc options are already inserted.
virtual void cacheJacobianNeighbor(const THREAD_ID tid) override
virtual void addResidualNeighbor(const THREAD_ID tid) override
virtual const SystemBase & systemBaseAuxiliary() const override
Return the auxiliary system object as a base class reference.
bool immediatelyPrintInvalidSolution() const
Whether or not the solution invalid warnings are printed out immediately.
std::vector< libMesh::CouplingMatrix > _nonlocal_cm
nonlocal coupling matrix
virtual void setUDotOldRequested(const bool u_dot_old_requested)
Set boolean flag to true to store old solution time derivative.
unsigned int systemNumForVariable(const VariableName &variable_name) const
virtual void sizeZeroes(unsigned int size, const THREAD_ID tid)
MaterialPropertyStorage & _neighbor_material_props
virtual void addCachedJacobian(const THREAD_ID tid) override
virtual void reinitElemFace(const Elem *elem, unsigned int side, const THREAD_ID tid) override
Moose::Kokkos::System & getKokkosSystem(const unsigned int sys_num)
Get the Kokkos System of a specified number.
virtual const SystemBase & systemBaseLinear(unsigned int sys_num) const override
Get a constant base class reference to a linear system.
virtual void addGhostedElem(dof_id_type elem_id) override
Will make sure that all dofs connected to elem_id are ghosted to this processor.
MooseMesh & _mesh
virtual void reinitOffDiagScalars(const THREAD_ID tid) override
void setIgnoreZerosInJacobian(bool state)
Set whether the zeros in the Jacobian should be dropped from the sparsity pattern.
virtual bool hasKokkosFunction(const std::string &name) const
Get whether a Kokkos function exists.
const Moose::Kokkos::Array< Moose::Kokkos::FESystem > & getKokkosFESystems() const
virtual bool shouldUpdateSolution()
Check to see whether the problem should update the solution.
void setMaterialCoverageCheck(bool flag)
Set flag to indicate whether material coverage checks should be performed.
const MaterialPropertyRegistry & getMaterialPropertyRegistry() const
virtual void setException(const std::string &message)
Set an exception, which is stored at this point by toggling a member variable in this class,...
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & nonlocalCouplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num)
virtual void addTimeIntegrator(const std::string &type, const std::string &name, InputParameters &parameters)
virtual std::size_t numNonlinearSystems() const override
unsigned short getCurrentICState()
Retrieves the current initial condition state.
std::vector< std::shared_ptr< LinearSystem > > _linear_systems
The vector of linear systems.
ExecuteMooseObjectWarehouse< Transfer > _to_multi_app_transfers
Transfers executed just before MultiApps to transfer data to them.
const Moose::Kokkos::Assembly & kokkosAssembly() const
std::optional< ConvergenceName > _multiapp_fixed_point_convergence_name
MultiApp fixed point convergence name.
void addAnyRedistributers()
void initElementStatefulProps(const libMesh::ConstElemRange &elem_range, const bool threaded)
Initialize stateful properties for elements in a specific elem_range This is needed when elements/bou...
virtual void addLinearFVKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
virtual bool uDotOldRequested()
Get boolean flag to check whether old solution time derivative needs to be stored.
ExecuteMooseObjectWarehouse< Transfer > _transfers
Normal Transfers.
virtual const std::vector< VectorTag > & currentResidualVectorTags() const override
Return the residual vector tags we are currently computing.
void setRestartFile(const std::string &file_name)
Communicate to the Resurector the name of the restart filer.
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.
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.
const MooseObjectWarehouse< Indicator > & getIndicatorWarehouse()
Return indicator/marker storage.
virtual void updateActiveObjects()
Update the active objects in the warehouses.
void reinitKokkosMaterials()
virtual void addMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
void setMaterialCoverageCheck(CoverageCheckMode mode)
Set flag to indicate whether material coverage checks should be performed.
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.
void computeSystems(const ExecFlagType &type)
Do generic system computations.
void incrementMultiAppTStep(ExecFlagType type)
Advance the MultiApps t_step (incrementStepOrReject) associated with the ExecFlagType.
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.
std::unique_ptr< libMesh::ConstElemRange > _current_algebraic_elem_range
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.
const MooseObjectWarehouse< InternalSideIndicatorBase > & getInternalSideIndicatorWarehouse()
virtual void clearActiveFEVariableCoupleableVectorTags(const THREAD_ID tid) override
void setCurrentAlgebraicElementRange(libMesh::ConstElemRange *range)
These functions allow setting custom ranges for the algebraic elements, nodes, and boundary nodes tha...
virtual void computeJacobianSys(libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian)
Form a Jacobian matrix.
std::map< NonlinearSystemName, unsigned int > _nl_sys_name_to_num
Map from nonlinear system name to number.
bool _has_kokkos_objects
Whether we have any Kokkos objects.
std::vector< std::unique_ptr< libMesh::CouplingMatrix > > _cm
Coupling matrix for variables.
virtual void reinitElem(const Elem *elem, const THREAD_ID tid) override
virtual void cacheJacobian(const THREAD_ID tid) override
virtual void swapBackMaterialsFace(const THREAD_ID tid)
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.
void execMultiAppTransfers(ExecFlagType type, Transfer::DIRECTION direction)
Execute MultiAppTransfers associated with execution flag and direction.
virtual void addJacobian(const THREAD_ID tid) override
std::vector< VectorVariableValue > _vector_zero
void checkNonlocalCoupling()
virtual void possiblyRebuildGeomSearchPatches()
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
Canonical method for adding a non-linear variable.
bool sideUOInterfaceMatPropIntegrityCheck() const
LinearSystem & currentLinearSystem()
Get a non-constant reference to the current linear system.
LineSearch * getLineSearch() override
getter for the MOOSE line search
virtual void addJacobianOffDiagScalar(unsigned int ivar, const THREAD_ID tid=0)
ExecuteMooseObjectWarehouse< Control > _control_warehouse
The control logic warehouse.
virtual void addFunction(const std::string &type, const std::string &name, InputParameters &parameters)
const std::vector< const MooseVariableFEBase * > & getUserObjectJacobianVariables(const THREAD_ID tid) const
void residualSetup() override
virtual void setActiveFEVariableCoupleableMatrixTags(std::set< TagID > &mtags, const THREAD_ID tid) override
void setSteadyStateConvergenceName(const ConvergenceName &convergence_name)
Sets the steady-state detection convergence object name if there is one.
std::vector< VectorTag > _current_residual_vector_tags
A data member to store the residual vector tag(s) passed into computeResidualTag(s).
bool _preserve_matrix_sparsity_pattern
Whether to preserve the system matrix / Jacobian sparsity pattern, using 0-valued entries usually.
bool _snesmf_reuse_base_set_by_user
If or not _snesmf_reuse_base is set by user.
virtual Real computeDamping(const NumericVector< libMesh::Number > &soln, const NumericVector< libMesh::Number > &update)
virtual void addKokkosPostprocessor(const std::string &pp_name, const std::string &name, InputParameters &parameters)
virtual ~FEProblemBase()
virtual bool updateSolution(NumericVector< libMesh::Number > &vec_solution, NumericVector< libMesh::Number > &ghosted_solution)
Update the solution.
std::vector< VariablePhiValue > _phi_zero
bool acceptInvalidSolution() const
Whether or not to accept the solution based on its invalidity.
libMesh::Order _max_scalar_order
Maximum scalar variable order.
unsigned int getNumCyclesCompleted()
Moose::Kokkos::MaterialPropertyStorage & getKokkosMaterialPropertyStorage()
virtual bool hasNeighborCoupling() const
Whether the simulation has neighbor coupling.
bool hasPostprocessorValueByName(const PostprocessorName &name) const
Whether or not a Postprocessor value exists by a given name.
CoverageCheckMode _kernel_coverage_check
Determines whether and which subdomains are to be checked to ensure that they have an active kernel.
std::set< TagID > _linear_vector_tags
Temporary storage for filtered vector tags for linear systems.
Moose::Kokkos::Array< Moose::Kokkos::FESystem > _kokkos_fe_systems
FESystem array - sparsely populated (only slots for systems needing a Kokkos::FESystem)
GeometricSearchData _geometric_search_data
const MooseObjectWarehouse< Marker > & getMarkerWarehouse()
bool shouldSolve() const
const T & getKokkosUserObject(const std::string &name) const
Get the Kokkos user object by its name.
virtual void reinitNodeFace(const Node *node, BoundaryID bnd_id, const THREAD_ID tid) override
ExecFlagType _current_execute_on_flag
Current execute_on flag.
virtual void needFV() override
marks this problem as including/needing finite volume functionality.
void setCoordSystem(const std::vector< SubdomainName > &blocks, const MultiMooseEnum &coord_sys)
ExecuteMooseObjectWarehouse< TransientMultiApp > _transient_multi_apps
Storage for TransientMultiApps (only needed for calling 'computeDT')
const ExecuteMooseObjectWarehouse< Transfer > & getMultiAppTransferWarehouse(Transfer::DIRECTION direction) const
Return the complete warehouse for MultiAppTransfer object for the given direction.
Moose::Kokkos::MaterialPropertyStorage & _kokkos_bnd_material_props
void bumpVolumeQRuleOrder(libMesh::Order order, SubdomainID block)
Increases the element/volume quadrature order for the specified mesh block if and only if the current...
void clearCurrentResidualVectorTags()
Clear the current residual vector tag data structure.
virtual void addInitialCondition(const std::string &ic_name, const std::string &name, InputParameters &parameters)
virtual std::shared_ptr< const DisplacedProblem > getDisplacedProblem() const
const bool _use_hash_table_matrix_assembly
Whether to assemble matrices using hash tables instead of preallocating matrix memory.
virtual void computeUserObjectByName(const ExecFlagType &type, const Moose::AuxGroup &group, const std::string &name)
Compute an user object with the given name.
virtual void addFVBC(const std::string &fv_bc_name, const std::string &name, InputParameters &parameters)
bool getFailNextNonlinearConvergenceCheck() const
Whether it will skip further residual evaluations and fail the next nonlinear convergence check(s)
void skipExceptionCheck(bool skip_exception_check)
Set a flag that indicates if we want to skip exception and stop solve.
virtual void addTransfer(const std::string &transfer_name, const std::string &name, InputParameters &parameters)
Add a Transfer to the problem.
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.
void checkUserObjects()
virtual void setCurrentSubdomainID(const Elem *elem, const THREAD_ID tid) override
virtual void restoreOldSolutions()
Restore old solutions from the backup vectors and deallocate them.
void setFailNextNonlinearConvergenceCheck()
Skip further residual evaluations and fail the next nonlinear convergence check(s)
std::map< std::string, unsigned int > _subspace_dim
Dimension of the subspace spanned by the vectors with a given prefix.
virtual void predictorCleanup(NumericVector< libMesh::Number > &ghosted_solution)
Perform cleanup tasks after application of predictor to solution vector.
virtual void addKokkosUserObject(const std::string &user_object_name, const std::string &name, InputParameters &parameters)
virtual void getDiracElements(std::set< const Elem * > &elems) override
Fills "elems" with the elements that should be looped over for Dirac Kernels.
bool _ignore_zeros_in_jacobian
Whether to ignore zeros in the Jacobian, thereby leading to a reduced sparsity pattern.
unsigned int _num_grid_steps
Number of steps in a grid sequence.
bool _need_to_add_default_multiapp_fixed_point_convergence
Flag that the problem needs to add the default fixed point convergence.
std::shared_ptr< XFEMInterface > _xfem
Pointer to XFEM controller.
void setErrorOnJacobianNonzeroReallocation(bool state)
void checkUserObjectNameCollision(const std::string &name, const std::string &type) const
Check for name collision between different user objects.
const ReporterData & getReporterData() const
Provides const access the ReporterData object.
void registerRandomInterface(RandomInterface &random_interface, const std::string &name)
virtual void addVectorPostprocessor(const std::string &pp_name, const std::string &name, InputParameters &parameters)
void reinitBecauseOfGhostingOrNewGeomObjects(bool mortar_changed=false)
Call when it is possible that the needs for ghosted elements has changed.
const InitialConditionWarehouse & getInitialConditionWarehouse() const
Return InitialCondition storage.
MooseObjectWarehouse< Indicator > _indicators
const MooseObjectWarehouse< Function > & getFunctionWarehouse()
void setCoupling(Moose::CouplingType type)
Set the coupling between variables TODO: allow user-defined coupling.
virtual void setUDotDotRequested(const bool u_dotdot_requested)
Set boolean flag to true to store solution second time derivative.
const MaterialWarehouse & getMaterialWarehouse() const
std::map< SolverSystemName, unsigned int > _solver_sys_name_to_num
Map connecting solver system names with their respective systems.
virtual GeometricSearchData & geomSearchData() override
virtual void reinitNodes(const std::vector< dof_id_type > &nodes, const THREAD_ID tid) override
bool identifyVariableGroupsInNL() const
Whether to identify variable groups in nonlinear systems.
LinearSystem & getLinearSystem(unsigned int sys_num)
Get non-constant reference to a linear system.
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.
virtual void addBoundaryCondition(const std::string &bc_name, const std::string &name, InputParameters &parameters)
std::map< std::string, std::unique_ptr< RandomData > > _random_data_objects
A map of objects that consume random numbers.
void reinitMaterials(SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful=true)
void parentOutputPositionChanged()
Calls parentOutputPositionChanged() on all sub apps.
bool hasSolverVariable(const std::string &var_name) const
void computingScalingJacobian(bool computing_scaling_jacobian)
Setter for whether we're computing the scaling jacobian.
virtual void newAssemblyArray(std::vector< std::shared_ptr< SolverSystem > > &solver_systems)
bool hasDampers()
Whether or not this system has dampers.
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.
bool isSolverSystemNonlinear(const unsigned int sys_num)
Check if the solver system is nonlinear.
std::set< TagID > _fe_matrix_tags
std::vector< MeshDisplacedInterface * > _notify_when_mesh_displaces
Objects to be notified when the mesh displaces.
bool _has_nonlocal_coupling
Indicates if nonlocal coupling is required/exists.
virtual bool solverSystemConverged(const unsigned int solver_sys_num) override
virtual void addAuxScalarVariable(const std::string &var_name, libMesh::Order order, Real scale_factor=1., const std::set< SubdomainID > *const active_subdomains=NULL)
virtual void addJacobianNeighborLowerD(const THREAD_ID tid) override
virtual Real & dt() const
virtual std::shared_ptr< DisplacedProblem > getDisplacedProblem()
void addKokkosMeshInitializationHook(std::function< void()> function)
Add a function hook that needs to be called after Kokkos mesh initialization.
bool needsPreviousMultiSystemFixedPointIterationAuxiliary() const
Check to see whether we need to compute the variable values of the previous multi-system fixed point ...
ExecuteMooseObjectWarehouse< MultiApp > & getMultiAppWarehouse()
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.
Restartable::ManagedValue< RestartableEquationSystems > _req
The EquationSystems object, wrapped for restart.
const bool _force_restart
virtual void advanceState()
Advance all of the state holding vectors / datastructures so that we can move to the next timestep.
bool isSNESMFReuseBaseSetbyUser()
Return a flag to indicate if _snesmf_reuse_base is set by users.
virtual bool uDotDotRequested()
Get boolean flag to check whether solution second time derivative needs to be stored.
virtual void restoreSolutions()
virtual void solveLinearSystem(const unsigned int linear_sys_num, const Moose::PetscSupport::PetscOptions *po=nullptr)
Build and solve a linear system.
virtual void prepareAssembly(const THREAD_ID tid) override
virtual void addFVInterpolationMethod(const std::string &method_type, const std::string &name, InputParameters &parameters)
Add an FV interpolation method.
const bool _material_dependency_check
Determines whether a check to verify material dependencies on every subdomain.
const Positions & getPositionsObject(const std::string &name) const
Get the Positions object by its name.
Moose::Kokkos::FESystem & getKokkosFESystem(const unsigned int sys_num)
Get the Kokkos FESystem of a specified number.
void setConstJacobian(bool state)
Set flag that Jacobian is constant (for optimization purposes)
virtual void executeAllObjects(const ExecFlagType &exec_type)
void executeControls(const ExecFlagType &exec_type)
Performs setup and execute calls for Control objects.
virtual void postExecute()
Method called at the end of the simulation.
ExecuteMooseObjectWarehouse< Control > & getControlWarehouse()
Reference to the control logic warehouse.
virtual void addNodalKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
void setVerboseProblem(bool verbose)
Make the problem be verbose.
bool needToAddDefaultMultiAppFixedPointConvergence() const
Returns true if the problem needs to add the default fixed point convergence.
bool hasKokkosResidualObjects() const
const bool _regard_general_exceptions_as_errors
If we catch an exception during residual/Jacobian evaluaton for which we don't have specific handling...
std::vector< std::shared_ptr< Transfer > > getTransfers(ExecFlagType type, Transfer::DIRECTION direction) const
Get Transfers by ExecFlagType and direction.
bool hasMultiApps() const
Returns whether or not the current simulation has any multiapps.
void setCurrentNonlinearSystem(const unsigned int nl_sys_num)
void addOutput(const std::string &, const std::string &, InputParameters &)
Adds an Output object.
virtual void addKokkosLinearFVBC(const std::string &bc_name, const std::string &name, InputParameters &parameters)
const std::vector< LinearSystemName > _linear_sys_names
The linear system names.
MaterialWarehouse _discrete_materials
bool computingScalingJacobian() const override final
Getter for whether we're computing the scaling jacobian.
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.
Real computeMultiAppsDT(ExecFlagType type)
Find the smallest timestep over all MultiApps.
const MaterialWarehouse & getRegularMaterialsWarehouse() const
void setKernelCoverageCheck(bool flag)
Set flag to indicate whether kernel coverage checks should be performed.
bool _skip_exception_check
If or not skip 'exception and stop solve'.
const ConstBndNodeRange & getCurrentAlgebraicBndNodeRange()
SolverParams & solverParams(unsigned int solver_sys_num=0)
Get the solver parameters.
void setCurrentLinearSystem(unsigned int sys_num)
Set the current linear system pointer.
std::vector< std::vector< std::unique_ptr< Assembly > > > _assembly
The Assembly objects.
unsigned short _current_ic_state
std::map< LinearSystemName, unsigned int > _linear_sys_name_to_num
Map from linear system name to number.
virtual Convergence & getConvergence(const std::string &name, const THREAD_ID tid=0) const
Gets a Convergence object.
virtual void computeNullSpace(libMesh::NonlinearImplicitSystem &sys, std::vector< NumericVector< libMesh::Number > * > &sp)
virtual void reinitElemNeighborAndLowerD(const Elem *elem, unsigned int side, const THREAD_ID tid) override
void setSNESMFReuseBase(bool reuse, bool set_by_user)
If or not to reuse the base vector for matrix-free calculation.
virtual void prepare(const Elem *elem, const THREAD_ID tid) override
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.
const Moose::Kokkos::Array< Moose::Kokkos::System > & getKokkosSystems() const
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.
const std::size_t _num_linear_sys
The number of linear systems.
void handleException(const std::string &calling_method)
Handle exceptions.
virtual void addPostprocessor(const std::string &pp_name, const std::string &name, InputParameters &parameters)
void setNonlocalCouplingMatrix()
Set custom coupling matrix for variables requiring nonlocal contribution.
unsigned int solverSysNum(const SolverSystemName &solver_sys_name) const override
bool _u_dotdot_old_requested
Whether old solution second time derivative needs to be stored.
Moose::Kokkos::MaterialPropertyStorage & _kokkos_material_props
const libMesh::ConstElemRange & getCurrentAlgebraicElementRange()
These are the element and nodes that contribute to the jacobian and residual for this local processor...
const MaterialPropertyStorage & getBndMaterialPropertyStorage()
std::map< SolverVariableName, unsigned int > _solver_var_to_sys_num
Map connecting variable names with their respective solver systems.
virtual void setActiveScalarVariableCoupleableMatrixTags(std::set< TagID > &mtags, const THREAD_ID tid) override
bool getFailNextSystemConvergenceCheck() const
Whether it will fail the next system convergence check(s), triggering failed step behavior.
const bool _side_uo_interface_mat_prop_integrity_check
Whether to check that side user objects do not consume interface material properties.
MooseObjectWarehouse< InternalSideIndicatorBase > _internal_side_indicators
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...
bool _requires_nonlocal_coupling
nonlocal coupling requirement flag
const MaterialWarehouse & getKokkosMaterialsWarehouse() const
const bool _restore_original_nonzero_pattern
Whether we should restore the original nonzero pattern for every Jacobian evaluation.
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
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.
virtual void swapBackMaterialsNeighbor(const THREAD_ID tid)
void clearActiveMaterialProperties(const THREAD_ID tid)
Clear the active material properties.
virtual void clearActiveElementalMooseVariables(const THREAD_ID tid) override
Clear the active elemental MooseVariableFEBase.
void setMultiAppFixedPointConvergenceName(const ConvergenceName &convergence_name)
Sets the MultiApp fixed point convergence object name if there is one.
bool _fail_next_system_convergence_check
bool hasUserObject(const std::string &name) const
Check if there if a user object of given name.
bool _reinit_displaced_elem
Whether to call DisplacedProblem::reinitElem when this->reinitElem is called.
std::vector< VariableValue > _scalar_zero
unsigned int linearSysNum(const LinearSystemName &linear_sys_name) const override
const std::vector< LinearSystemName > & getLinearSystemNames() const
bool hasKokkosObjects() const
virtual void transient(bool trans)
virtual void addJacobianNeighbor(libMesh::SparseMatrix< libMesh::Number > &jacobian, unsigned int ivar, unsigned int jvar, const DofMap &dof_map, std::vector< dof_id_type > &dof_indices, std::vector< dof_id_type > &neighbor_dof_indices, const std::set< TagID > &tags, const THREAD_ID tid) override
bool _fv_bcs_integrity_check
Whether to check overlapping Dirichlet and Flux BCs and/or multiple DirichletBCs per sideset.
bool _const_jacobian
true if the Jacobian is constant
virtual bool hasVariable(const std::string &var_name) const override
Whether or not this problem has the variable.
virtual void reinitNode(const Node *node, const THREAD_ID tid) override
void resetFailNextNonlinearConvergenceCheck()
Tell the problem that the nonlinear convergence check(s) may proceed as normal.
void createMortarInterface(const std::pair< BoundaryID, BoundaryID > &primary_secondary_boundary_pair, const std::pair< SubdomainID, SubdomainID > &primary_secondary_subdomain_pair, bool on_displaced, bool periodic, const bool debug, const bool correct_edge_dropping, const Real minimum_projection_angle, const Mortar3DSubpatchPlane mortar_3d_subpatch_plane, const MooseEnum &triangulation, const bool triangulate_triangles, const Mortar3DQuadraturePointMapping mortar_3d_qp_mapping=Mortar3DQuadraturePointMapping::NORMAL_PROJECTION)
virtual void addKokkosReporter(const std::string &type, const std::string &name, InputParameters &parameters)
bool _has_internal_edge_residual_objects
Whether the problem has dgkernels or interface kernels.
bool _error_on_jacobian_nonzero_reallocation
Whether to error when the Jacobian is re-allocated, usually because the sparsity pattern changed.
const libMesh::CouplingMatrix * couplingMatrix(const unsigned int nl_sys_num) const override
The coupling matrix defining what blocks exist in the preconditioning matrix.
void setExecutionPrinting(const ExecFlagEnum &print_exec)
virtual void addGhostedBoundary(BoundaryID boundary_id) override
Will make sure that all necessary elements from boundary_id are ghosted to this processor.
virtual void addKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
const libMesh::ConstElemRange & getEvaluableElementRange()
In general, {evaluable elements} >= {local elements} U {algebraic ghosting elements}.
virtual void addAuxScalarKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
virtual void addKokkosMaterial(const std::string &material_name, const std::string &name, InputParameters &parameters)
std::unique_ptr< libMesh::ConstNodeRange > _current_algebraic_node_range
virtual void addDGKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
bool _u_dot_requested
Whether solution time derivative needs to be stored.
virtual bool hasNonlocalCoupling() const override
Whether the simulation has active nonlocal coupling which should be accounted for in the Jacobian.
void setCurrentAlgebraicBndNodeRange(ConstBndNodeRange *range)
virtual void prepareFace(const Elem *elem, const THREAD_ID tid) override
const FVAdvectedInterpolationMethod & getFVAdvectedInterpolationMethod(const InterpolationMethodName &name, const THREAD_ID tid=0) const
Retrieve an advected interpolation method.
virtual void addKokkosKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
void prepareMaterials(const std::unordered_set< unsigned int > &consumer_needed_mat_props, const SubdomainID blk_id, const THREAD_ID tid)
Add the MooseVariables and the material properties that the current materials depend on to the depend...
void checkCoordinateSystems()
Verify that there are no element type/coordinate type conflicts.
MaterialPropertyStorage & _bnd_material_props
void logAdd(const std::string &system, const std::string &name, const std::string &type, const InputParameters &params) const
Output information about the object just added to the problem.
virtual void addAuxKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
virtual Real & dtOld() const
void initKokkos()
Construct Kokkos assembly and systems and allocate Kokkos material property storages.
virtual void initNullSpaceVectors(const InputParameters &parameters, std::vector< std::shared_ptr< NonlinearSystemBase > > &nl)
bool preserveMatrixSparsityPattern() const
Will return True if the executioner in use requires preserving the sparsity pattern of the matrices b...
void reinitElemFace(const Elem *elem, unsigned int side, BoundaryID, const THREAD_ID tid)
unsigned int _max_qps
Maximum number of quadrature points used in the problem.
void checkDuplicatePostprocessorVariableNames()
virtual void reinitLowerDElem(const Elem *lower_d_elem, const THREAD_ID tid, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr) override
virtual void addDiracKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
void forceOutput()
Indicates that the next call to outputStep should be forced.
virtual void solve(const unsigned int nl_sys_num)
std::optional< ConvergenceName > _steady_state_convergence_name
Steady-state detection convergence name.
Moose::CouplingType coupling() const
bool _has_kokkos_residual_objects
Whether we have any Kokkos residual objects.
virtual void addDefaultNonlinearConvergence(const InputParameters &params)
Adds the default nonlinear Convergence associated with the problem.
const std::unordered_map< std::pair< BoundaryID, BoundaryID >, MortarInterfaceConfig > & getMortarInterfaces(bool on_displaced) const
void setVariableAllDoFMap(const std::vector< const MooseVariableFEBase * > &moose_vars)
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.
InitialConditionWarehouse _ics
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,...
NonlinearSystemBase & currentNonlinearSystem()
const ExecFlagType & getCurrentExecuteOnFlag() const
Return/set the current execution flag.
void checkUserObjectJacobianRequirement(THREAD_ID tid)
bool hasUOAuxStateCheck() const
Whether or not MOOSE will perform a user object/auxiliary kernel state check.
bool duplicateVariableCheck(const std::string &var_name, const libMesh::FEType &type, bool is_aux, const std::set< SubdomainID > *const active_subdomains)
Helper to check for duplicate variable names across systems or within a single system.
void restoreMultiApps(ExecFlagType type, bool force=false)
Restore the MultiApps associated with the ExecFlagType.
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...
virtual unsigned int currentNlSysNum() const override
bool execMultiApps(ExecFlagType type, bool auto_advance=true)
Execute the MultiApps associated with the ExecFlagType.
void setPostprocessorValueByName(const PostprocessorName &name, const PostprocessorValue &value, std::size_t t_index=0)
Set the value of a PostprocessorValue.
void computeResidual(libMesh::NonlinearImplicitSystem &sys, const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual)
This function is called by Libmesh to form a residual.
virtual Real & timeOld() const
virtual void computeBounds(libMesh::NonlinearImplicitSystem &sys, NumericVector< libMesh::Number > &lower, NumericVector< libMesh::Number > &upper)
MaterialWarehouse _all_materials
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 unsigned int nlSysNum(const NonlinearSystemName &nl_sys_name) const override
const libMesh::ConstElemRange & getNonlinearEvaluableElementRange()
PetscOptions _petsc_option_data_base
bool fvBCsIntegrityCheck() const
virtual unsigned int nNonlinearIterations(const unsigned int nl_sys_num) const override
void setPreserveMatrixSparsityPattern(bool preserve)
Set whether the sparsity pattern of the matrices being formed during the solve (usually the Jacobian)...
bool _has_time_integrator
Indicates whether or not this executioner has a time integrator (during setup)
bool _input_file_saved
whether input file has been written
void computeResidualAndJacobian(const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, libMesh::SparseMatrix< libMesh::Number > &jacobian)
Form a residual and Jacobian with default tags.
void timestepSetup() override
virtual void computeIndicators()
virtual void onTimestepBegin() override
virtual MooseMesh & mesh() override
MaterialWarehouse _kokkos_materials
Moose::Kokkos::MaterialPropertyStorage & getKokkosNeighborMaterialPropertyStorage()
virtual void setResidualNeighbor(NumericVector< libMesh::Number > &residual, const THREAD_ID tid) override
void setCurrentResidualVectorTags(const std::set< TagID > &vector_tags)
Set the current residual vector tag data structure based on the passed in tag IDs.
virtual void addIndicator(const std::string &indicator_name, const std::string &name, InputParameters &parameters)
bool _previous_multiapp_fp_aux_solution_required
Indicates we need to save the previous multiapp fixed-point iteration auxiliary variable values.
const std::vector< NonlinearSystemName > & getNonlinearSystemNames() const
std::set< TagID > _linear_matrix_tags
Temporary storage for filtered matrix tags for linear systems.
std::vector< std::unordered_map< BoundaryID, bool > > _interface_mat_side_cache
Cache for calculating materials on interface.
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)
MooseObjectWarehouse< MeshDivision > _mesh_divisions
Warehouse to store mesh divisions NOTE: this could probably be moved to the MooseMesh instead of the ...
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)
SolverSystem & getSolverSystem(unsigned int sys_num)
Get non-constant reference to a solver system.
Real getTimeFromStateArg(const Moose::StateArg &state) const
Returns the time associated with the requested state.
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.
const UserObject & getUserObjectBase(const std::string &name, const THREAD_ID tid=0) const
Get the user object by its name.
Moose::Kokkos::Assembly _kokkos_assembly
std::optional< std::vector< ConvergenceName > > _linear_convergence_names
Linear system(s) convergence name(s) (if any)
MooseObjectWarehouse< Moose::FunctionBase > _kokkos_functions
MooseEnum _verbose_setup
Whether or not to be verbose during setup.
void addDefaultSteadyStateConvergence(const InputParameters &params)
Adds the default steady-state detection Convergence.
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...
FVInitialConditionWarehouse _fv_ics
virtual void addDisplacedProblem(std::shared_ptr< DisplacedProblem > displaced_problem)
const bool _boundary_restricted_elem_integrity_check
whether to perform checking of boundary restricted elemental object variable dependencies,...
virtual void addKokkosFunction(const std::string &type, const std::string &name, InputParameters &parameters)
Add a Kokkos function to the problem.
virtual void updateMortarMesh()
virtual bool hasFunction(const std::string &name, const THREAD_ID tid=0)
const std::vector< SolverSystemName > & getSolverSystemNames() const
bool computingNonlinearResid() const
Returns true if the problem is in the process of computing the nonlinear residual.
Definition SubProblem.h:715
virtual void computeResidualTag(const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, TagID tag)
Form a residual vector for a given tag.
std::vector< std::unordered_map< BoundaryID, bool > > _bnd_mat_side_cache
Cache for calculating materials on side.
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...
NonlinearSystemBase * _current_nl_sys
The current nonlinear system that we are solving.
const bool _uo_aux_state_check
Whether or not checking the state of uo/aux evaluation.
virtual void computeResidual(const NumericVector< libMesh::Number > &soln, NumericVector< libMesh::Number > &residual, const unsigned int nl_sys_num)
Form a residual with default tags (nontime, time, residual).
bool computingScalingResidual() const override final
bool hasSetMultiAppFixedPointConvergenceName() const
Returns true if the problem has set the fixed point convergence name.
bool _started_initial_setup
At or beyond initialSteup stage.
bool hasInitialAdaptivity() const
Return a Boolean indicating whether initial AMR is turned on.
Adaptivity _adaptivity
std::vector< SolverSystemName > _solver_sys_names
The union of nonlinear and linear system names.
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
virtual void addLinearFVBC(const std::string &fv_bc_name, const std::string &name, InputParameters &parameters)
virtual void saveOldSolutions()
Allocate vectors and save old solutions into them.
const std::vector< ConvergenceName > & getLinearConvergenceNames() const
Gets the linear convergence object name(s).
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.
std::vector< MeshChangedInterface * > _notify_when_mesh_changes
Objects to be notified when the mesh changes.
virtual void addAuxVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
Canonical method for adding an auxiliary variable.
std::shared_ptr< DisplacedProblem > _displaced_problem
virtual Executor & getExecutor(const std::string &name)
void finalizeMultiApps()
void computeUserObjectsInternal(const ExecFlagType &type, TheWarehouse::Query &query)
virtual void setActiveElementalMooseVariables(const std::set< MooseVariableFEBase * > &moose_vars, const THREAD_ID tid) override
Set the MOOSE variables to be reinited on each element.
bool _verbose_restore
Whether or not to be verbose on solution restoration post a failed time step.
virtual void computeJacobianBlocks(std::vector< JacobianBlock * > &blocks, const unsigned int nl_sys_num)
Computes several Jacobian blocks simultaneously, summing their contributions into smaller preconditio...
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,...
bool haveADObjects() const
Method for reading wehther we have any ad objects.
Definition SubProblem.h:779
virtual void swapBackMaterials(const THREAD_ID tid)
virtual void initialAdaptMesh()
void executeSamplers(const ExecFlagType &exec_type)
Performs setup and execute calls for Sampler objects.
void backupMultiApps(ExecFlagType type)
Backup the MultiApps associated with the ExecFlagType.
bool needToAddDefaultNonlinearConvergence() const
Returns true if the problem needs to add the default nonlinear convergence.
const std::size_t _num_nl_sys
The number of nonlinear systems.
virtual std::string solverTypeString(unsigned int solver_sys_num=0)
Return solver type as a human readable string.
virtual void clearActiveScalarVariableCoupleableMatrixTags(const THREAD_ID tid) override
std::vector< VectorVariableCurl > _vector_curl_zero
virtual bool checkNonlocalCouplingRequirement() const override
void setCurrentExecuteOnFlag(const ExecFlagType &)
virtual void setActiveFEVariableCoupleableVectorTags(std::set< TagID > &vtags, const THREAD_ID tid) override
bool shouldPrintExecution(const THREAD_ID tid) const
Check whether the problem should output execution orders at this time.
void setNeedToAddDefaultMultiAppFixedPointConvergence()
Sets _need_to_add_default_multiapp_fixed_point_convergence to true.
bool _has_mortar
Whether the simulation requires mortar coupling.
std::vector< bool > _previous_multiapp_fp_nl_solution_required
Indicates we need to save the previous multiapp fixed-point iteration solver variable values.
virtual void addAuxArrayVariable(const std::string &var_name, const libMesh::FEType &type, unsigned int components, const std::set< SubdomainID > *const active_subdomains=NULL)
void setCurrentlyComputingResidual(bool currently_computing_residual) final
Set whether or not the problem is in the process of computing the residual.
virtual std::vector< VariableName > getVariableNames()
Returns a list of all the variables in the problem (both from the NL and Aux systems.
virtual void updateGeomSearch(GeometricSearchData::GeometricSearchType type=GeometricSearchData::ALL) override
Update this object's geometric search data as well as the displaced problem's if it exists.
std::vector< std::function< void()> > _kokkos_mesh_initialization_hooks
Container holding hooks for functions that need to be called after Kokkos mesh initialization.
virtual Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) override
std::vector< std::pair< MooseVariableFieldBase *, MooseVariableFieldBase * > > & couplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num)
bool _need_to_add_default_steady_state_convergence
Flag that the problem needs to add the default steady convergence.
bool _calculate_jacobian_in_uo
MeshDivision & getMeshDivision(const std::string &name, const THREAD_ID tid=0) const
Get a MeshDivision.
virtual void execute(const ExecFlagType &exec_type)
Convenience function for performing execution of MOOSE systems.
bool _reinit_displaced_face
Whether to call DisplacedProblem::reinitElemFace when this->reinitElemFace is called.
bool _has_initialized_stateful
Whether nor not stateful materials have been initialized.
bool useHashTableMatrixAssembly() const
bool _has_constraints
Whether or not this system has any Constraints.
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,...
std::vector< std::shared_ptr< NonlinearSystemBase > > _nl
The nonlinear systems.
void finishMultiAppStep(ExecFlagType type, bool recurse_through_multiapp_levels=false)
Finish the MultiApp time step (endStep, postStep) associated with the ExecFlagType.
virtual void addKokkosLinearFVKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
Moose::PetscSupport::PetscOptions & getPetscOptions()
Retrieve a writable reference the PETSc options (used by PetscSupport)
virtual void computeJacobianTags(const std::set< TagID > &tags)
Form multiple matrices, and each is associated with a tag.
Moose::PetscSupport::PetscOptions _petsc_options
PETSc option storage.
bool haveDisplaced() const override final
Whether we have a displaced problem in our simulation.
virtual void addMultiApp(const std::string &multi_app_name, const std::string &name, InputParameters &parameters)
Add a MultiApp to the problem.
void setResidualObjectParamsAndLog(const std::string &ro_name, const std::string &name, InputParameters &parameters, const unsigned int nl_sys_num, const std::string &base_name, bool &reinit_displaced)
Set the subproblem and system parameters for residual objects and log their addition.
virtual void addMarker(const std::string &marker_name, const std::string &name, InputParameters &parameters)
bool _snesmf_reuse_base
If or not to resuse the base vector for matrix-free calculation.
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...
void kokkosJoinAndFinalize(const std::vector< Moose::Kokkos::UserObject * > &userobjs)
void setFailNextSystemConvergenceCheck()
Tell the problem that the system(s) cannot be considered converged next time convergence is checked.
bool useSNESMFReuseBase()
Return a flag that indicates if we are reusing the vector base.
virtual Distribution & getDistribution(const std::string &name)
bool errorOnJacobianNonzeroReallocation() const
Will return True if the user wants to get an error when a nonzero is reallocated in the Jacobian by P...
TheWarehouse & theWarehouse() const
virtual void addScalarKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
virtual void addKokkosNodalKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num)
virtual Real finalNonlinearResidual(const unsigned int nl_sys_num) const override
MooseObjectWarehouse< Convergence > _convergences
convergence warehouse
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.
virtual Real & time() const
bool _has_jacobian
Indicates if the Jacobian was computed.
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.
bool hasTimeIntegrator() const
Returns whether or not this Problem has a TimeIntegrator.
virtual void subdomainSetup(SubdomainID subdomain, const THREAD_ID tid)
virtual bool adaptMesh()
virtual void addFVInterfaceKernel(const std::string &fv_ik_name, const std::string &name, InputParameters &parameters)
void bumpAllQRuleOrder(libMesh::Order order, SubdomainID block)
virtual void addFVInitialCondition(const std::string &ic_name, const std::string &name, InputParameters &parameters)
Add an initial condition for a finite volume variables.
virtual void setInputParametersFEProblem(InputParameters &parameters)
std::vector< std::vector< const MooseVariableFEBase * > > _uo_jacobian_moose_vars
Adaptivity & adaptivity()
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.
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...
friend class Resurrector
virtual void addInterfaceKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
const Moose::Kokkos::System & getKokkosSystem(const unsigned int sys_num) const
virtual void addReporter(const std::string &type, const std::string &name, InputParameters &parameters)
Add a Reporter object to the simulation.
const libMesh::ConstNodeRange & getCurrentAlgebraicNodeRange()
std::vector< unsigned char > _has_active_material_properties
Whether there are active material properties on each thread.
virtual bool uDotDotOldRequested()
Get boolean flag to check whether old solution second time derivative needs to be stored.
bool needToAddDefaultSteadyStateConvergence() const
Returns true if the problem needs to add the default steady-state detection convergence.
Moose::CouplingType _coupling
Type of variable coupling.
bool _has_exception
Whether or not an exception has occurred.
MooseAppCoordTransform & coordTransform()
virtual void copySolutionsBackwards()
std::vector< Real > _real_zero
Convenience zeros.
void reinitMaterialsInterface(BoundaryID boundary_id, const THREAD_ID tid, bool swap_stateful=true)
virtual void addConstraint(const std::string &c_name, const std::string &name, InputParameters &parameters)
virtual void setCurrentLowerDElem(const Elem *const lower_d_elem, const THREAD_ID tid) override
Set the current lower dimensional element.
virtual void initPetscOutputAndSomeSolverSettings()
Reinitialize PETSc output for proper linear/nonlinear iteration display.
void allowOutput(bool state)
Ability to enable/disable all output calls.
void computeKokkosUserObjectsInternal(const ExecFlagType &type, TheWarehouse::Query &query)
bool hasMultiApp(const std::string &name) const
const bool & _immediately_print_invalid_solution
virtual void meshDisplaced()
Update data after a mesh displaced.
bool _u_dot_old_requested
Whether old solution time derivative needs to be stored.
std::unique_ptr< libMesh::ConstElemRange > _evaluable_local_elem_range
std::vector< MooseArray< ADRealTensorValue > > _ad_second_zero
virtual void setResidual(NumericVector< libMesh::Number > &residual, const THREAD_ID tid) override
bool _using_ad_mat_props
Automatic differentiaion (AD) flag which indicates whether any consumer has requested an AD material ...
virtual bool onlyAllowDefaultNonlinearConvergence() const
Returns true if an error will result if the user supplies 'nonlinear_convergence'.
virtual int & timeStep() const
void initKokkosStatefulProps()
virtual bool isTransient() const override
std::unique_ptr< libMesh::ConstElemRange > _aux_evaluable_local_elem_range
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 Moose::FEBackend feBackend() const
void computingScalingResidual(bool computing_scaling_residual)
Setter for whether we're computing the scaling residual.
virtual void addFunctorMaterial(const std::string &functor_material_name, const std::string &name, InputParameters &parameters)
virtual void setUDotRequested(const bool u_dot_requested)
Set boolean flag to true to store solution time derivative.
virtual void addDamper(const std::string &damper_name, const std::string &name, InputParameters &parameters)
virtual void computeMarkers()
const ConvergenceName & getMultiAppFixedPointConvergenceName() const
Gets the MultiApp fixed point convergence object name.
static SolverParams makeLinearSolverParams()
Make basic solver params for linear solves.
virtual Function & getFunction(const std::string &name, const THREAD_ID tid=0)
unsigned int _cycles_completed
virtual void setUDotDotOldRequested(const bool u_dotdot_old_requested)
Set boolean flag to true to store old solution second time derivative.
ExecFlagEnum _print_execution_on
When to print the execution of loops.
bool initialized() const
virtual void clearActiveScalarVariableCoupleableVectorTags(const THREAD_ID tid) override
std::vector< Point > _point_zero
std::vector< MooseArray< ADReal > > _ad_zero
virtual void computeJacobianTag(const NumericVector< libMesh::Number > &soln, libMesh::SparseMatrix< libMesh::Number > &jacobian, TagID tag)
Form a Jacobian matrix for a given tag.
void createTagSolutions()
Create extra tagged solution vectors.
Moose::Kokkos::Array< Moose::Kokkos::System > _kokkos_systems
System array - sparsely populated (only slots for systems needing a Kokkos::System)
virtual void prepareAssemblyNeighbor(const THREAD_ID tid)
Begin a fresh neighbor accumulation phase by sizing and zeroing the neighbor blocks.
MooseObjectWarehouse< Function > _functions
functions
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.
CoverageCheckMode _material_coverage_check
Determines whether and which subdomains are to be checked to ensure that they have an active material...
const std::set< const MooseObject * > & getMaterialPropertyStorageConsumers(Moose::MaterialDataType type) const
virtual void clearActiveFEVariableCoupleableMatrixTags(const THREAD_ID tid) override
virtual const SystemBase & getSystemBase(const unsigned int sys_num) const
Get constant reference to a system in this problem.
bool allowInvalidSolution() const
Whether to accept / allow an invalid solution.
const std::set< const MooseObject * > & getKokkosMaterialPropertyStorageConsumers(Moose::MaterialDataType type) const
const MaterialWarehouse & getDiscreteMaterialWarehouse() const
void needsPreviousMultiSystemFixedPointIterationSolution(bool needed, const unsigned int solver_sys_num)
Set a flag that indicates that user requires values for the previous multi-system fixed point iterate...
void addDefaultMultiAppFixedPointConvergence(const InputParameters &params)
Adds the default fixed point Convergence associated with the problem.
bool _u_dotdot_requested
Whether solution second time derivative needs to be stored.
bool hasActiveMaterialProperties(const THREAD_ID tid) const
Method to check whether or not a list of active material roperties has been set.
virtual unsigned int nLinearIterations(const unsigned int nl_sys_num) const override
std::optional< std::vector< ConvergenceName > > _nonlinear_convergence_names
Nonlinear system(s) convergence name(s)
virtual Real computeResidualL2Norm()
Computes the residual using whatever is sitting in the current solution vector then returns the L2 no...
std::unique_ptr< ConstBndNodeRange > _current_algebraic_bnd_node_range
virtual void addFVKernel(const std::string &kernel_name, const std::string &name, InputParameters &parameters)
virtual void computeTransposeNullSpace(libMesh::NonlinearImplicitSystem &sys, std::vector< NumericVector< libMesh::Number > * > &sp)
void initialSetup() override
bool _previous_multisystem_fp_aux_solution_required
Indicates we need to save the previous multi-system fixed-point iteration auxiliary variable values.
std::vector< VariableValue > _zero
virtual bool startedInitialSetup()
Returns true if we are in or beyond the initialSetup stage.
virtual void outputStep(ExecFlagType type)
Output the current step.
MooseObjectWarehouse< Marker > _markers
std::vector< std::shared_ptr< SolverSystem > > _solver_systems
Combined container to base pointer of every solver system.
void setParallelBarrierMessaging(bool flag)
Toggle parallel barrier messaging (defaults to on).
Moose::Kokkos::Array< Moose::Kokkos::FESystem > & getKokkosFESystems()
Get the Kokkos FESystem array (populated only when FE Kokkos objects exist)
void getUOExecutionGroups(TheWarehouse::Query &query, std::set< int > &execution_groups) const
bool _is_petsc_options_inserted
If or not PETSc options have been added to database.
bool _check_residual_for_nans
Whether to check the residual for NaN or Inf values.
void notifyWhenMeshChanges(MeshChangedInterface *mci)
Register an object that derives from MeshChangedInterface to be notified when the mesh changes.
bool showInvalidSolutionConsole() const
Whether or not to print out the invalid solutions summary table in console.
virtual void ghostGhostedBoundaries() override
Causes the boundaries added using addGhostedBoundary to actually be ghosted.
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 cacheResidualNeighbor(const THREAD_ID tid) override
const FVInitialConditionWarehouse & getFVInitialConditionWarehouse() const
Return FVInitialCondition storage.
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.
virtual void computeIndicatorsAndMarkers()
virtual void reinitNeighbor(const Elem *elem, unsigned int side, const THREAD_ID tid) override
const std::vector< NonlinearSystemName > _nl_sys_names
The nonlinear system names.
virtual void setNeighborSubdomainID(const Elem *elem, unsigned int side, const THREAD_ID tid) override
Moose::Kokkos::Assembly & kokkosAssembly()
bool ignoreZerosInJacobian() const
Will return true if zeros in the Jacobian are to be dropped from the sparsity pattern.
virtual void meshChanged()
Deprecated.
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.
virtual libMesh::System & getSystem(const std::string &var_name) override
Returns the equation system containing the variable provided.
void uniformRefine()
uniformly refine the problem mesh(es).
MooseMesh * _displaced_mesh
void setNeedToAddDefaultSteadyStateConvergence()
Sets _need_to_add_default_steady_state_convergence to true.
ExecuteMooseObjectWarehouse< Transfer > _from_multi_app_transfers
Transfers executed just after MultiApps to transfer data from them.
const Moose::Kokkos::FESystem & getKokkosFESystem(const unsigned int sys_num) const
void initXFEM(std::shared_ptr< XFEMInterface > xfem)
Create XFEM controller object.
std::vector< SubdomainName > _kernel_coverage_blocks
static InputParameters validParams()
MaterialPropertyRegistry _material_prop_registry
virtual bool computingPreSMOResidual(const unsigned int nl_sys_num) const override
Returns true if the problem is in the process of computing it's initial residual.
bool automaticScaling() const
Automatic scaling getter.
bool constJacobian() const
Returns _const_jacobian (whether a MOOSE object has specified that the Jacobian is the same as the pr...
virtual void addMeshDivision(const std::string &type, const std::string &name, InputParameters &params)
Add a MeshDivision.
bool checkingUOAuxState() const
Return a flag to indicate whether we are executing user objects and auxliary kernels for state check ...
void resetFailNextSystemConvergenceCheck()
Tell the problem that the system convergence check(s) may proceed as normal.
const bool _show_invalid_solution_console
void setCheckResidualForNans(bool check_residual_for_nans)
Setter for residual NaN/Inf checking.
virtual void prepareNeighborShapes(unsigned int var, const THREAD_ID tid) override
const bool _allow_ics_during_restart
virtual void addKokkosVectorPostprocessor(const std::string &pp_name, const std::string &name, InputParameters &parameters)
virtual Moose::Kokkos::Function getKokkosFunction(const std::string &name)
Get a Kokkos function in an abstract type.
Interface for interpolation methods that provide matrix and RHS contributions for advected face value...
Abstract base class for interpolation methods that produce a scalar face value from adjacent cell val...
Warehouse for storing finite volume initial conditions.
Registered base class for linear FV interpolation objects.
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
InputParameters getValidParams(const std::string &name) const
Get valid parameters for the object.
Definition Factory.C:68
Base class for function objects.
Definition Function.h:30
GeometricSearchType
Used to select groups of geometric search objects to update.
Warehouse for storing initial conditions.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
T & set(const std::string &name, bool quiet_mode=false)
Returns a writable reference to the named parameters.
Base class for deriving any boundary condition of a integrated type.
Base class for implementing interface user objects.
Base class for user objects executed on all element sides internal to one or more blocks,...
Helper class for holding the preconditioning blocks to fill.
This is the common base class for the three main kernel types implemented in MOOSE,...
Definition KernelBase.h:29
Linear system to be solved.
Proxy for accessing MaterialPropertyStorage.
Registry class for material property IDs and names.
Stores the stateful material properties computed by materials.
MaterialBase objects are special in that they have additional objects created automatically (see FEPr...
Materials compute MaterialProperties.
Definition Material.h:36
Interface for notifications that the mesh has changed.
Interface for objects acting when the mesh has been displaced.
Base class for MeshDivision objects.
OutputWarehouse & getOutputWarehouse()
Get the OutputWarehouse objects.
Definition MooseApp.C:2409
Executor * getExecutor() const
Definition MooseApp.h:341
TheWarehouse & theWarehouse()
Definition MooseApp.h:143
const InputParameters & parameters() const
Get the parameters of the object.
Definition MooseBase.h:131
const std::string & type() const
Get the type of this class.
Definition MooseBase.h:93
const std::string & name() const
Get the name of the class.
Definition MooseBase.h:103
Class for containing MooseEnum item information.
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type It sho...
Definition MooseEnum.h:55
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
Definition MooseMesh.h:95
std::shared_ptr< T > getActiveObject(const std::string &name, THREAD_ID tid=0) const
bool hasActiveObjects(THREAD_ID tid=0) const
A storage container for MooseObjects that inherit from SetupInterface.
Every object that can be built by the factory should be derived from this class.
Definition MooseObject.h:31
MooseApp & _app
The MOOSE application this is associated with.
Definition MooseBase.h:375
This class provides an interface for common operations on field variables of both FE and FV types wit...
Class for scalar variables (they are different).
The Kokkos array class.
The Kokkos assembly class.
The Kokkos FE system class.
The abstract class that provides polymorphic interfaces for a function.
The Kokkos class responsible for allocating and storing Kokkos material properties.
The Kokkos base system class.
A struct for storing the various types of petsc options and values.
Base class for creating new nodally-based mortar user objects.
A MultiApp represents one or more MOOSE applications that are running simultaneously.
Definition MultiApp.h:116
This is a "smart" enum class intended to replace many of the shortcomings in the C++ enum type.
A user object that runs over all the nodes and does an aggregation step to compute a single value.
Nonlinear system to be solved.
Nonlinear system to be solved.
void allowOutput(bool state)
Ability to enable/disable output calls This is private, users should utilize FEProblemBase::allowOutp...
Positions objects are under the hood Reporters.
Definition Positions.h:21
Base class for all Postprocessors.
Interface for objects that need parallel consistent random numbers without patterns over the course o...
This is a helper class for managing the storage of declared Reporter object values.
Wrapper class that owns a libMesh EquationSystem and adds advanced restart capability to it.
libMesh::EquationSystems & es()
Wrapper class for restartable data that is "managed.
Definition Restartable.h:43
A class for creating restricted objects.
Definition Restartable.h:29
This is the base class for Samplers as used within the Stochastic Tools module.
Definition Sampler.h:52
Warehouse for storing scalar initial conditions.
InitialConditions are objects that set the initial value of variables.
Base class for user objects executed one or more sidesets, which may be on the outer boundary of the ...
The SolutionInvalidity will contain all the information about the occurrence(s) of solution invalidit...
Generic class for solving transient nonlinear problems.
Definition SubProblem.h:79
Factory & _factory
The Factory for building objects.
std::vector< VectorTag > getVectorTags(const std::set< TagID > &tag_ids) const
Definition SubProblem.C:173
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...
bool computingNonlinearResid() const
Returns true if the problem is in the process of computing the nonlinear residual.
Definition SubProblem.h:715
bool haveADObjects() const
Method for reading wehther we have any ad objects.
Definition SubProblem.h:779
const bool & currentlyComputingResidual() const
Returns true if the problem is in the process of computing the residual.
Definition SubProblem.h:728
bool automaticScaling() const
Automatic scaling getter.
Base class for a system (of equations)
Definition SystemBase.h:87
QueryCache is a convenient way to construct and pass around (possible partially constructed) warehous...
QueryCache & condition(Args &&... args)
Adds a new condition to the query.
TheWarehouse is a container for MooseObjects that allows querying/filtering over various customizeabl...
Query query()
query creates and returns an initialized a query object for querying objects from the warehouse.
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...
Base class for all Transfer objects.
Definition Transfer.h:40
MultiApp Implementation for Transient Apps.
Base class for user-specific data.
Definition UserObject.h:20
Base class for Postprocessors that produce a vector of values.
This is the XFEMInterface class.
void setSinglePetscOption(const std::string &name, const std::string &value="", FEProblemBase *const problem=nullptr)
A wrapper function for dealing with different versions of PetscOptionsSetValue.
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
@ VAR_FIELD_ANY
Definition MooseTypes.h:781
AuxGroup
Flag for AuxKernel related execution type.
Definition MooseTypes.h:758
const SubdomainID ANY_BLOCK_ID
Definition MooseTypes.C:19
MaterialDataType
MaterialData types.
Definition MooseTypes.h:746
SolutionIterationType
Definition MooseTypes.h:270
VarKindType
Framework-wide stuff.
Definition MooseTypes.h:769
@ VAR_ANY
Definition MooseTypes.h:772
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
unsigned int n_threads()
State argument for evaluating functors.
Per-mortar-interface configuration.