https://mooseframework.inl.gov
SystemBase.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 #include <vector>
13 
14 #include "DataIO.h"
15 #include "MooseTypes.h"
16 #include "VariableWarehouse.h"
17 #include "InputParameters.h"
18 #include "MooseVariableBase.h"
19 #include "ConsoleStreamInterface.h"
20 
21 // libMesh
22 #include "libmesh/exodusII_io.h"
23 #include "libmesh/parallel_object.h"
24 #include "libmesh/numeric_vector.h"
25 #include "libmesh/sparse_matrix.h"
26 
27 // Forward declarations
28 class Factory;
29 class MooseApp;
31 template <typename>
35 class MooseMesh;
36 class SubProblem;
37 class SystemBase;
38 class TimeIntegrator;
39 class InputParameters;
40 class FEProblemBase;
41 
42 // libMesh forward declarations
43 namespace libMesh
44 {
45 class System;
46 class DofMap;
47 class FEType;
48 }
49 
53 void extraSendList(std::vector<dof_id_type> & send_list, void * context);
54 
59  std::vector<dof_id_type> & n_nz,
60  std::vector<dof_id_type> & n_oz,
61  void * context);
62 
67 {
68  VarCopyInfo(const std::string & dest_name,
69  const std::string & source_name,
70  const std::string & timestep)
71  : _dest_name(dest_name), _source_name(source_name), _timestep(timestep)
72  {
73  }
74 
75  std::string _dest_name;
76  std::string _source_name;
77  std::string _timestep;
78 };
79 
85 
86 {
87 public:
89  FEProblemBase & fe_problem,
90  const std::string & name,
91  Moose::VarKindType var_kind);
92  virtual ~SystemBase() {}
93 
98  unsigned int number() const;
99  MooseMesh & mesh() { return _mesh; }
100  const MooseMesh & mesh() const { return _mesh; }
102  const SubProblem & subproblem() const { return _subproblem; }
104  const FEProblemBase & feProblem() const { return _fe_problem; }
105 
111  void applyScalingFactors(const std::vector<Real> & inverse_scaling_factors);
112 
116  bool computingScalingJacobian() const;
117 
122  bool automaticScaling() const { return _automatic_scaling; }
123 
128  void automaticScaling(bool automatic_scaling) { _automatic_scaling = automatic_scaling; }
129 
134  void setVerboseFlag(const bool & verbose) { _verbose = verbose; }
135 
139  virtual libMesh::DofMap & dofMap();
140 
144  virtual const libMesh::DofMap & dofMap() const;
145 
149  virtual libMesh::System & system() = 0;
150  virtual const libMesh::System & system() const = 0;
151 
156  virtual void preInit() {}
157 
158  /*
159  * This is called after the libMesh system has been init'd. This can be used to initialize MOOSE
160  * system data that relies on the libMesh system data already being initialized
161  */
162  virtual void postInit() {}
163 
168  virtual void reinit() {}
169 
173  virtual void initializeObjects() {}
174 
178  void update();
179 
183  virtual void solve();
184 
185  virtual void copyOldSolutions();
186  virtual void copyPreviousNonlinearSolutions();
187  virtual void copyPreviousFixedPointSolutions();
188  virtual void restoreSolutions();
189 
194  virtual const NumericVector<Number> * const & currentSolution() const = 0;
195 
199  const NumericVector<Number> & solution() const { return solutionState(0); }
200  const NumericVector<Number> & solutionOld() const { return solutionState(1); }
201  const NumericVector<Number> & solutionOlder() const { return solutionState(2); }
202 
203  virtual const NumericVector<Number> * solutionPreviousNewton() const;
205 
209  virtual void initSolutionState();
210 
217  virtual NumericVector<Number> &
218  solutionState(const unsigned int state,
220 
224  virtual const NumericVector<Number> & solutionState(
225  const unsigned int state,
227 
232  solutionStateParallelType(const unsigned int state,
233  const Moose::SolutionIterationType iteration_type) const;
234 
238  virtual void needSolutionState(
239  const unsigned int state,
241  libMesh::ParallelType parallel_type = GHOSTED);
242 
246  virtual bool hasSolutionState(
247  const unsigned int state,
249 
254  virtual void addDotVectors();
255 
256  virtual std::vector<Number> & duDotDus() { return _du_dot_du; }
257  virtual Number & duDotDotDu() { return _du_dotdot_du; }
258  virtual const Number & duDotDu(unsigned int var_num = 0) const;
259  virtual const Number & duDotDotDu() const { return _du_dotdot_du; }
260 
261  virtual NumericVector<Number> * solutionUDot() { return _u_dot; }
265  virtual const NumericVector<Number> * solutionUDot() const { return _u_dot; }
266  virtual const NumericVector<Number> * solutionUDotDot() const { return _u_dotdot; }
267  virtual const NumericVector<Number> * solutionUDotOld() const { return _u_dot_old; }
268  virtual const NumericVector<Number> * solutionUDotDotOld() const { return _u_dotdot_old; }
269 
270  virtual void saveOldSolutions();
271  virtual void restoreOldSolutions();
272 
276  bool hasVector(const std::string & tag_name) const;
277 
281  virtual bool hasVector(TagID tag_id) const
282  {
283  return tag_id < _tagged_vectors.size() && _tagged_vectors[tag_id];
284  }
285 
292  virtual TagID timeVectorTag() const { mooseError("Not implemented yet"); }
293 
297  virtual TagID systemMatrixTag() const { mooseError("Not implemented yet"); }
298 
299  /*
300  * Return TagID for nontime
301  */
302  virtual TagID nonTimeVectorTag() const { mooseError("Not implemented yet"); }
303 
304  /*
305  * Return TagID for nontime
306  */
307  virtual TagID residualVectorTag() const { mooseError("Not implemented yet"); }
308 
312  virtual std::set<TagID> defaultVectorTags() const
313  {
315  }
319  virtual std::set<TagID> defaultMatrixTags() const { return {systemMatrixTag()}; }
320 
324  virtual NumericVector<Number> & getVector(const std::string & name);
326  virtual const NumericVector<Number> & getVector(const std::string & name) const;
328 
332  virtual NumericVector<Number> & getVector(TagID tag);
334  virtual const NumericVector<Number> & getVector(TagID tag) const;
336 
340  virtual void associateVectorToTag(NumericVector<Number> & vec, TagID tag);
341 
345  virtual void disassociateVectorFromTag(NumericVector<Number> & vec, TagID tag);
346 
350  virtual void disassociateVectorFromTag(TagID tag);
351 
355  virtual void disassociateDefaultVectorTags();
356 
360  virtual bool hasMatrix(TagID tag) const
361  {
362  return tag < _tagged_matrices.size() && _tagged_matrices[tag];
363  }
364 
369 
373  virtual const libMesh::SparseMatrix<Number> & getMatrix(TagID tag) const;
374 
378  virtual void activateAllMatrixTags();
379 
383  virtual bool matrixTagActive(TagID tag) const;
384 
388  virtual void deactivateAllMatrixTags();
389 
393  void closeTaggedMatrices(const std::set<TagID> & tags);
394 
399  void flushTaggedMatrices(const std::set<TagID> & tags);
400 
404  virtual void associateMatrixToTag(libMesh::SparseMatrix<Number> & matrix, TagID tag);
405 
410 
414  virtual void disassociateMatrixFromTag(TagID tag);
415 
419  virtual void disassociateDefaultMatrixTags();
420 
425 
427  {
428  mooseError("This system does not support getting a copy of the residual");
429  }
431  {
432  mooseError("This system does not support getting a ghosted copy of the residual");
433  }
434 
438  virtual void augmentSendList(std::vector<dof_id_type> & send_list);
439 
443  virtual void augmentSparsity(libMesh::SparsityPattern::Graph & sparsity,
444  std::vector<dof_id_type> & n_nz,
445  std::vector<dof_id_type> & n_oz) = 0;
446 
453  virtual void addVariable(const std::string & var_type,
454  const std::string & var_name,
455  InputParameters & parameters);
456 
460  virtual bool isArrayVariable(const std::string & var_name) const;
461 
463 
469  virtual bool hasVariable(const std::string & var_name) const;
470  virtual bool hasScalarVariable(const std::string & var_name) const;
472 
473  virtual bool isScalarVariable(unsigned int var_name) const;
474 
482  MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string & var_name) const;
483 
491  MooseVariableFieldBase & getVariable(THREAD_ID tid, unsigned int var_number) const;
492 
502  template <typename T>
503  MooseVariableFE<T> & getFieldVariable(THREAD_ID tid, const std::string & var_name);
504 
508  template <typename T>
509  MooseVariableField<T> & getActualFieldVariable(THREAD_ID tid, const std::string & var_name);
510 
520  template <typename T>
521  MooseVariableFE<T> & getFieldVariable(THREAD_ID tid, unsigned int var_number);
522 
526  template <typename T>
527  MooseVariableField<T> & getActualFieldVariable(THREAD_ID tid, unsigned int var_number);
528 
532  template <typename T>
533  MooseVariableFV<T> & getFVVariable(THREAD_ID tid, const std::string & var_name);
534 
543  const std::string & var_name) const;
544 
552  virtual MooseVariableScalar & getScalarVariable(THREAD_ID tid, unsigned int var_number) const;
553 
560  virtual const std::set<SubdomainID> * getVariableBlocks(unsigned int var_number);
561 
566  virtual unsigned int nVariables() const;
567 
572  unsigned int nFieldVariables() const;
573 
578  unsigned int nFVVariables() const;
579 
585  std::size_t getMaxVarNDofsPerElem() const { return _max_var_n_dofs_per_elem; }
586 
592  std::size_t getMaxVarNDofsPerNode() const { return _max_var_n_dofs_per_node; }
593 
597  void assignMaxVarNDofsPerElem(std::size_t max_dofs) { _max_var_n_dofs_per_elem = max_dofs; }
598 
602  void assignMaxVarNDofsPerNode(std::size_t max_dofs) { _max_var_n_dofs_per_node = max_dofs; }
603 
608  virtual void addVariableToZeroOnResidual(std::string var_name);
609 
614  virtual void addVariableToZeroOnJacobian(std::string var_name);
615 
622  virtual void zeroVariables(std::vector<std::string> & vars_to_be_zeroed);
623 
628  virtual void zeroVariablesForResidual();
629 
634  virtual void zeroVariablesForJacobian();
635 
641 
646  virtual void prepare(THREAD_ID tid);
647 
657  virtual void prepareFace(THREAD_ID tid, bool resize_data);
658 
663  virtual void prepareNeighbor(THREAD_ID tid);
664 
669  virtual void prepareLowerD(THREAD_ID tid);
670 
676  virtual void reinitElem(const Elem * elem, THREAD_ID tid);
677 
684  virtual void reinitElemFace(const Elem * elem, unsigned int side, THREAD_ID tid);
685 
689  virtual void reinitNeighborFace(const Elem * elem, unsigned int side, THREAD_ID tid);
690 
694  virtual void reinitNeighbor(const Elem * elem, THREAD_ID tid);
695 
699  virtual void reinitLowerD(THREAD_ID tid);
700 
706  virtual void reinitNode(const Node * node, THREAD_ID tid);
707 
714  virtual void reinitNodeFace(const Node * node, BoundaryID bnd_id, THREAD_ID tid);
715 
721  virtual void reinitNodes(const std::vector<dof_id_type> & nodes, THREAD_ID tid);
722 
728  virtual void reinitNodesNeighbor(const std::vector<dof_id_type> & nodes, THREAD_ID tid);
729 
736  virtual void reinitScalars(THREAD_ID tid, bool reinit_for_derivative_reordering = false);
737 
747  virtual void addVariableToCopy(const std::string & dest_name,
748  const std::string & source_name,
749  const std::string & timestep);
750 
751  const std::vector<MooseVariableFieldBase *> & getVariables(THREAD_ID tid)
752  {
753  return _vars[tid].fieldVariables();
754  }
755 
756  const std::vector<MooseVariableScalar *> & getScalarVariables(THREAD_ID tid)
757  {
758  return _vars[tid].scalars();
759  }
760 
761  const std::set<SubdomainID> & getSubdomainsForVar(unsigned int var_number) const
762  {
763  return _var_map.at(var_number);
764  }
765 
772  const std::set<SubdomainID> & getSubdomainsForVar(const std::string & var_name) const;
773 
777  void removeVector(const std::string & name);
778 
793  addVector(const std::string & vector_name, const bool project, const libMesh::ParallelType type);
794 
809  addVector(TagID tag, const bool project, const libMesh::ParallelType type);
810 
814  void closeTaggedVector(const TagID tag);
818  void closeTaggedVectors(const std::set<TagID> & tags);
819 
823  void zeroTaggedVector(const TagID tag);
827  void zeroTaggedVectors(const std::set<TagID> & tags);
828 
834  void removeVector(TagID tag_id);
835 
838  void setVariableGlobalDoFs(const std::string & var_name);
839 
842  const std::vector<dof_id_type> & getVariableGlobalDoFs() { return _var_all_dof_indices; }
843 
850 
856  void removeMatrix(TagID tag);
857 
858  virtual const std::string & name() const;
859 
860  const std::vector<VariableName> & getVariableNames() const { return _vars[0].names(); }
861 
862  void getStandardFieldVariableNames(std::vector<VariableName> & std_field_variables) const;
863 
867  unsigned int getMaxVariableNumber() const { return _max_var_number; }
868 
869  virtual void computeVariables(const NumericVector<Number> & /*soln*/) {}
870 
871  void copyVars(libMesh::ExodusII_IO & io);
872 
876  virtual void copySolutionsBackwards();
877 
878  void addTimeIntegrator(const std::string & type,
879  const std::string & name,
880  InputParameters & parameters);
881 
883  bool hasVarCopy() const { return _var_to_copy.size() > 0; }
884 
888  void addScalingVector();
889 
897 
899  virtual void initialSetup();
900  virtual void timestepSetup();
901  virtual void customSetup(const ExecFlagType & exec_type);
902  virtual void subdomainSetup();
903  virtual void residualSetup();
904  virtual void jacobianSetup();
905 
909  void clearAllDofIndices();
910 
914  void setActiveVariableCoupleableVectorTags(const std::set<TagID> & vtags, THREAD_ID tid);
915 
919  void setActiveScalarVariableCoupleableVectorTags(const std::set<TagID> & vtags, THREAD_ID tid);
920 
925 
930  const std::vector<std::unique_ptr<NumericVector<Number>>> & gradientContainer() const
931  {
932  return _raw_grad_container;
933  }
934 
939  virtual void compute(ExecFlagType type) = 0;
940 
944  void copyTimeIntegrators(const SystemBase & other_sys);
945 
949  const TimeIntegrator & getTimeIntegrator(const unsigned int var_num) const;
950 
956  const TimeIntegrator * queryTimeIntegrator(const unsigned int var_num) const;
957 
961  const std::vector<std::shared_ptr<TimeIntegrator>> & getTimeIntegrators();
962 
968  std::string prefix() const;
969 
973  void sizeVariableMatrixData();
974 
975 protected:
979  virtual NumericVector<Number> & solutionInternal() const = 0;
980 
984 
987 
990 
993  std::string _name;
994 
996  std::vector<VariableWarehouse> _vars;
998  std::map<unsigned int, std::set<SubdomainID>> _var_map;
1000  unsigned int _max_var_number;
1001 
1002  std::vector<std::string> _vars_to_be_zeroed_on_residual;
1003  std::vector<std::string> _vars_to_be_zeroed_on_jacobian;
1004 
1009 
1014 
1017  std::vector<Real> _du_dot_du;
1019 
1021  std::vector<NumericVector<Number> *> _tagged_vectors;
1023  std::vector<libMesh::SparseMatrix<Number> *> _tagged_matrices;
1025  std::unordered_map<TagID, libMesh::SparseMatrix<Number> *> _active_tagged_matrices;
1027  std::vector<bool> _matrix_tag_active_flags;
1028 
1029  // Used for saving old solutions so that they wont be accidentally changed
1030  NumericVector<Real> * _saved_old;
1031  NumericVector<Real> * _saved_older;
1032 
1033  // Used for saving old u_dot and u_dotdot so that they wont be accidentally changed
1034  NumericVector<Real> * _saved_dot_old;
1035  NumericVector<Real> * _saved_dotdot_old;
1036 
1039 
1040  std::vector<VarCopyInfo> _var_to_copy;
1041 
1044 
1047 
1049  std::vector<std::shared_ptr<TimeIntegrator>> _time_integrators;
1050 
1052  std::vector<std::vector<MooseVariableFieldBase *>> _numbered_vars;
1053 
1056 
1058  bool _verbose;
1059 
1062 
1064  std::vector<dof_id_type> _var_all_dof_indices;
1065 
1068  std::unique_ptr<NumericVector<Number>> _serialized_solution;
1069 
1073  std::vector<std::unique_ptr<NumericVector<Number>>> _raw_grad_container;
1074 
1075 private:
1079  TagName oldSolutionStateVectorName(const unsigned int,
1080  Moose::SolutionIterationType iteration_type) const;
1081 
1084  std::array<std::vector<NumericVector<Number> *>, 3> _solution_states;
1086  std::vector<NumericVector<Number> *> _saved_solution_states;
1087 };
1088 
1089 inline bool
1090 SystemBase::hasSolutionState(const unsigned int state,
1091  const Moose::SolutionIterationType iteration_type) const
1092 {
1093  return _solution_states[static_cast<unsigned short>(iteration_type)].size() > state;
1094 }
1095 
1096 #define PARALLEL_TRY
1097 
1098 #define PARALLEL_CATCH _fe_problem.checkExceptionAndStopSolve();
void zeroTaggedVector(const TagID tag)
Zero vector with the given tag.
Definition: SystemBase.C:674
std::vector< std::shared_ptr< TimeIntegrator > > _time_integrators
Time integrator.
Definition: SystemBase.h:1049
virtual const std::set< SubdomainID > * getVariableBlocks(unsigned int var_number)
Get the block where a variable of this system is defined.
Definition: SystemBase.C:164
virtual void reinitNode(const Node *node, THREAD_ID tid)
Reinit nodal assembly info.
Definition: SystemBase.C:398
virtual bool hasVector(TagID tag_id) const
Check if the tagged vector exists in the system.
Definition: SystemBase.h:281
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:751
void closeTaggedVector(const TagID tag)
Close vector with the given tag.
Definition: SystemBase.C:649
MooseMesh & mesh()
Definition: SystemBase.h:99
virtual const NumericVector< Number > *const & currentSolution() const =0
The solution vector that is currently being operated on.
const NumericVector< Number > & solution() const
Definition: SystemBase.h:199
virtual void initializeObjects()
Called only once, just before the solve begins so objects can do some precalculations.
Definition: SystemBase.h:173
std::vector< std::vector< MooseVariableFieldBase * > > _numbered_vars
Map variable number to its pointer.
Definition: SystemBase.h:1052
std::vector< dof_id_type > _var_all_dof_indices
Container for the dof indices of a given variable.
Definition: SystemBase.h:1064
std::vector< Real > _du_dot_du
Derivative of time derivative of u with respect to uj.
Definition: SystemBase.h:1017
virtual NumericVector< Number > & solutionInternal() const =0
Internal getter for solution owned by libMesh.
void extraSparsity(libMesh::SparsityPattern::Graph &sparsity, std::vector< dof_id_type > &n_nz, std::vector< dof_id_type > &n_oz, void *context)
Free function used for a libMesh callback.
Definition: SystemBase.C:48
std::vector< libMesh::SparseMatrix< Number > * > _tagged_matrices
Tagged matrices (pointer)
Definition: SystemBase.h:1023
const std::vector< MooseVariableScalar * > & getScalarVariables(THREAD_ID tid)
Definition: SystemBase.h:756
void zeroTaggedVectors(const std::set< TagID > &tags)
Zero all vectors for given tags.
Definition: SystemBase.C:693
virtual const NumericVector< Number > * solutionUDotDotOld() const
Definition: SystemBase.h:268
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:916
void applyScalingFactors(const std::vector< Real > &inverse_scaling_factors)
Applies scaling factors to the system&#39;s variables.
Definition: SystemBase.C:1487
std::string _source_name
Definition: SystemBase.h:76
virtual void augmentSparsity(libMesh::SparsityPattern::Graph &sparsity, std::vector< dof_id_type > &n_nz, std::vector< dof_id_type > &n_oz)=0
Will modify the sparsity pattern to add logical geometric connections.
Class for stuff related to variables.
Definition: Adaptivity.h:31
virtual void copyOldSolutions()
Shifts the solutions backwards in time.
Definition: SystemBase.C:1278
virtual NumericVector< Number > & residualCopy()
Definition: SystemBase.h:426
const MooseMesh & mesh() const
Definition: SystemBase.h:100
bool _solution_states_initialized
Whether or not the solution states have been initialized.
Definition: SystemBase.h:1061
unsigned int TagID
Definition: MooseTypes.h:210
std::unordered_map< TagID, libMesh::SparseMatrix< Number > * > _active_tagged_matrices
Active tagged matrices. A matrix is active if its tag-matrix pair is present in the map...
Definition: SystemBase.h:1025
NumericVector< Number > & solution()
Definition: SystemBase.h:196
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters &parameters)
Canonical method for adding a variable.
Definition: SystemBase.C:718
Generic factory class for build all sorts of objects.
Definition: Factory.h:28
void automaticScaling(bool automatic_scaling)
Setter for whether we are performing automatic scaling.
Definition: SystemBase.h:128
virtual const NumericVector< Number > * solutionUDot() const
Definition: SystemBase.h:265
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:333
const std::vector< std::unique_ptr< NumericVector< Number > > > & gradientContainer() const
Reference to the container vector which hold gradients at dofs (if it can be interpreted).
Definition: SystemBase.h:930
std::vector< std::string > _vars_to_be_zeroed_on_residual
Definition: SystemBase.h:1002
NumericVector< Number > * _u_dot_old
old solution vector for u^dot
Definition: SystemBase.h:1011
virtual void initSolutionState()
Initializes the solution state.
Definition: SystemBase.C:1356
virtual void disassociateDefaultVectorTags()
Disassociate the vectors associated with the default vector tags of this system.
Definition: SystemBase.C:1007
virtual void reinitElem(const Elem *elem, THREAD_ID tid)
Reinit an element assembly info.
Definition: SystemBase.C:340
virtual void reinitLowerD(THREAD_ID tid)
Compute the values of the variables on the lower dimensional element.
Definition: SystemBase.C:390
const TimeIntegrator & getTimeIntegrator(const unsigned int var_num) const
Retrieve the time integrator that integrates the given variable&#39;s equation.
Definition: SystemBase.C:1675
size_t _max_var_n_dofs_per_node
Maximum number of dofs for any one variable on any one node.
Definition: SystemBase.h:1046
bool hasVarCopy() const
Whether or not there are variables to be restarted from an Exodus mesh file.
Definition: SystemBase.h:883
virtual void associateVectorToTag(NumericVector< Number > &vec, TagID tag)
Associate a vector for a given tag.
Definition: SystemBase.C:973
virtual libMesh::Order getMinQuadratureOrder()
Get minimal quadrature order needed for integrating variables in this system.
Definition: SystemBase.C:241
virtual const Number & duDotDotDu() const
Definition: SystemBase.h:259
virtual libMesh::System & system()=0
Get the reference to the libMesh system.
virtual NumericVector< Number > & solutionState(const unsigned int state, Moose::SolutionIterationType iteration_type=Moose::SolutionIterationType::Time)
Get a state of the solution (0 = current, 1 = old, 2 = older, etc).
Definition: SystemBase.C:1423
Factory & _factory
Definition: SystemBase.h:989
Base class for MOOSE-based applications.
Definition: MooseApp.h:96
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
bool computingScalingJacobian() const
Whether we are computing an initial Jacobian for automatic variable scaling.
Definition: SystemBase.C:1544
NumericVector< Number > * _u_dotdot
solution vector for u^dotdot
Definition: SystemBase.h:1008
void setVerboseFlag(const bool &verbose)
Sets the verbose flag.
Definition: SystemBase.h:134
virtual void addVariableToCopy(const std::string &dest_name, const std::string &source_name, const std::string &timestep)
Add info about variable that will be copied.
Definition: SystemBase.C:1167
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:360
virtual NumericVector< Number > * solutionUDotDotOld()
Definition: SystemBase.h:264
void removeMatrix(TagID tag)
Removes a matrix with a given tag.
Definition: SystemBase.C:590
virtual void associateMatrixToTag(libMesh::SparseMatrix< Number > &matrix, TagID tag)
Associate a matrix to a tag.
Definition: SystemBase.C:1068
This class provides an interface for common operations on field variables of both FE and FV types wit...
NumericVector< Number > & solutionOlder()
Definition: SystemBase.h:198
virtual void prepareFace(THREAD_ID tid, bool resize_data)
Prepare the system for use on sides.
Definition: SystemBase.C:279
void addScalingVector()
Add the scaling factor vector to the system.
Definition: SystemBase.C:1537
bool solutionStatesInitialized() const
Whether or not the solution states have been initialized via initSolutionState()
Definition: SystemBase.h:896
The following methods are specializations for using the libMesh::Parallel::packed_range_* routines fo...
void addTimeIntegrator(const std::string &type, const std::string &name, InputParameters &parameters)
Definition: SystemBase.C:1650
void setActiveVariableCoupleableVectorTags(const std::set< TagID > &vtags, THREAD_ID tid)
Set the active vector tags for the variables.
Definition: SystemBase.C:1612
Base class for a system (of equations)
Definition: SystemBase.h:84
std::vector< std::unique_ptr< NumericVector< Number > > > _raw_grad_container
A cache for storing gradients at dof locations.
Definition: SystemBase.h:1073
virtual void copyPreviousNonlinearSolutions()
Shifts the solutions backwards in nonlinear iteration history.
Definition: SystemBase.C:1261
virtual bool isArrayVariable(const std::string &var_name) const
If a variable is an array variable.
Definition: SystemBase.C:856
virtual void reinitNodes(const std::vector< dof_id_type > &nodes, THREAD_ID tid)
Reinit variables at a set of nodes.
Definition: SystemBase.C:422
std::unique_ptr< NumericVector< Number > > _serialized_solution
Serialized version of the solution vector, or nullptr if a serialized solution is not needed...
Definition: SystemBase.h:1068
size_t _max_var_n_dofs_per_elem
Maximum number of dofs for any one variable on any one element.
Definition: SystemBase.h:1043
virtual void reinitNodesNeighbor(const std::vector< dof_id_type > &nodes, THREAD_ID tid)
Reinit variables at a set of neighbor nodes.
Definition: SystemBase.C:433
NumericVector< Real > * _saved_older
Definition: SystemBase.h:1031
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
MooseVariableFV< T > & getFVVariable(THREAD_ID tid, const std::string &var_name)
Return a finite volume variable.
Definition: SystemBase.C:125
virtual void disassociateMatrixFromTag(libMesh::SparseMatrix< Number > &matrix, TagID tag)
Disassociate a matrix from a tag.
Definition: SystemBase.C:1080
NumericVector< Number > & addVector(const std::string &vector_name, const bool project, const libMesh::ParallelType type)
Adds a solution length vector to the system.
virtual void compute(ExecFlagType type)=0
Compute time derivatives, auxiliary variables, etc.
void update()
Update the system (doing libMesh magic)
Definition: SystemBase.C:1235
virtual unsigned int nVariables() const
Get the number of variables in this system.
Definition: SystemBase.C:883
void setActiveScalarVariableCoupleableVectorTags(const std::set< TagID > &vtags, THREAD_ID tid)
Set the active vector tags for the scalar variables.
Definition: SystemBase.C:1618
virtual void activateAllMatrixTags()
Make all existing matrices active.
Definition: SystemBase.C:1123
virtual const std::string & name() const
Definition: SystemBase.C:1332
virtual void jacobianSetup()
Definition: SystemBase.C:1598
void closeTaggedMatrices(const std::set< TagID > &tags)
Close all matrices associated the tags.
Definition: SystemBase.C:1052
std::vector< VarCopyInfo > _var_to_copy
Definition: SystemBase.h:1040
virtual libMesh::DofMap & dofMap()
Gets writeable reference to the dof map.
Definition: SystemBase.C:1155
void sizeVariableMatrixData()
size the matrix data for each variable for the number of matrix tags we have
Definition: SystemBase.C:1711
virtual void deactivateAllMatrixTags()
Make matrices inactive.
Definition: SystemBase.C:1111
FEProblemBase & feProblem()
Definition: SystemBase.h:103
void copyTimeIntegrators(const SystemBase &other_sys)
Copy time integrators from another system.
Definition: SystemBase.C:1659
virtual NumericVector< Number > & serializedSolution()
Returns a reference to a serialized version of the solution vector for this subproblem.
Definition: SystemBase.C:1638
bool automaticScaling() const
Getter for whether we are performing automatic scaling.
Definition: SystemBase.h:122
virtual Number & duDotDotDu()
Definition: SystemBase.h:257
void copyVars(libMesh::ExodusII_IO &io)
Definition: SystemBase.C:1175
virtual const Number & duDotDu(unsigned int var_num=0) const
Definition: SystemBase.C:1693
Real _du_dotdot_du
Definition: SystemBase.h:1018
virtual void zeroVariablesForResidual()
Zero out the solution for the variables that were registered as needing to have their solutions zeroe...
Definition: SystemBase.C:229
void extraSendList(std::vector< dof_id_type > &send_list, void *context)
///< Type of coordinate system
Definition: SystemBase.C:40
std::vector< bool > _matrix_tag_active_flags
Active flags for tagged matrices.
Definition: SystemBase.h:1027
std::vector< std::string > _vars_to_be_zeroed_on_jacobian
Definition: SystemBase.h:1003
boundary_id_type BoundaryID
bool _automatic_scaling
Whether to automatically scale the variables.
Definition: SystemBase.h:1055
Information about variables that will be copied.
Definition: SystemBase.h:66
virtual NumericVector< Number > * solutionUDot()
Definition: SystemBase.h:261
VarKindType
Framework-wide stuff.
Definition: MooseTypes.h:715
SubProblem & subproblem()
Definition: SystemBase.h:101
virtual void prepareNeighbor(THREAD_ID tid)
Prepare the system for use.
Definition: SystemBase.C:324
virtual ~SystemBase()
Definition: SystemBase.h:92
An inteface for the _console for outputting to the Console object.
virtual NumericVector< Number > * solutionUDotOld()
Definition: SystemBase.h:263
void assignMaxVarNDofsPerNode(std::size_t max_dofs)
assign the maximum node dofs
Definition: SystemBase.h:602
virtual void reinitScalars(THREAD_ID tid, bool reinit_for_derivative_reordering=false)
Reinit scalar varaibles.
Definition: SystemBase.C:444
std::string _dest_name
Definition: SystemBase.h:75
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
Definition: MooseMesh.h:88
SubProblem & _subproblem
The subproblem for whom this class holds variable data, etc; this can either be the governing finite ...
Definition: SystemBase.h:983
virtual TagID timeVectorTag() const
Ideally, we should not need this API.
Definition: SystemBase.h:292
Moose::VarKindType _var_kind
default kind of variables in this system
Definition: SystemBase.h:1038
virtual bool matrixTagActive(TagID tag) const
If or not a matrix tag is active.
Definition: SystemBase.C:1141
virtual TagID nonTimeVectorTag() const
Definition: SystemBase.h:302
virtual void reinitNeighborFace(const Elem *elem, unsigned int side, THREAD_ID tid)
Compute the values of the variables at all the current points.
Definition: SystemBase.C:374
std::size_t getMaxVarNDofsPerNode() const
Gets the maximum number of dofs used by any one variable on any one node.
Definition: SystemBase.h:592
virtual void disassociateVectorFromTag(NumericVector< Number > &vec, TagID tag)
Disassociate a given vector from a given tag.
libMesh::SparseMatrix< Number > & addMatrix(TagID tag)
Adds a matrix with a given tag.
Definition: SystemBase.C:570
virtual void addDotVectors()
Add u_dot, u_dotdot, u_dot_old and u_dotdot_old vectors if requested by the time integrator.
Definition: SystemBase.C:1625
NumericVector< Real > * _saved_dot_old
Definition: SystemBase.h:1034
const std::vector< dof_id_type > & getVariableGlobalDoFs()
Get the global dof indices of a variable, this needs to be called after the indices have been set by ...
Definition: SystemBase.h:842
virtual bool hasSolutionState(const unsigned int state, Moose::SolutionIterationType iteration_type=Moose::SolutionIterationType::Time) const
Whether or not the system has the solution state (0 = current, 1 = old, 2 = older, etc).
Definition: SystemBase.h:1090
unsigned int number() const
Gets the number of this system.
Definition: SystemBase.C:1149
std::string _timestep
Definition: SystemBase.h:77
VarCopyInfo(const std::string &dest_name, const std::string &source_name, const std::string &timestep)
Definition: SystemBase.h:68
void closeTaggedVectors(const std::set< TagID > &tags)
Close all vectors for given tags.
Definition: SystemBase.C:667
virtual void reinitNeighbor(const Elem *elem, THREAD_ID tid)
Compute the values of the variables at all the current points.
Definition: SystemBase.C:382
virtual void needSolutionState(const unsigned int state, Moose::SolutionIterationType iteration_type=Moose::SolutionIterationType::Time, libMesh::ParallelType parallel_type=GHOSTED)
Registers that the solution state state is needed.
Definition: SystemBase.C:1442
const std::vector< std::shared_ptr< TimeIntegrator > > & getTimeIntegrators()
Definition: SystemBase.C:1687
const FEProblemBase & feProblem() const
Definition: SystemBase.h:104
virtual bool hasVariable(const std::string &var_name) const
Query a system for a variable.
Definition: SystemBase.C:843
std::size_t getMaxVarNDofsPerElem() const
Gets the maximum number of dofs used by any one variable on any one element.
Definition: SystemBase.h:585
virtual TagID systemMatrixTag() const
Return the Matrix Tag ID for System.
Definition: SystemBase.h:297
std::map< unsigned int, std::set< SubdomainID > > _var_map
Map of variables (variable id -> array of subdomains where it lives)
Definition: SystemBase.h:998
virtual void copySolutionsBackwards()
Copy current solution into old and older.
Definition: SystemBase.C:1250
virtual TagID residualVectorTag() const
Definition: SystemBase.h:307
virtual std::set< TagID > defaultMatrixTags() const
Get the default matrix tags associted with this system.
Definition: SystemBase.h:319
virtual void postInit()
Definition: SystemBase.h:162
virtual void solve()
Solve the system (using libMesh magic)
Definition: SystemBase.C:1241
void assignMaxVarNDofsPerElem(std::size_t max_dofs)
assign the maximum element dofs
Definition: SystemBase.h:597
std::string _name
The name of this system.
Definition: SystemBase.h:993
MooseApp & _app
Definition: SystemBase.h:988
FEProblemBase & _fe_problem
the governing finite element/volume problem
Definition: SystemBase.h:986
virtual MooseVariableScalar & getScalarVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a scalar variable with specified number.
Definition: SystemBase.C:145
virtual void saveOldSolutions()
Save the old and older solutions.
Definition: SystemBase.C:510
std::vector< VariableWarehouse > _vars
Variable warehouses (one for each thread)
Definition: SystemBase.h:996
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Base class for time integrators.
virtual void subdomainSetup()
Definition: SystemBase.C:1584
Generic class for solving transient nonlinear problems.
Definition: SubProblem.h:78
bool _verbose
True if printing out additional information.
Definition: SystemBase.h:1058
void removeVector(const std::string &name)
Remove a vector from the system with the given name.
Definition: SystemBase.C:1326
Class for containing MooseEnum item information.
Definition: MooseEnumItem.h:18
unsigned int nFVVariables() const
Get the number of finite volume variables in this system.
Definition: SystemBase.C:902
MooseMesh & _mesh
Definition: SystemBase.h:991
NumericVector< Number > * _u_dot
solution vector for u^dot
Definition: SystemBase.h:1006
virtual void addVariableToZeroOnResidual(std::string var_name)
Adds this variable to the list of variables to be zeroed during each residual evaluation.
Definition: SystemBase.C:174
virtual void preInit()
This is called prior to the libMesh system has been init&#39;d.
Definition: SystemBase.h:156
MooseVariableFE< T > & getFieldVariable(THREAD_ID tid, const std::string &var_name)
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:111
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:1016
const NumericVector< Number > & solutionOld() const
Definition: SystemBase.h:200
virtual void reinitNodeFace(const Node *node, BoundaryID bnd_id, THREAD_ID tid)
Reinit nodal assembly info on a face.
Definition: SystemBase.C:410
virtual void zeroVariablesForJacobian()
Zero out the solution for the variables that were registered as needing to have their solutions zeroe...
Definition: SystemBase.C:235
virtual std::set< TagID > defaultVectorTags() const
Get the default vector tags associated with this system.
Definition: SystemBase.h:312
TagName oldSolutionStateVectorName(const unsigned int, Moose::SolutionIterationType iteration_type) const
Gets the vector name used for an old (not current) solution state.
Definition: SystemBase.C:1373
NumericVector< Real > * _saved_old
Definition: SystemBase.h:1030
Class for scalar variables (they are different).
std::string prefix() const
Definition: SystemBase.C:1705
libMesh::ParallelType solutionStateParallelType(const unsigned int state, const Moose::SolutionIterationType iteration_type) const
Returns the parallel type of the given solution state.
Definition: SystemBase.C:1432
NumericVector< Real > * _saved_dotdot_old
Definition: SystemBase.h:1035
virtual void reinit()
Reinitialize the system when the degrees of freedom in this system have changed.
Definition: SystemBase.h:168
const std::vector< VariableName > & getVariableNames() const
Definition: SystemBase.h:860
virtual std::vector< Number > & duDotDus()
Definition: SystemBase.h:256
virtual void prepare(THREAD_ID tid)
Prepare the system for use.
Definition: SystemBase.C:256
virtual void copyPreviousFixedPointSolutions()
Definition: SystemBase.C:1294
virtual void addVariableToZeroOnJacobian(std::string var_name)
Adds this variable to the list of variables to be zeroed during each Jacobian evaluation.
Definition: SystemBase.C:180
std::array< std::vector< NumericVector< Number > * >, 3 > _solution_states
2D array of solution state vector pointers; first index corresponds to SolutionIterationType, second index corresponds to state index (0=current, 1=old, 2=older)
Definition: SystemBase.h:1084
virtual const NumericVector< Number > * solutionPreviousNewton() const
Definition: SystemBase.C:1347
virtual void customSetup(const ExecFlagType &exec_type)
Definition: SystemBase.C:1577
const TimeIntegrator * queryTimeIntegrator(const unsigned int var_num) const
Retrieve the time integrator that integrates the given variable&#39;s equation.
Definition: SystemBase.C:1665
const std::set< SubdomainID > & getSubdomainsForVar(unsigned int var_number) const
Definition: SystemBase.h:761
unsigned int getMaxVariableNumber() const
Returns the maximum number of all variables on the system.
Definition: SystemBase.h:867
virtual bool isScalarVariable(unsigned int var_name) const
Definition: SystemBase.C:877
unsigned int nFieldVariables() const
Get the number of field variables in this system.
Definition: SystemBase.C:892
void getStandardFieldVariableNames(std::vector< VariableName > &std_field_variables) const
virtual void computeVariables(const NumericVector< Number > &)
Definition: SystemBase.h:869
virtual void reinitElemFace(const Elem *elem, unsigned int side, THREAD_ID tid)
Reinit assembly info for a side of an element.
Definition: SystemBase.C:366
virtual void prepareLowerD(THREAD_ID tid)
Prepare the system for use for lower dimensional elements.
Definition: SystemBase.C:332
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:90
virtual const NumericVector< Number > * solutionUDotDot() const
Definition: SystemBase.h:266
Real Number
virtual NumericVector< Number > * solutionUDotDot()
Definition: SystemBase.h:262
virtual const NumericVector< Number > * solutionUDotOld() const
Definition: SystemBase.h:267
void setVariableGlobalDoFs(const std::string &var_name)
set all the global dof indices for a variable
Definition: SystemBase.C:186
std::vector< NumericVector< Number > * > _tagged_vectors
Tagged vectors (pointer)
Definition: SystemBase.h:1021
NumericVector< Number > & solutionOld()
Definition: SystemBase.h:197
SystemBase(SubProblem &subproblem, FEProblemBase &fe_problem, const std::string &name, Moose::VarKindType var_kind)
Definition: SystemBase.C:57
virtual bool hasScalarVariable(const std::string &var_name) const
Definition: SystemBase.C:868
MooseVariableFE< VectorValue< Real > > VectorMooseVariable
Definition: SystemBase.h:34
Moose::VarKindType varKind() const
Definition: SystemBase.h:924
virtual void augmentSendList(std::vector< dof_id_type > &send_list)
Will modify the send_list to add all of the extra ghosted dofs for this system.
Definition: SystemBase.C:452
virtual NumericVector< Number > & residualGhosted()
Definition: SystemBase.h:430
MooseVariableFE< Real > MooseVariable
Definition: SystemBase.h:32
virtual void initialSetup()
Setup Functions.
Definition: SystemBase.C:1550
virtual void restoreSolutions()
Restore current solutions (call after your solve failed)
Definition: SystemBase.C:1309
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:925
virtual void residualSetup()
Definition: SystemBase.C:1591
const SubProblem & subproblem() const
Definition: SystemBase.h:102
std::vector< NumericVector< Number > * > _saved_solution_states
The saved solution states (0 = current, 1 = old, 2 = older, etc)
Definition: SystemBase.h:1086
virtual void disassociateDefaultMatrixTags()
Disassociate the matrices associated with the default matrix tags of this system. ...
Definition: SystemBase.C:1102
void clearAllDofIndices()
Clear all dof indices from moose variables.
Definition: SystemBase.C:1605
unsigned int _max_var_number
Maximum variable number.
Definition: SystemBase.h:1000
virtual void zeroVariables(std::vector< std::string > &vars_to_be_zeroed)
Zero out the solution for the list of variables passed in.
Definition: SystemBase.C:200
virtual void restoreOldSolutions()
Restore the old and older solutions when the saved solutions present.
Definition: SystemBase.C:542
void flushTaggedMatrices(const std::set< TagID > &tags)
flushes all matrices associated to tags.
Definition: SystemBase.C:1060
const NumericVector< Number > & solutionOlder() const
Definition: SystemBase.h:201
SolutionIterationType
Definition: MooseTypes.h:241
NumericVector< Number > * _u_dotdot_old
old solution vector for u^dotdot
Definition: SystemBase.h:1013
unsigned int THREAD_ID
Definition: MooseTypes.h:209
virtual void timestepSetup()
Definition: SystemBase.C:1570
MooseVariableField< T > & getActualFieldVariable(THREAD_ID tid, const std::string &var_name)
Returns a field variable pointer - this includes finite volume variables.
Definition: SystemBase.C:118