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;
103class Convergence;
105class MortarUserObject;
107
108namespace Moose
109{
110class FunctionBase;
111}
112
113#ifdef MOOSE_KOKKOS_ENABLED
114namespace Moose::Kokkos
115{
117class Function;
118class UserObject;
119}
120#endif
121
122// libMesh forward declarations
123namespace libMesh
124{
125class CouplingMatrix;
126class NonlinearImplicitSystem;
127class LinearImplicitSystem;
128} // namespace libMesh
129
131{
132 ITERATING = 0,
133 // CONVERGED_RTOL_NORMAL = 1,
134 // CONVERGED_ATOL_NORMAL = 9,
135 CONVERGED_RTOL = 2,
136 CONVERGED_ATOL = 3,
137 CONVERGED_ITS = 4,
138 // CONVERGED_CG_NEG_CURVE = 5,
139 // CONVERGED_CG_CONSTRAINED = 6,
140 // CONVERGED_STEP_LENGTH = 7,
141 // CONVERGED_HAPPY_BREAKDOWN = 8,
142 DIVERGED_NULL = -2,
143 // DIVERGED_ITS = -3,
144 // DIVERGED_DTOL = -4,
145 // DIVERGED_BREAKDOWN = -5,
146 // DIVERGED_BREAKDOWN_BICG = -6,
147 // DIVERGED_NONSYMMETRIC = -7,
148 // DIVERGED_INDEFINITE_PC = -8,
150 // DIVERGED_INDEFINITE_MAT = -10
152};
153
159{
160public:
162
164 virtual ~FEProblemBase();
165
169 [[nodiscard]] bool initialized() const { return _initialized; }
170
172 {
173 FALSE,
174 TRUE,
175 OFF,
176 ON,
177 SKIP_LIST,
178 ONLY_LIST,
179 };
180
181 virtual libMesh::EquationSystems & es() override { return _req.set().es(); }
182 virtual MooseMesh & mesh() override { return _mesh; }
183 virtual const MooseMesh & mesh() const override { return _mesh; }
184 const MooseMesh & mesh(bool use_displaced) const override;
185 MooseMesh & mesh(bool use_displaced);
186
187 void setCoordSystem(const std::vector<SubdomainName> & blocks, const MultiMooseEnum & coord_sys);
188 void setAxisymmetricCoordAxis(const MooseEnum & rz_coord_axis);
189
196
198
204 void setCouplingMatrix(std::unique_ptr<libMesh::CouplingMatrix> cm,
205 const unsigned int nl_sys_num);
206
207 // DEPRECATED METHOD
208 void setCouplingMatrix(libMesh::CouplingMatrix * cm, const unsigned int nl_sys_num);
209
210 const libMesh::CouplingMatrix * couplingMatrix(const unsigned int nl_sys_num) const override;
211
214
215 bool
216 areCoupled(const unsigned int ivar, const unsigned int jvar, const unsigned int nl_sys_num) const;
217
222
230
231#ifndef NDEBUG
232 virtual bool checkResidualForNans() const override { return _check_residual_for_nans; }
233
235 void setCheckResidualForNans(bool check_residual_for_nans)
236 {
237 _check_residual_for_nans = check_residual_for_nans;
238 }
239#endif
240
247
248 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>> &
249 couplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num);
250 std::vector<std::pair<MooseVariableFieldBase *, MooseVariableFieldBase *>> &
251 nonlocalCouplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num);
252 const std::vector<std::pair<MooseVariableFieldBase *, MooseVariableScalar *>> &
253 fieldScalarCouplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num) const;
254
255 virtual bool hasVariable(const std::string & var_name) const override;
256 // NOTE: hasAuxiliaryVariable defined in parent class
257 bool hasSolverVariable(const std::string & var_name) const;
259 virtual const MooseVariableFieldBase &
260 getVariable(const THREAD_ID tid,
261 const std::string & var_name,
263 Moose::VarFieldType expected_var_field_type =
266 const std::string & var_name) override;
267 virtual MooseVariable & getStandardVariable(const THREAD_ID tid,
268 const std::string & var_name) override;
270 const std::string & var_name) override;
272 const std::string & var_name) override;
273
274 virtual bool hasScalarVariable(const std::string & var_name) const override;
276 const std::string & var_name) override;
277 virtual libMesh::System & getSystem(const std::string & var_name) override;
278
281
288 virtual void setActiveElementalMooseVariables(const std::set<MooseVariableFEBase *> & moose_vars,
289 const THREAD_ID tid) override;
290
298 virtual void clearActiveElementalMooseVariables(const THREAD_ID tid) override;
299
300 virtual void clearActiveFEVariableCoupleableMatrixTags(const THREAD_ID tid) override;
301
302 virtual void clearActiveFEVariableCoupleableVectorTags(const THREAD_ID tid) override;
303
304 virtual void setActiveFEVariableCoupleableVectorTags(std::set<TagID> & vtags,
305 const THREAD_ID tid) override;
306
307 virtual void setActiveFEVariableCoupleableMatrixTags(std::set<TagID> & mtags,
308 const THREAD_ID tid) override;
309
310 virtual void clearActiveScalarVariableCoupleableMatrixTags(const THREAD_ID tid) override;
311
312 virtual void clearActiveScalarVariableCoupleableVectorTags(const THREAD_ID tid) override;
313
314 virtual void setActiveScalarVariableCoupleableVectorTags(std::set<TagID> & vtags,
315 const THREAD_ID tid) override;
316
317 virtual void setActiveScalarVariableCoupleableMatrixTags(std::set<TagID> & mtags,
318 const THREAD_ID tid) override;
319
321 libMesh::Order order,
325 bool allow_negative_qweights = true);
326
335
337
341 unsigned int getMaxQps() const;
342
347
353 void setVariableAllDoFMap(const std::vector<const MooseVariableFEBase *> & moose_vars);
354
355 const std::vector<const MooseVariableFEBase *> &
357 {
358 return _uo_jacobian_moose_vars[tid];
359 }
360
361 virtual Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) override;
362 virtual const Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) const override;
363
364#ifdef MOOSE_KOKKOS_ENABLED
367#endif
368
372 virtual std::vector<VariableName> getVariableNames();
373
374 void initialSetup() override;
376 void timestepSetup() override;
377 void customSetup(const ExecFlagType & exec_type) override;
378 void residualSetup() override;
379 void jacobianSetup() override;
380
381 virtual void prepare(const Elem * elem, const THREAD_ID tid) override;
382 virtual void prepareFace(const Elem * elem, const THREAD_ID tid) override;
383 virtual void prepare(const Elem * elem,
384 unsigned int ivar,
385 unsigned int jvar,
386 const std::vector<dof_id_type> & dof_indices,
387 const THREAD_ID tid) override;
388
389 virtual void setCurrentSubdomainID(const Elem * elem, const THREAD_ID tid) override;
390 virtual void
391 setNeighborSubdomainID(const Elem * elem, unsigned int side, const THREAD_ID tid) override;
392 virtual void setNeighborSubdomainID(const Elem * elem, const THREAD_ID tid);
393 virtual void prepareAssembly(const THREAD_ID tid) override;
397 virtual void prepareAssemblyNeighbor(const THREAD_ID tid);
398
399 virtual void addGhostedElem(dof_id_type elem_id) override;
400 virtual void addGhostedBoundary(BoundaryID boundary_id) override;
401 virtual void ghostGhostedBoundaries() override;
402
403 virtual void sizeZeroes(unsigned int size, const THREAD_ID tid);
404 virtual bool reinitDirac(const Elem * elem, const THREAD_ID tid) override;
405
406 virtual void reinitElem(const Elem * elem, const THREAD_ID tid) override;
407 virtual void reinitElemPhys(const Elem * elem,
408 const std::vector<Point> & phys_points_in_elem,
409 const THREAD_ID tid) override;
410 void reinitElemFace(const Elem * elem, unsigned int side, BoundaryID, const THREAD_ID tid);
411 virtual void reinitElemFace(const Elem * elem, unsigned int side, const THREAD_ID tid) override;
412 virtual void reinitLowerDElem(const Elem * lower_d_elem,
413 const THREAD_ID tid,
414 const std::vector<Point> * const pts = nullptr,
415 const std::vector<Real> * const weights = nullptr) override;
416 virtual void reinitNode(const Node * node, const THREAD_ID tid) override;
417 virtual void reinitNodeFace(const Node * node, BoundaryID bnd_id, 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; }
582 virtual Real & timeOlder() const { return _time_older; }
583 virtual int & timeStep() const { return _t_step; }
584 virtual Real & dt() const { return _dt; }
585 virtual Real & dtOld() const { return _dt_old; }
589 Real getTimeFromStateArg(const Moose::StateArg & state) const;
590
591 virtual void transient(bool trans) { _transient = trans; }
592 virtual bool isTransient() const override { return _transient; }
593
594 virtual void addTimeIntegrator(const std::string & type,
595 const std::string & name,
597 virtual void
598 addPredictor(const std::string & type, const std::string & name, InputParameters & parameters);
599
600 virtual void copySolutionsBackwards();
601
606
611 virtual void advanceState();
612
613 virtual void restoreSolutions();
614
621
629
633 virtual void saveOldSolutions();
634
638 virtual void restoreOldSolutions();
639
645 void needSolutionState(unsigned int oldest_needed, Moose::SolutionIterationType iteration_type);
646
652 bool hasSolutionState(unsigned int state, Moose::SolutionIterationType iteration_type) const;
653
660 virtual void outputStep(ExecFlagType type);
661
665 virtual void postExecute();
666
668
674 void allowOutput(bool state);
675 template <typename T>
676 void allowOutput(bool state);
678
687 void forceOutput();
688
694
699
703 void logAdd(const std::string & system,
704 const std::string & name,
705 const std::string & type,
706 const InputParameters & params) const;
707
708 // Function /////
709 virtual void
710 addFunction(const std::string & type, const std::string & name, InputParameters & parameters);
711 virtual bool hasFunction(const std::string & name, const THREAD_ID tid = 0);
712 virtual Function & getFunction(const std::string & name, const THREAD_ID tid = 0);
713
714#ifdef MOOSE_KOKKOS_ENABLED
721 virtual void addKokkosFunction(const std::string & type,
722 const std::string & name,
729 virtual bool hasKokkosFunction(const std::string & name) const;
735 virtual Moose::Kokkos::Function getKokkosFunction(const std::string & name);
742 template <typename T>
743 T & getKokkosFunction(const std::string & name);
744#endif
745
747 virtual void
748 addMeshDivision(const std::string & type, const std::string & name, InputParameters & params);
750 MeshDivision & getMeshDivision(const std::string & name, const THREAD_ID tid = 0) const;
751
753 virtual void
754 addConvergence(const std::string & type, const std::string & name, InputParameters & parameters);
756 virtual Convergence & getConvergence(const std::string & name, const THREAD_ID tid = 0) const;
758 virtual const std::vector<std::shared_ptr<Convergence>> &
759 getConvergenceObjects(const THREAD_ID tid = 0) const;
761 virtual bool hasConvergence(const std::string & name, const THREAD_ID tid = 0) const;
799 {
800 return _steady_state_convergence_name.has_value();
801 }
809 virtual void addDefaultNonlinearConvergence(const InputParameters & params);
817 virtual bool onlyAllowDefaultNonlinearConvergence() const { return false; }
834
838 virtual void addLineSearch(const InputParameters & /*parameters*/)
839 {
840 mooseError("Line search not implemented for this problem type yet.");
841 }
842
846 virtual void lineSearch();
847
851 LineSearch * getLineSearch() override { return _line_search.get(); }
852
856 virtual void
857 addDistribution(const std::string & type, const std::string & name, InputParameters & parameters);
858 virtual bool hasDistribution(const std::string & name) const;
859 virtual Distribution & getDistribution(const std::string & name);
860
864 virtual void
865 addSampler(const std::string & type, const std::string & name, InputParameters & parameters);
866 virtual Sampler & getSampler(const std::string & name, const THREAD_ID tid = 0);
867
868 // NL /////
869 NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num);
870 const NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num) const;
871 void setCurrentNonlinearSystem(const unsigned int nl_sys_num);
874
875 virtual const SystemBase & systemBaseNonlinear(const unsigned int sys_num) const override;
876 virtual SystemBase & systemBaseNonlinear(const unsigned int sys_num) override;
877
878 virtual const SystemBase & systemBaseSolver(const unsigned int sys_num) const override;
879 virtual SystemBase & systemBaseSolver(const unsigned int sys_num) override;
880
881 virtual const SystemBase & systemBaseAuxiliary() const override;
882 virtual SystemBase & systemBaseAuxiliary() override;
883
884 virtual NonlinearSystem & getNonlinearSystem(const unsigned int sys_num);
885
886#ifdef MOOSE_KOKKOS_ENABLED
898
913
920 Moose::Kokkos::System & getKokkosSystem(const unsigned int sys_num);
921 const Moose::Kokkos::System & getKokkosSystem(const unsigned int sys_num) const;
923
930 Moose::Kokkos::FESystem & getKokkosFESystem(const unsigned int sys_num);
931 const Moose::Kokkos::FESystem & getKokkosFESystem(const unsigned int sys_num) const;
933#endif
934
939 virtual const SystemBase & getSystemBase(const unsigned int sys_num) const;
940
945 virtual SystemBase & getSystemBase(const unsigned int sys_num);
946
951 SystemBase & getSystemBase(const std::string & sys_name);
952
957 LinearSystem & getLinearSystem(unsigned int sys_num);
958
963 const LinearSystem & getLinearSystem(unsigned int sys_num) const;
964
969 SolverSystem & getSolverSystem(unsigned int sys_num);
970
975 const SolverSystem & getSolverSystem(unsigned int sys_num) const;
976
981 void setCurrentLinearSystem(unsigned int sys_num);
982
986 const LinearSystem & currentLinearSystem() const;
987
992 virtual const SystemBase & systemBaseLinear(unsigned int sys_num) const override;
993
998 virtual SystemBase & systemBaseLinear(unsigned int sys_num) override;
999
1006 virtual void
1007 addVariable(const std::string & var_type, const std::string & var_name, InputParameters & params);
1008
1009 virtual void addKernel(const std::string & kernel_name,
1010 const std::string & name,
1012 virtual void addHDGKernel(const std::string & kernel_name,
1013 const std::string & name,
1015 virtual void addNodalKernel(const std::string & kernel_name,
1016 const std::string & name,
1018 virtual void addScalarKernel(const std::string & kernel_name,
1019 const std::string & name,
1021 virtual void addBoundaryCondition(const std::string & bc_name,
1022 const std::string & name,
1024
1025#ifdef MOOSE_KOKKOS_ENABLED
1026 virtual void addKokkosKernel(const std::string & kernel_name,
1027 const std::string & name,
1029 virtual void addKokkosNodalKernel(const std::string & kernel_name,
1030 const std::string & name,
1032 virtual void addKokkosBoundaryCondition(const std::string & bc_name,
1033 const std::string & name,
1035 virtual void addKokkosLinearFVKernel(const std::string & kernel_name,
1036 const std::string & name,
1038 virtual void addKokkosLinearFVBC(const std::string & bc_name,
1039 const std::string & name,
1041#endif
1042
1043 virtual void
1044 addConstraint(const std::string & c_name, const std::string & name, InputParameters & parameters);
1045
1047 {
1048 parameters.set<FEProblemBase *>("_fe_problem_base") = this;
1049 }
1050
1051 // Aux /////
1052
1059 virtual void addAuxVariable(const std::string & var_type,
1060 const std::string & var_name,
1061 InputParameters & params);
1062
1066 virtual void addElementalFieldVariable(const std::string & var_type,
1067 const std::string & var_name,
1068 InputParameters & params);
1069
1070 virtual void addAuxVariable(const std::string & var_name,
1071 const libMesh::FEType & type,
1072 const std::set<SubdomainID> * const active_subdomains = NULL);
1073 virtual void addAuxArrayVariable(const std::string & var_name,
1074 const libMesh::FEType & type,
1075 unsigned int components,
1076 const std::set<SubdomainID> * const active_subdomains = NULL);
1077 virtual void addAuxScalarVariable(const std::string & var_name,
1078 libMesh::Order order,
1079 Real scale_factor = 1.,
1080 const std::set<SubdomainID> * const active_subdomains = NULL);
1081 virtual void addAuxKernel(const std::string & kernel_name,
1082 const std::string & name,
1084 virtual void addAuxScalarKernel(const std::string & kernel_name,
1085 const std::string & name,
1087
1088#ifdef MOOSE_KOKKOS_ENABLED
1089 virtual void addKokkosAuxKernel(const std::string & kernel_name,
1090 const std::string & name,
1092#endif
1093
1095
1096 // Dirac /////
1097 virtual void addDiracKernel(const std::string & kernel_name,
1098 const std::string & name,
1100
1101 // DG /////
1102 virtual void addDGKernel(const std::string & kernel_name,
1103 const std::string & name,
1105 // FV /////
1106 virtual void addFVKernel(const std::string & kernel_name,
1107 const std::string & name,
1109
1110 virtual void addLinearFVKernel(const std::string & kernel_name,
1111 const std::string & name,
1113 virtual void
1114 addFVBC(const std::string & fv_bc_name, const std::string & name, InputParameters & parameters);
1115 virtual void addLinearFVBC(const std::string & fv_bc_name,
1116 const std::string & name,
1118
1119 virtual void addFVInterfaceKernel(const std::string & fv_ik_name,
1120 const std::string & name,
1122
1123 // Interface /////
1124 virtual void addInterfaceKernel(const std::string & kernel_name,
1125 const std::string & name,
1127
1128 // IC /////
1129 virtual void addInitialCondition(const std::string & ic_name,
1130 const std::string & name,
1138 virtual void addFVInitialCondition(const std::string & ic_name,
1139 const std::string & name,
1141
1142 void projectSolution();
1143
1148 unsigned short getCurrentICState();
1149
1159 libMesh::ConstElemRange & elem_range,
1160 ConstBndNodeRange & bnd_node_range,
1161 const std::optional<std::set<VariableName>> & target_vars = std::nullopt);
1162
1172 void projectFunctionOnCustomRange(ConstElemRange & elem_range,
1173 Number (*func)(const Point &,
1174 const libMesh::Parameters &,
1175 const std::string &,
1176 const std::string &),
1177 Gradient (*func_grad)(const Point &,
1178 const libMesh::Parameters &,
1179 const std::string &,
1180 const std::string &),
1181 const libMesh::Parameters & params,
1182 const std::vector<VariableName> & target_vars);
1183
1184 // Materials
1185 virtual void addMaterial(const std::string & material_name,
1186 const std::string & name,
1188 virtual void addMaterialHelper(std::vector<MaterialWarehouse *> warehouse,
1189 const std::string & material_name,
1190 const std::string & name,
1192 virtual void addInterfaceMaterial(const std::string & material_name,
1193 const std::string & name,
1195 virtual void addFunctorMaterial(const std::string & functor_material_name,
1196 const std::string & name,
1198
1199#ifdef MOOSE_KOKKOS_ENABLED
1200 virtual void addKokkosMaterial(const std::string & material_name,
1201 const std::string & name,
1203#endif
1204
1216 void prepareMaterials(const std::unordered_set<unsigned int> & consumer_needed_mat_props,
1217 const SubdomainID blk_id,
1218 const THREAD_ID tid);
1219
1220 void reinitMaterials(SubdomainID blk_id, const THREAD_ID tid, bool swap_stateful = true);
1221
1231 void reinitMaterialsFace(SubdomainID blk_id,
1232 const THREAD_ID tid,
1233 bool swap_stateful = true,
1234 const std::deque<MaterialBase *> * reinit_mats = nullptr);
1235
1247 void
1248 reinitMaterialsFaceOnBoundary(const BoundaryID boundary_id,
1249 const SubdomainID blk_id,
1250 const THREAD_ID tid,
1251 const bool swap_stateful = true,
1252 const std::deque<MaterialBase *> * const reinit_mats = nullptr);
1253
1265 void
1267 const SubdomainID blk_id,
1268 const THREAD_ID tid,
1269 const bool swap_stateful = true,
1270 const std::deque<MaterialBase *> * const reinit_mats = nullptr);
1271
1282 const THREAD_ID tid,
1283 bool swap_stateful = true,
1284 const std::deque<MaterialBase *> * reinit_mats = nullptr);
1285
1298 void reinitMaterialsBoundary(BoundaryID boundary_id,
1299 const THREAD_ID tid,
1300 bool swap_stateful = true,
1301 const std::deque<MaterialBase *> * reinit_mats = nullptr);
1302
1303 void
1304 reinitMaterialsInterface(BoundaryID boundary_id, const THREAD_ID tid, bool swap_stateful = true);
1305
1306#ifdef MOOSE_KOKKOS_ENABLED
1307 void prepareKokkosMaterials(const std::unordered_set<unsigned int> & consumer_needed_mat_props);
1309#endif
1310
1311 /*
1312 * Swap back underlying data storing stateful material properties
1313 */
1314 virtual void swapBackMaterials(const THREAD_ID tid);
1315 virtual void swapBackMaterialsFace(const THREAD_ID tid);
1316 virtual void swapBackMaterialsNeighbor(const THREAD_ID tid);
1317
1324 void setActiveMaterialProperties(const std::unordered_set<unsigned int> & mat_prop_ids,
1325 const THREAD_ID tid);
1326
1335 bool hasActiveMaterialProperties(const THREAD_ID tid) const;
1336
1343
1355 template <typename T>
1356 std::vector<std::shared_ptr<T>> addObject(const std::string & type,
1357 const std::string & name,
1359 const bool threaded = true,
1360 const std::string & var_param_name = "variable");
1361
1362 // Postprocessors /////
1363 virtual void addPostprocessor(const std::string & pp_name,
1364 const std::string & name,
1366
1367 // VectorPostprocessors /////
1368 virtual void addVectorPostprocessor(const std::string & pp_name,
1369 const std::string & name,
1371
1380 virtual void
1381 addReporter(const std::string & type, const std::string & name, InputParameters & parameters);
1382
1383#ifdef MOOSE_KOKKOS_ENABLED
1384 virtual void addKokkosPostprocessor(const std::string & pp_name,
1385 const std::string & name,
1387 virtual void addKokkosVectorPostprocessor(const std::string & pp_name,
1388 const std::string & name,
1390 virtual void addKokkosReporter(const std::string & type,
1391 const std::string & name,
1393#endif
1394
1402 const ReporterData & getReporterData() const { return _reporter_data; }
1403
1410
1411 // UserObjects /////
1412 virtual std::vector<std::shared_ptr<UserObject>> addUserObject(
1413 const std::string & user_object_name, const std::string & name, InputParameters & parameters);
1414
1420 template <class T>
1421 T & getUserObject(const std::string & name, unsigned int tid = 0) const
1422 {
1423 std::vector<T *> objs;
1424 theWarehouse()
1425 .query()
1426 .condition<AttribSystem>("UserObject")
1427 .condition<AttribThread>(tid)
1428 .condition<AttribName>(name)
1429 .queryInto(objs);
1430 if (objs.empty())
1431 mooseError("Unable to find user object with name '" + name + "'");
1432 return *(objs[0]);
1433 }
1434
1441 const UserObject & getUserObjectBase(const std::string & name, const THREAD_ID tid = 0) const;
1442
1448 bool hasUserObject(const std::string & name) const;
1449
1450#ifdef MOOSE_KOKKOS_ENABLED
1451 virtual void addKokkosUserObject(const std::string & user_object_name,
1452 const std::string & name,
1454
1460 template <class T>
1461 const T & getKokkosUserObject(const std::string & name) const
1462 {
1463 std::vector<T *> objs;
1464 theWarehouse()
1465 .query()
1466 .condition<AttribSystem>("KokkosUserObject")
1467 .condition<AttribName>(name)
1468 .queryInto(objs);
1469 if (objs.empty())
1470 mooseError("Unable to find Kokkos user object with name '" + name + "'");
1471 return *(objs[0]);
1472 }
1473
1479 bool hasKokkosUserObject(const std::string & name) const;
1480#endif
1481
1487 void checkUserObjectNameCollision(const std::string & name, const std::string & type) const;
1488
1494 const Positions & getPositionsObject(const std::string & name) const;
1495
1502 virtual void addFVInterpolationMethod(const std::string & method_type,
1503 const std::string & name,
1505
1512 virtual void addFVGradientMethod(const std::string & method_type,
1513 const std::string & name,
1515
1521 FVGradientMethod & getFVGradientMethod(const GradientMethodName & name, const THREAD_ID tid = 0);
1522
1528 const FVGradientMethod & getFVGradientMethod(const GradientMethodName & name,
1529 const THREAD_ID tid = 0) const;
1530
1534 bool hasFVGradientMethod(const GradientMethodName & name) const;
1535
1541 const FVInterpolationMethod & getFVInterpolationMethod(const InterpolationMethodName & name,
1542 const THREAD_ID tid = 0) const;
1543
1550 getFVFaceInterpolationMethod(const InterpolationMethodName & name, const THREAD_ID tid = 0) const;
1551
1558 getFVAdvectedInterpolationMethod(const InterpolationMethodName & name,
1559 const THREAD_ID tid = 0) const;
1560
1564 bool hasFVInterpolationMethod(const InterpolationMethodName & name) const;
1565
1574 bool hasPostprocessorValueByName(const PostprocessorName & name) const;
1575
1581 const Postprocessor & getPostprocessorObjectByName(const PostprocessorName & object_name,
1582 const THREAD_ID tid = 0) const;
1583
1594 const PostprocessorValue & getPostprocessorValueByName(const PostprocessorName & name,
1595 std::size_t t_index = 0) const;
1596
1611 void setPostprocessorValueByName(const PostprocessorName & name,
1612 const PostprocessorValue & value,
1613 std::size_t t_index = 0);
1614
1618 bool hasPostprocessor(const std::string & name) const;
1619
1631 getVectorPostprocessorValueByName(const std::string & object_name,
1632 const std::string & vector_name,
1633 std::size_t t_index = 0) const;
1634
1642 void setVectorPostprocessorValueByName(const std::string & object_name,
1643 const std::string & vector_name,
1644 const VectorPostprocessorValue & value,
1645 std::size_t t_index = 0);
1646
1655 const VectorPostprocessor & getVectorPostprocessorObjectByName(const std::string & object_name,
1656 const THREAD_ID tid = 0) const;
1657
1659
1662 bool hasMultiApps() const { return _multi_apps.hasActiveObjects(); }
1663 bool hasMultiApps(ExecFlagType type) const;
1664 bool hasMultiApp(const std::string & name) const;
1666
1667 // Dampers /////
1668 virtual void addDamper(const std::string & damper_name,
1669 const std::string & name,
1671 void setupDampers();
1672
1676 bool hasDampers() { return _has_dampers; }
1677
1678 // Indicators /////
1679 virtual void addIndicator(const std::string & indicator_name,
1680 const std::string & name,
1682
1683 // Markers //////
1684 virtual void addMarker(const std::string & marker_name,
1685 const std::string & name,
1687
1691 virtual void addMultiApp(const std::string & multi_app_name,
1692 const std::string & name,
1694
1698 std::shared_ptr<MultiApp> getMultiApp(const std::string & multi_app_name) const;
1699
1703 std::vector<std::shared_ptr<Transfer>> getTransfers(ExecFlagType type,
1704 Transfer::DIRECTION direction) const;
1705 std::vector<std::shared_ptr<Transfer>> getTransfers(Transfer::DIRECTION direction) const;
1706
1712
1720 Transfer::DIRECTION direction,
1721 const MultiAppName & source_app = "");
1722
1726 bool execMultiApps(ExecFlagType type, bool auto_advance = true);
1727
1732 unsigned int numConcurrentMultiApps() const { return _num_concurrent_multiapps; }
1733
1743
1744 void finalizeMultiApps();
1745
1750
1756 {
1757 mooseDeprecated("Deprecated method; use finishMultiAppStep and/or incrementMultiAppTStep "
1758 "depending on your purpose");
1760 }
1761
1766 void finishMultiAppStep(ExecFlagType type, bool recurse_through_multiapp_levels = false);
1767
1772
1777 void restoreMultiApps(ExecFlagType type, bool force = false);
1778
1783
1787 virtual void addTransfer(const std::string & transfer_name,
1788 const std::string & name,
1790
1796
1802
1809 virtual Real computeResidualL2Norm();
1810
1815 const NumericVector<libMesh::Number> & soln,
1816 NumericVector<libMesh::Number> & residual);
1822 const NumericVector<libMesh::Number> & soln,
1823 NumericVector<libMesh::Number> & residual);
1824
1828 virtual void computeResidual(const NumericVector<libMesh::Number> & soln,
1829 NumericVector<libMesh::Number> & residual,
1830 const unsigned int nl_sys_num);
1831
1835 void computeResidualAndJacobian(const NumericVector<libMesh::Number> & soln,
1836 NumericVector<libMesh::Number> & residual,
1838
1842 virtual void computeResidualTag(const NumericVector<libMesh::Number> & soln,
1843 NumericVector<libMesh::Number> & residual,
1844 TagID tag);
1848 virtual void computeResidualType(const NumericVector<libMesh::Number> & soln,
1849 NumericVector<libMesh::Number> & residual,
1850 TagID tag);
1851
1856 virtual void computeResidualInternal(const NumericVector<libMesh::Number> & soln,
1857 NumericVector<libMesh::Number> & residual,
1858 const std::set<TagID> & tags);
1862 virtual void computeResidualTags(const std::set<TagID> & tags);
1863
1868 const NumericVector<libMesh::Number> & soln,
1873 virtual void computeJacobian(const NumericVector<libMesh::Number> & soln,
1875 const unsigned int nl_sys_num);
1876
1880 virtual void computeJacobianTag(const NumericVector<libMesh::Number> & soln,
1882 TagID tag);
1883
1887 virtual void computeJacobianInternal(const NumericVector<libMesh::Number> & soln,
1889 const std::set<TagID> & tags);
1890
1894 virtual void computeJacobianTags(const std::set<TagID> & tags);
1895
1904 virtual void computeJacobianBlocks(std::vector<JacobianBlock *> & blocks,
1905 const unsigned int nl_sys_num);
1906
1921 libMesh::System & precond_system,
1922 unsigned int ivar,
1923 unsigned int jvar);
1924
1936 NumericVector<libMesh::Number> & rhs,
1937 const bool compute_gradients = true);
1938
1948 void computeLinearSystemTags(const NumericVector<libMesh::Number> & soln,
1949 const std::set<TagID> & vector_tags,
1950 const std::set<TagID> & matrix_tags,
1951 const bool compute_gradients = true);
1952
1953 virtual Real computeDamping(const NumericVector<libMesh::Number> & soln,
1954 const NumericVector<libMesh::Number> & update);
1955
1960 virtual bool shouldUpdateSolution();
1961
1968 virtual bool updateSolution(NumericVector<libMesh::Number> & vec_solution,
1969 NumericVector<libMesh::Number> & ghosted_solution);
1970
1975 virtual void predictorCleanup(NumericVector<libMesh::Number> & ghosted_solution);
1976
1978 NumericVector<libMesh::Number> & lower,
1979 NumericVector<libMesh::Number> & upper);
1981 std::vector<NumericVector<libMesh::Number> *> & sp);
1983 std::vector<NumericVector<libMesh::Number> *> & sp);
1985 std::vector<NumericVector<libMesh::Number> *> & sp);
1987 const NumericVector<libMesh::Number> & old_soln,
1988 NumericVector<libMesh::Number> & search_direction,
1989 NumericVector<libMesh::Number> & new_soln,
1990 bool & changed_search_direction,
1991 bool & changed_new_soln);
1992
1993 virtual void computeIndicatorsAndMarkers();
1994 virtual void computeIndicators();
1995 virtual void computeMarkers();
1996
1997 virtual void addResidual(const THREAD_ID tid) override;
1998 virtual void addResidualNeighbor(const THREAD_ID tid) override;
1999 virtual void addResidualLower(const THREAD_ID tid) override;
2000 virtual void addResidualScalar(const THREAD_ID tid = 0);
2001
2002 virtual void cacheResidual(const THREAD_ID tid) override;
2003 virtual void cacheResidualNeighbor(const THREAD_ID tid) override;
2004 virtual void addCachedResidual(const THREAD_ID tid) override;
2005
2013 virtual void addCachedResidualDirectly(NumericVector<libMesh::Number> & residual,
2014 const THREAD_ID tid);
2015
2016 virtual void setResidual(NumericVector<libMesh::Number> & residual, const THREAD_ID tid) override;
2017 virtual void setResidualNeighbor(NumericVector<libMesh::Number> & residual,
2018 const THREAD_ID tid) override;
2019
2020 virtual void addJacobian(const THREAD_ID tid) override;
2021 virtual void addJacobianNeighbor(const THREAD_ID tid) override;
2022 virtual void addJacobianNeighborLowerD(const THREAD_ID tid) override;
2023 virtual void addJacobianLowerD(const THREAD_ID tid) override;
2025 unsigned int ivar,
2026 unsigned int jvar,
2027 const DofMap & dof_map,
2028 std::vector<dof_id_type> & dof_indices,
2029 const std::set<TagID> & tags,
2030 const THREAD_ID tid);
2032 unsigned int ivar,
2033 unsigned int jvar,
2034 const DofMap & dof_map,
2035 std::vector<dof_id_type> & dof_indices,
2036 std::vector<dof_id_type> & neighbor_dof_indices,
2037 const std::set<TagID> & tags,
2038 const THREAD_ID tid) override;
2039 virtual void addJacobianScalar(const THREAD_ID tid = 0);
2040 virtual void addJacobianOffDiagScalar(unsigned int ivar, const THREAD_ID tid = 0);
2041
2042 virtual void cacheJacobian(const THREAD_ID tid) override;
2043 virtual void cacheJacobianNeighbor(const THREAD_ID tid) override;
2044 virtual void addCachedJacobian(const THREAD_ID tid) override;
2045
2046 virtual void prepareShapes(unsigned int var, const THREAD_ID tid) override;
2047 virtual void prepareFaceShapes(unsigned int var, const THREAD_ID tid) override;
2048 virtual void prepareNeighborShapes(unsigned int var, const THREAD_ID tid) override;
2049
2050 // Displaced problem /////
2051 virtual void addDisplacedProblem(std::shared_ptr<DisplacedProblem> displaced_problem);
2052 virtual std::shared_ptr<const DisplacedProblem> getDisplacedProblem() const
2053 {
2054 return _displaced_problem;
2055 }
2056 virtual std::shared_ptr<DisplacedProblem> getDisplacedProblem() { return _displaced_problem; }
2057
2061 virtual void updateGeomSearch(
2063 virtual void updateMortarMesh();
2064
2066 const std::pair<BoundaryID, BoundaryID> & primary_secondary_boundary_pair,
2067 const std::pair<SubdomainID, SubdomainID> & primary_secondary_subdomain_pair,
2068 bool on_displaced,
2069 bool periodic,
2070 const bool debug,
2071 const bool correct_edge_dropping,
2072 const Real minimum_projection_angle,
2073 const Mortar3DSubpatchPlane mortar_3d_subpatch_plane,
2074 const MooseEnum & triangulation,
2075 const bool triangulate_triangles,
2076 const Mortar3DQuadraturePointMapping mortar_3d_qp_mapping =
2077 Mortar3DQuadraturePointMapping::NORMAL_PROJECTION);
2078
2085 getMortarInterface(const std::pair<BoundaryID, BoundaryID> & primary_secondary_boundary_pair,
2086 const std::pair<SubdomainID, SubdomainID> & primary_secondary_subdomain_pair,
2087 bool on_displaced) const;
2088
2090 getMortarInterface(const std::pair<BoundaryID, BoundaryID> & primary_secondary_boundary_pair,
2091 const std::pair<SubdomainID, SubdomainID> & primary_secondary_subdomain_pair,
2092 bool on_displaced);
2094
2095 const std::unordered_map<std::pair<BoundaryID, BoundaryID>, MortarInterfaceConfig> &
2096 getMortarInterfaces(bool on_displaced) const;
2097
2098 virtual void possiblyRebuildGeomSearchPatches();
2099
2101
2106 void setRestartFile(const std::string & file_name);
2107
2115
2127
2128#ifdef MOOSE_KOKKOS_ENABLED
2141#endif
2143
2155
2160
2165
2169 SolverParams & solverParams(unsigned int solver_sys_num = 0);
2170
2174 const SolverParams & solverParams(unsigned int solver_sys_num = 0) const;
2175
2176#ifdef LIBMESH_ENABLE_AMR
2177 // Adaptivity /////
2179 virtual void initialAdaptMesh();
2180
2184 virtual bool adaptMesh();
2185
2189 unsigned int getNumCyclesCompleted() { return _cycles_completed; }
2190
2194 bool hasInitialAdaptivity() const { return _adaptivity.getInitialSteps() > 0; }
2195#else
2199 bool hasInitialAdaptivity() const { return false; }
2200#endif // LIBMESH_ENABLE_AMR
2201
2203 void initXFEM(std::shared_ptr<XFEMInterface> xfem);
2204
2206 std::shared_ptr<XFEMInterface> getXFEM() { return _xfem; }
2207
2209 bool haveXFEM() { return _xfem != nullptr; }
2210
2212 virtual bool updateMeshXFEM();
2213
2219 virtual bool allowMeshContractionAfterMeshChanged() const { return true; }
2220
2237 virtual void
2238 meshChanged(bool intermediate_change, bool contract_mesh, bool clean_refinement_flags);
2239
2245
2251
2257 void initElementStatefulProps(const libMesh::ConstElemRange & elem_range, const bool threaded);
2258
2259#ifdef MOOSE_KOKKOS_ENABLED
2261#endif
2262
2267 virtual void checkProblemIntegrity();
2268
2269 void registerRandomInterface(RandomInterface & random_interface, const std::string & name);
2270
2275 void setConstJacobian(bool state) { _const_jacobian = state; }
2276
2282
2291
2299
2310
2315
2317 void setVerboseProblem(bool verbose);
2318
2322 bool verboseMultiApps() const { return _verbose_multiapps; }
2323
2328
2330
2347 bool needBoundaryMaterialOnSide(BoundaryID bnd_id, const THREAD_ID tid);
2348 bool needInterfaceMaterialOnSide(BoundaryID bnd_id, const THREAD_ID tid);
2349 bool needInternalNeighborSideMaterial(SubdomainID subdomain_id, const THREAD_ID tid);
2351
2356 unsigned int subspaceDim(const std::string & prefix) const
2357 {
2358 if (_subspace_dim.count(prefix))
2359 return _subspace_dim.find(prefix)->second;
2360 else
2361 return 0;
2362 }
2363
2364 /*
2365 * Return reference to function warehouse.
2366 */
2368
2369 /*
2370 * Return a reference to the material warehouse of *all* Material objects.
2371 */
2373
2374 /*
2375 * Return a reference to the material warehouse of Material objects to be computed.
2376 */
2380
2381#ifdef MOOSE_KOKKOS_ENABLED
2382 /*
2383 * Return a reference to the material warehouse of Kokkos Material objects to be computed.
2384 */
2386#endif
2387
2395 std::shared_ptr<MaterialBase> getMaterial(std::string name,
2397 const THREAD_ID tid = 0,
2398 bool no_warn = false);
2399
2404 const THREAD_ID tid = 0,
2405 const MooseObject * object = nullptr) const;
2406
2407#ifdef MOOSE_KOKKOS_ENABLED
2412 const MooseObject * object = nullptr) const;
2413#endif
2414
2418 const std::set<const MooseObject *> &
2420
2421#ifdef MOOSE_KOKKOS_ENABLED
2425 const std::set<const MooseObject *> &
2427#endif
2428
2433
2442
2447
2453
2457 void setPreserveMatrixSparsityPattern(bool preserve);
2458
2464
2467
2474 bool acceptInvalidSolution() const;
2479
2484
2489
2492
2494
2500 const ExecFlagType & getCurrentExecuteOnFlag() const;
2503
2507 virtual void execute(const ExecFlagType & exec_type);
2508 virtual void executeAllObjects(const ExecFlagType & exec_type);
2509
2510 virtual Executor & getExecutor(const std::string & name) { return _app.getExecutor(name); }
2511
2515 virtual void computeUserObjects(const ExecFlagType & type, const Moose::AuxGroup & group);
2516
2520 virtual void computeUserObjectByName(const ExecFlagType & type,
2521 const Moose::AuxGroup & group,
2522 const std::string & name);
2523
2527 void needsPreviousNewtonIteration(bool state);
2528
2533 bool needsPreviousNewtonIteration() const;
2534
2542 const unsigned int solver_sys_num);
2543
2550 bool needsPreviousMultiAppFixedPointIterationSolution(const unsigned int solver_sys_num) const;
2551
2557
2565
2573 const unsigned int solver_sys_num);
2574
2581 bool needsPreviousMultiSystemFixedPointIterationSolution(const unsigned int solver_sys_num) const;
2582
2588
2596
2598
2601 std::vector<Real> _real_zero;
2602 std::vector<VariableValue> _scalar_zero;
2603 std::vector<VariableValue> _zero;
2604 std::vector<VariablePhiValue> _phi_zero;
2605 std::vector<MooseArray<ADReal>> _ad_zero;
2606 std::vector<VariableGradient> _grad_zero;
2607 std::vector<MooseArray<ADRealVectorValue>> _ad_grad_zero;
2608 std::vector<VariablePhiGradient> _grad_phi_zero;
2609 std::vector<VariableSecond> _second_zero;
2610 std::vector<MooseArray<ADRealTensorValue>> _ad_second_zero;
2611 std::vector<VariablePhiSecond> _second_phi_zero;
2612 std::vector<Point> _point_zero;
2613 std::vector<VectorVariableValue> _vector_zero;
2614 std::vector<VectorVariableCurl> _vector_curl_zero;
2616
2621
2625 void executeControls(const ExecFlagType & exec_type);
2626
2630 void executeSamplers(const ExecFlagType & exec_type);
2631
2635 virtual void updateActiveObjects();
2636
2643
2645
2649 bool hasJacobian() const;
2650
2655 bool constJacobian() const;
2656
2660 void addOutput(const std::string &, const std::string &, InputParameters &);
2661
2662 inline TheWarehouse & theWarehouse() const { return _app.theWarehouse(); }
2663
2667 void setSNESMFReuseBase(bool reuse, bool set_by_user)
2668 {
2670 }
2671
2676
2680 void skipExceptionCheck(bool skip_exception_check)
2681 {
2682 _skip_exception_check = skip_exception_check;
2683 }
2684
2689
2694
2695#if !PETSC_RELEASE_LESS_THAN(3, 12, 0)
2697#endif
2698
2700 virtual void setUDotRequested(const bool u_dot_requested) { _u_dot_requested = u_dot_requested; }
2701
2703 virtual void setUDotDotRequested(const bool u_dotdot_requested)
2704 {
2705 _u_dotdot_requested = u_dotdot_requested;
2706 }
2707
2709 virtual void setUDotOldRequested(const bool u_dot_old_requested)
2710 {
2711 _u_dot_old_requested = u_dot_old_requested;
2712 }
2713
2715 virtual void setUDotDotOldRequested(const bool u_dotdot_old_requested)
2716 {
2717 _u_dotdot_old_requested = u_dotdot_old_requested;
2718 }
2719
2721 virtual bool uDotRequested() { return _u_dot_requested; }
2722
2724 virtual bool uDotDotRequested() { return _u_dotdot_requested; }
2725
2727 virtual bool uDotOldRequested()
2728 {
2730 mooseError("FEProblemBase: When requesting old time derivative of solution, current time "
2731 "derivative of solution should also be stored. Please set `u_dot_requested` to "
2732 "true using setUDotRequested.");
2733
2734 return _u_dot_old_requested;
2735 }
2736
2738 virtual bool uDotDotOldRequested()
2739 {
2741 mooseError("FEProblemBase: When requesting old second time derivative of solution, current "
2742 "second time derivation of solution should also be stored. Please set "
2743 "`u_dotdot_requested` to true using setUDotDotRequested.");
2745 }
2746
2748 void haveADObjects(bool have_ad_objects) override;
2749
2750 // Whether or not we should solve this system
2751 bool shouldSolve() const { return _solve; }
2752
2758
2763
2767 virtual bool hasMortarCoupling() const { return _has_mortar; }
2768
2770 void computingNonlinearResid(bool computing_nonlinear_residual) final;
2771
2773 void setCurrentlyComputingResidual(bool currently_computing_residual) final;
2774
2778 void numGridSteps(unsigned int num_grid_steps) { _num_grid_steps = num_grid_steps; }
2779
2784 void uniformRefine();
2785
2787 void automaticScaling(bool automatic_scaling) override;
2788
2790
2793 template <typename T>
2794 static void objectSetupHelper(const std::vector<T *> & objects, const ExecFlagType & exec_flag);
2795 template <typename T>
2796 static void objectExecuteHelper(const std::vector<T *> & objects);
2798
2805 virtual void reinitElemFaceRef(const Elem * elem,
2806 unsigned int side,
2807 Real tolerance,
2808 const std::vector<Point> * const pts,
2809 const std::vector<Real> * const weights = nullptr,
2810 const THREAD_ID tid = 0) override;
2811
2818 virtual void reinitNeighborFaceRef(const Elem * neighbor_elem,
2819 unsigned int neighbor_side,
2820 Real tolerance,
2821 const std::vector<Point> * const pts,
2822 const std::vector<Real> * const weights = nullptr,
2823 const THREAD_ID tid = 0) override;
2824
2829
2838
2843 void fvBCsIntegrityCheck(bool fv_bcs_integrity_check);
2844
2854 std::vector<std::shared_ptr<MaterialBase>> & face_materials,
2855 std::vector<std::shared_ptr<MaterialBase>> & neighbor_materials,
2856 std::set<MooseVariableFieldBase *> & variables,
2857 const THREAD_ID tid);
2858
2865 void resizeMaterialData(Moose::MaterialDataType data_type, unsigned int nqp, const THREAD_ID tid);
2866
2867 bool haveDisplaced() const override final { return _displaced_problem.get(); }
2868
2870 bool hasLinearConvergenceObjects() const;
2874 void setNonlinearConvergenceNames(const std::vector<ConvergenceName> & convergence_names);
2878 void setLinearConvergenceNames(const std::vector<ConvergenceName> & convergence_names);
2882 void setMultiAppFixedPointConvergenceName(const ConvergenceName & convergence_name);
2886 void setSteadyStateConvergenceName(const ConvergenceName & convergence_name);
2887
2891 const std::vector<ConvergenceName> & getNonlinearConvergenceNames() const;
2895 const std::vector<ConvergenceName> & getLinearConvergenceNames() const;
2899 const ConvergenceName & getMultiAppFixedPointConvergenceName() const;
2903 const ConvergenceName & getSteadyStateConvergenceName() const;
2904
2908 void computingScalingJacobian(bool computing_scaling_jacobian)
2909 {
2910 _computing_scaling_jacobian = computing_scaling_jacobian;
2911 }
2912
2913 bool computingScalingJacobian() const override final { return _computing_scaling_jacobian; }
2914
2918 void computingScalingResidual(bool computing_scaling_residual)
2919 {
2920 _computing_scaling_residual = computing_scaling_residual;
2921 }
2922
2926 bool computingScalingResidual() const override final { return _computing_scaling_residual; }
2927
2933
2934 virtual std::size_t numNonlinearSystems() const override { return _num_nl_sys; }
2935
2936 virtual std::size_t numLinearSystems() const override { return _num_linear_sys; }
2937
2938 virtual std::size_t numSolverSystems() const override { return _num_nl_sys + _num_linear_sys; }
2939
2941 bool isSolverSystemNonlinear(const unsigned int sys_num) { return sys_num < _num_nl_sys; }
2942
2943 virtual unsigned int currentNlSysNum() const override;
2944
2945 virtual unsigned int currentLinearSysNum() const override;
2946
2950 virtual unsigned int nlSysNum(const NonlinearSystemName & nl_sys_name) const override;
2951
2955 unsigned int linearSysNum(const LinearSystemName & linear_sys_name) const override;
2956
2960 unsigned int solverSysNum(const SolverSystemName & solver_sys_name) const override;
2961
2966 unsigned int systemNumForVariable(const VariableName & variable_name) const;
2967
2972
2977
2982
2983 /*
2984 * Set the status of loop order of execution printing
2985 * @param print_exec set of execution flags to print on
2986 */
2987 void setExecutionPrinting(const ExecFlagEnum & print_exec) { _print_execution_on = print_exec; }
2988
2992 bool shouldPrintExecution(const THREAD_ID tid) const;
2997 void reinitMortarUserObjects(BoundaryID primary_boundary_id,
2998 BoundaryID secondary_boundary_id,
2999 bool displaced);
3000
3001 virtual const std::vector<VectorTag> & currentResidualVectorTags() const override;
3002
3014
3018 void setCurrentResidualVectorTags(const std::set<TagID> & vector_tags);
3019
3024
3029
3030 virtual void needFV() override { _have_fv = true; }
3031 virtual bool haveFV() const override { return _have_fv; }
3032
3033 virtual bool hasNonlocalCoupling() const override { return _has_nonlocal_coupling; }
3034
3039
3040 virtual void setCurrentLowerDElem(const Elem * const lower_d_elem, const THREAD_ID tid) override;
3041 virtual void setCurrentBoundaryID(BoundaryID bid, const THREAD_ID tid) override;
3042
3046 const std::vector<NonlinearSystemName> & getNonlinearSystemNames() const { return _nl_sys_names; }
3050 const std::vector<LinearSystemName> & getLinearSystemNames() const { return _linear_sys_names; }
3054 const std::vector<SolverSystemName> & getSolverSystemNames() const { return _solver_sys_names; }
3055
3056 virtual const libMesh::CouplingMatrix & nonlocalCouplingMatrix(const unsigned i) const override;
3057
3058 virtual bool checkNonlocalCouplingRequirement() const override;
3059
3061
3069
3071
3073
3074#ifdef MOOSE_KOKKOS_ENABLED
3078 bool hasKokkosObjects() const { return _has_kokkos_objects; }
3087 void addKokkosMeshInitializationHook(std::function<void()> function)
3088 {
3089 _kokkos_mesh_initialization_hooks.push_back(function);
3090 }
3091#endif
3092
3093protected:
3097 virtual void meshChanged() {}
3098
3100 void createTagVectors();
3101
3103 void createTagSolutions();
3104
3108 virtual void meshDisplaced();
3109
3113 void computeSystems(const ExecFlagType & type);
3114
3116
3117private:
3120
3132 void setResidualObjectParamsAndLog(const std::string & ro_name,
3133 const std::string & name,
3135 const unsigned int nl_sys_num,
3136 const std::string & base_name,
3137 bool & reinit_displaced);
3138
3146 void setAuxKernelParamsAndLog(const std::string & ak_name,
3147 const std::string & name,
3149 const std::string & base_name);
3150
3155
3156 TheWarehouse::Query getUOQuery(const std::string & system,
3157 const ExecFlagType & type,
3158 const Moose::AuxGroup & group) const;
3159
3160 void getUOExecutionGroups(TheWarehouse::Query & query, std::set<int> & execution_groups) const;
3161
3162protected:
3164
3166 std::optional<std::vector<ConvergenceName>> _nonlinear_convergence_names;
3168 std::optional<std::vector<ConvergenceName>> _linear_convergence_names;
3170 std::optional<ConvergenceName> _multiapp_fixed_point_convergence_name;
3172 std::optional<ConvergenceName> _steady_state_convergence_name;
3173
3174 std::set<TagID> _fe_vector_tags;
3175
3176 std::set<TagID> _fe_matrix_tags;
3177
3179 std::set<TagID> _linear_vector_tags;
3180
3182 std::set<TagID> _linear_matrix_tags;
3183
3185 const bool & _solve;
3186
3188 Real & _time;
3191 int & _t_step;
3192 Real & _dt;
3193 Real & _dt_old;
3194
3201
3203 const std::vector<LinearSystemName> _linear_sys_names;
3204
3206 const std::size_t _num_linear_sys;
3207
3209 std::vector<std::shared_ptr<LinearSystem>> _linear_systems;
3210
3212 std::map<LinearSystemName, unsigned int> _linear_sys_name_to_num;
3213
3216
3219
3221 const std::vector<NonlinearSystemName> _nl_sys_names;
3222
3224 const std::size_t _num_nl_sys;
3225
3227 std::vector<std::shared_ptr<NonlinearSystemBase>> _nl;
3228
3230 std::map<NonlinearSystemName, unsigned int> _nl_sys_name_to_num;
3231
3234
3237
3239 std::vector<std::shared_ptr<SolverSystem>> _solver_systems;
3240
3242 std::map<SolverVariableName, unsigned int> _solver_var_to_sys_num;
3243
3245 std::map<SolverSystemName, unsigned int> _solver_sys_name_to_num;
3246
3248 std::vector<SolverSystemName> _solver_sys_names;
3249
3251 std::shared_ptr<AuxiliarySystem> _aux;
3252
3254 std::vector<std::unique_ptr<libMesh::CouplingMatrix>> _cm;
3255
3256#ifdef MOOSE_KOKKOS_ENABLED
3261#endif
3262
3264 std::map<std::string, unsigned int> _subspace_dim;
3265
3268 std::vector<std::vector<std::unique_ptr<Assembly>>> _assembly;
3269
3270#ifdef MOOSE_KOKKOS_ENABLED
3272#endif
3273
3278
3281
3282#ifdef MOOSE_KOKKOS_ENABLED
3284#endif
3285
3288
3291
3294
3299 ScalarInitialConditionWarehouse _scalar_ics; // use base b/c of setup methods
3301
3302 // material properties
3307
3308#ifdef MOOSE_KOKKOS_ENABLED
3312#endif
3314 // Material Warehouses
3315 MaterialWarehouse _materials; // regular materials
3317 MaterialWarehouse _discrete_materials; // Materials that the user must compute
3318 MaterialWarehouse _all_materials; // All materials for error checking and MaterialData storage
3319
3320#ifdef MOOSE_KOKKOS_ENABLED
3322#endif
3324
3326 // Indicator Warehouses
3330
3331 // Marker Warehouse
3333
3334 // Helper class to access Reporter object values
3336
3339
3342
3345
3348
3351
3354
3356 const unsigned int _num_concurrent_multiapps;
3357
3359 std::map<std::string, std::unique_ptr<RandomData>> _random_data_objects;
3360
3362 std::vector<std::unordered_map<SubdomainID, bool>> _block_mat_side_cache;
3363
3365 std::vector<std::unordered_map<BoundaryID, bool>> _bnd_mat_side_cache;
3366
3368 std::vector<std::unordered_map<BoundaryID, bool>> _interface_mat_side_cache;
3369
3371 std::vector<MeshChangedInterface *> _notify_when_mesh_changes;
3372
3374 std::vector<MeshDisplacedInterface *> _notify_when_mesh_displaces;
3375
3377 bool duplicateVariableCheck(const std::string & var_name,
3378 const libMesh::FEType & type,
3379 bool is_aux,
3380 const std::set<SubdomainID> * const active_subdomains);
3381
3383
3384#ifdef MOOSE_KOKKOS_ENABLED
3386#endif
3387
3390
3391 void checkUserObjects();
3392
3394 void checkGradientMethods();
3395
3402 const std::map<SubdomainID, std::vector<std::shared_ptr<MaterialBase>>> & materials_map);
3403
3406
3412 void reinitBecauseOfGhostingOrNewGeomObjects(bool mortar_changed = false);
3413
3421 const std::string & object_name,
3422 const std::string & var_param_name = "variable");
3423
3424#ifdef LIBMESH_ENABLE_AMR
3426 unsigned int _cycles_completed;
3427#endif
3428
3430 std::shared_ptr<XFEMInterface> _xfem;
3431
3432 // Displaced mesh /////
3434 std::shared_ptr<DisplacedProblem> _displaced_problem;
3436 std::unique_ptr<MortarInterfaceWarehouse> _mortar_data;
3437
3444
3447
3450
3453
3456
3459
3462
3465
3468
3471
3474
3485
3489
3490 std::vector<std::vector<const MooseVariableFEBase *>> _uo_jacobian_moose_vars;
3491
3493 std::vector<unsigned char> _has_active_material_properties;
3494
3495 std::vector<SolverParams> _solver_params;
3496
3499 std::vector<SubdomainName> _kernel_coverage_blocks;
3500
3504
3508
3511
3514 std::vector<SubdomainName> _material_coverage_blocks;
3515
3518
3521
3524
3527
3528#ifndef NDEBUG
3531#endif
3532
3534 unsigned int _max_qps;
3535
3538
3541
3544
3547
3550
3553
3556
3559
3562
3565
3568#if !PETSC_RELEASE_LESS_THAN(3, 12, 0)
3570#endif
3571
3574
3575 std::shared_ptr<LineSearch> _line_search;
3576
3577 std::unique_ptr<libMesh::ConstElemRange> _evaluable_local_elem_range;
3578 std::unique_ptr<libMesh::ConstElemRange> _nl_evaluable_local_elem_range;
3579 std::unique_ptr<libMesh::ConstElemRange> _aux_evaluable_local_elem_range;
3580
3581 std::unique_ptr<libMesh::ConstElemRange> _current_algebraic_elem_range;
3582 std::unique_ptr<libMesh::ConstNodeRange> _current_algebraic_node_range;
3583 std::unique_ptr<ConstBndNodeRange> _current_algebraic_bnd_node_range;
3584
3588
3589 // loop state during projection of initial conditions
3590 unsigned short _current_ic_state;
3591
3595
3596private:
3603 void translateCaughtException(const std::string & calling_method);
3604
3609 void handleException(const std::string & calling_method);
3610
3617 void translateUserObjectExceptions(const std::function<void()> & work);
3618
3623 std::vector<MortarUserObject *>
3624 getMortarUserObjects(BoundaryID primary_boundary_id,
3625 BoundaryID secondary_boundary_id,
3626 bool displaced,
3627 const std::vector<MortarUserObject *> & mortar_uo_superset);
3628
3633 std::vector<MortarUserObject *> getMortarUserObjects(BoundaryID primary_boundary_id,
3634 BoundaryID secondary_boundary_id,
3635 bool displaced);
3636
3646 virtual std::pair<bool, unsigned int>
3647 determineSolverSystem(const std::string & var_name,
3648 bool error_if_not_found = false) const override;
3649
3656 void checkICRestartError(const std::string & ic_name,
3657 const std::string & name,
3658 const VariableName & var_name);
3659
3660 /*
3661 * Test if stateful property redistribution is expected to be
3662 * necessary, and set it up if so.
3663 */
3664 void addAnyRedistributers();
3665
3666 void updateMaxQps();
3667
3668 void joinAndFinalize(TheWarehouse::Query query, bool isgen = false);
3669
3670#ifdef MOOSE_KOKKOS_ENABLED
3671 void kokkosJoinAndFinalize(const std::vector<Moose::Kokkos::UserObject *> & userobjs);
3672#endif
3673
3677 virtual void resetState();
3678
3679 // Parameters handling Jacobian sparsity pattern behavior
3691
3692 const bool _force_restart;
3699
3702
3705
3708
3711
3714
3717
3718 friend class AuxiliarySystem;
3720 friend class MooseEigenSystem;
3721 friend class Resurrector;
3722 friend class Restartable;
3723 friend class DisplacedProblem;
3724
3727
3729 unsigned int _num_grid_steps;
3730
3734
3737
3740
3743
3746
3749
3753 std::vector<VectorTag> _current_residual_vector_tags;
3754
3756 bool _have_fv = false;
3757
3761
3763 std::vector<libMesh::CouplingMatrix> _nonlocal_cm;
3764
3767
3768#ifdef MOOSE_KOKKOS_ENABLED
3771
3774
3776 std::vector<std::function<void()>> _kokkos_mesh_initialization_hooks;
3777#endif
3778
3779 friend void Moose::PetscSupport::setSinglePetscOption(const std::string & name,
3780 const std::string & value,
3781 FEProblemBase * const problem);
3782};
3783
3785
3786template <typename T>
3787void
3789{
3791}
3792
3793template <typename T>
3794void
3795FEProblemBase::objectSetupHelper(const std::vector<T *> & objects, const ExecFlagType & exec_flag)
3796{
3797 if (exec_flag == EXEC_INITIAL)
3798 {
3799 for (T * obj_ptr : objects)
3800 obj_ptr->initialSetup();
3801 }
3802
3803 else if (exec_flag == EXEC_TIMESTEP_BEGIN)
3804 {
3805 for (const auto obj_ptr : objects)
3806 obj_ptr->timestepSetup();
3807 }
3808 else if (exec_flag == EXEC_SUBDOMAIN)
3809 {
3810 for (const auto obj_ptr : objects)
3811 obj_ptr->subdomainSetup();
3812 }
3813
3814 else if (exec_flag == EXEC_NONLINEAR)
3815 {
3816 for (const auto obj_ptr : objects)
3817 obj_ptr->jacobianSetup();
3818 }
3819
3820 else if (exec_flag == EXEC_LINEAR)
3821 {
3822 for (const auto obj_ptr : objects)
3823 obj_ptr->residualSetup();
3824 }
3825}
3826
3827template <typename T>
3828void
3829FEProblemBase::objectExecuteHelper(const std::vector<T *> & objects)
3830{
3831 for (T * obj_ptr : objects)
3832 obj_ptr->execute();
3833}
3834
3835template <typename T>
3836std::vector<std::shared_ptr<T>>
3837FEProblemBase::addObject(const std::string & type,
3838 const std::string & name,
3840 const bool threaded,
3841 const std::string & var_param_name)
3842{
3843 parallel_object_only();
3844
3845 logAdd(MooseUtils::prettyCppType<T>(), name, type, parameters);
3846 // Add the _subproblem and _sys parameters depending on use_displaced_mesh
3847 addObjectParamsHelper(parameters, name, var_param_name);
3848
3849 const auto n_threads = threaded ? this->numThreads() : 1;
3850 std::vector<std::shared_ptr<T>> objects(n_threads);
3851 for (THREAD_ID tid = 0; tid < n_threads; ++tid)
3852 {
3853 std::shared_ptr<T> obj = _factory.create<T>(type, name, parameters, tid);
3854 theWarehouse().add(obj);
3855 objects[tid] = std::move(obj);
3856 }
3857
3858 return objects;
3859}
3860
3861inline NonlinearSystemBase &
3862FEProblemBase::getNonlinearSystemBase(const unsigned int sys_num)
3863{
3864 mooseAssert(sys_num < _nl.size(), "System number greater than the number of nonlinear systems");
3865 return *_nl[sys_num];
3866}
3867
3868inline const NonlinearSystemBase &
3869FEProblemBase::getNonlinearSystemBase(const unsigned int sys_num) const
3870{
3871 mooseAssert(sys_num < _nl.size(), "System number greater than the number of nonlinear systems");
3872 return *_nl[sys_num];
3873}
3874
3875inline SolverSystem &
3876FEProblemBase::getSolverSystem(const unsigned int sys_num)
3877{
3878 mooseAssert(sys_num < _solver_systems.size(),
3879 "System number greater than the number of solver systems");
3880 return *_solver_systems[sys_num];
3881}
3882
3883inline const SolverSystem &
3884FEProblemBase::getSolverSystem(const unsigned int sys_num) const
3885{
3886 mooseAssert(sys_num < _solver_systems.size(),
3887 "System number greater than the number of solver systems");
3888 return *_solver_systems[sys_num];
3889}
3890
3891inline NonlinearSystemBase &
3893{
3894 mooseAssert(_current_nl_sys, "The nonlinear system is not currently set");
3895 return *_current_nl_sys;
3896}
3897
3898inline const NonlinearSystemBase &
3900{
3901 mooseAssert(_current_nl_sys, "The nonlinear system is not currently set");
3902 return *_current_nl_sys;
3903}
3904
3905inline LinearSystem &
3906FEProblemBase::getLinearSystem(const unsigned int sys_num)
3907{
3908 mooseAssert(sys_num < _linear_systems.size(),
3909 "System number greater than the number of linear systems");
3910 return *_linear_systems[sys_num];
3911}
3912
3913inline const LinearSystem &
3914FEProblemBase::getLinearSystem(const unsigned int sys_num) const
3915{
3916 mooseAssert(sys_num < _linear_systems.size(),
3917 "System number greater than the number of linear systems");
3918 return *_linear_systems[sys_num];
3919}
3920
3921inline LinearSystem &
3923{
3924 mooseAssert(_current_linear_sys, "The linear system is not currently set");
3925 return *_current_linear_sys;
3926}
3927
3928inline const LinearSystem &
3930{
3931 mooseAssert(_current_linear_sys, "The linear system is not currently set");
3932 return *_current_linear_sys;
3933}
3934
3935inline Assembly &
3936FEProblemBase::assembly(const THREAD_ID tid, const unsigned int sys_num)
3937{
3938 mooseAssert(tid < _assembly.size(), "Assembly objects not initialized");
3939 mooseAssert(sys_num < _assembly[tid].size(),
3940 "System number larger than the assembly container size");
3941 return *_assembly[tid][sys_num];
3942}
3943
3944inline const Assembly &
3945FEProblemBase::assembly(const THREAD_ID tid, const unsigned int sys_num) const
3946{
3947 mooseAssert(tid < _assembly.size(), "Assembly objects not initialized");
3948 mooseAssert(sys_num < _assembly[tid].size(),
3949 "System number larger than the assembly container size");
3950 return *_assembly[tid][sys_num];
3951}
3952
3953inline const libMesh::CouplingMatrix *
3954FEProblemBase::couplingMatrix(const unsigned int i) const
3955{
3956 return _cm[i].get();
3957}
3958
3959inline void
3960FEProblemBase::fvBCsIntegrityCheck(const bool fv_bcs_integrity_check)
3961{
3963 // the user has requested that we don't check integrity so we will honor that
3964 return;
3965
3966 _fv_bcs_integrity_check = fv_bcs_integrity_check;
3967}
3968
3969inline const std::vector<VectorTag> &
3974
3975inline void
3976FEProblemBase::setCurrentResidualVectorTags(const std::set<TagID> & vector_tags)
3977{
3979}
3980
3981inline void
3986
3987#ifdef MOOSE_KOKKOS_ENABLED
3988template <typename T>
3989T &
3991{
3992 if (!hasKokkosFunction(name))
3993 {
3994 // If we didn't find a function, it might be a default function, attempt to construct one now
3995 std::istringstream ss(name);
3996 Real real_value;
3997
3998 // First see if it's just a constant. If it is, build a ConstantFunction
3999 if (ss >> real_value && ss.eof())
4000 {
4001 InputParameters params = _factory.getValidParams("KokkosConstantFunction");
4002 params.set<Real>("value") = real_value;
4003 addKokkosFunction("KokkosConstantFunction", ss.str(), params);
4004 }
4005
4006 // Try once more
4007 if (!hasKokkosFunction(name))
4008 mooseError("Unable to find Kokkos function '" + name, "'");
4009 }
4010
4011 auto * const ret = dynamic_cast<T *>(_kokkos_functions.getActiveObject(name).get());
4012 if (!ret)
4013 mooseError("No Kokkos function named '", name, "' of appropriate type");
4014
4015 return *ret;
4016}
4017#endif
boundary_id_type BoundaryID
subdomain_id_type SubdomainID
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:53
const ExecFlagType EXEC_TIMESTEP_BEGIN
Definition Moose.C:38
const ExecFlagType EXEC_INITIAL
Definition Moose.C:31
const ExecFlagType EXEC_LINEAR
Definition Moose.C:32
const ExecFlagType EXEC_NONLINEAR
Definition Moose.C:34
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:102
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 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
void restoreGeometricSearchState()
Restore geometric search state captured by the most recent backupGeometricSearchState().
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.
virtual bool allowMeshContractionAfterMeshChanged() const
Whether meshChanged() should allow the mesh to be contracted (deletes children of coarsened elements ...
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 setCouplingMatrix(libMesh::CouplingMatrix *cm, const unsigned int nl_sys_num)
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()
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.
unsigned int numConcurrentMultiApps() const
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
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.
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.
void translateUserObjectExceptions(const std::function< void()> &work)
Execute work, user object computations local to this process, and register any exception it raises wi...
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 addFVGradientMethod(const std::string &method_type, const std::string &name, InputParameters &parameters)
Add an FV gradient method.
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
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
FVGradientMethod & getFVGradientMethod(const GradientMethodName &name, const THREAD_ID tid=0)
Retrieve a writable FV gradient method owned by this problem.
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
bool hasFVGradientMethod(const GradientMethodName &name) const
Check if an FV gradient method with a given name exists.
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.
void backupGeometricSearchState()
Snapshot geometric search state (both on the regular and, if present, the displaced mesh) so it can b...
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:718
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:782
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.
const unsigned int _num_concurrent_multiapps
Number of concurrent applications being solved at the same time.
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
void partitionConcurrentMultiApps()
Assign each multiapp that shares an 'execution_order_group' with others a disjoint subset of the rank...
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.
void checkGradientMethods()
Let every FVGradientMethod resolve its dependencies on other gradient methods.
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)
void translateCaughtException(const std::string &calling_method)
Classify the exception currently being handled and register its message with setException(),...
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)
const std::vector< std::pair< MooseVariableFieldBase *, MooseVariableScalar * > > & fieldScalarCouplingEntries(const THREAD_ID tid, const unsigned int nl_sys_num) const
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.
virtual Real & timeOlder() const
The time two steps back.
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.
void execMultiAppTransfers(ExecFlagType type, Transfer::DIRECTION direction, const MultiAppName &source_app="")
Execute MultiAppTransfers associated with execution flag and direction.
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.
const bool _fv_face_integrity_check
Whether to check FV boundary and interface objects against the faces on which they execute.
virtual void addAuxVariable(const std::string &var_name, const libMesh::FEType &type, const std::set< SubdomainID > *const active_subdomains=NULL)
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...
Base class for linear finite-volume cell-gradient methods.
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:2418
Executor * getExecutor() const
Definition MooseApp.h:338
TheWarehouse & theWarehouse()
Definition MooseApp.h:140
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:140
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
THREAD_ID numThreads() const
Definition SubProblem.C:81
Factory & _factory
The Factory for building objects.
std::vector< VectorTag > getVectorTags(const std::set< TagID > &tag_ids) const
Definition SubProblem.C:164
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:718
bool haveADObjects() const
Method for reading wehther we have any ad objects.
Definition SubProblem.h:782
const bool & currentlyComputingResidual() const
Returns true if the problem is in the process of computing the residual.
Definition SubProblem.h:731
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...
State argument for evaluating functors.
Per-mortar-interface configuration.