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 restoreSolutions();
188 
193  virtual const NumericVector<Number> * const & currentSolution() const = 0;
194 
198  const NumericVector<Number> & solution() const { return solutionState(0); }
199  const NumericVector<Number> & solutionOld() const { return solutionState(1); }
200  const NumericVector<Number> & solutionOlder() const { return solutionState(2); }
201 
202  virtual const NumericVector<Number> * solutionPreviousNewton() const;
204 
208  virtual void initSolutionState();
209 
216  virtual NumericVector<Number> &
217  solutionState(const unsigned int state,
219 
223  virtual const NumericVector<Number> & solutionState(
224  const unsigned int state,
226 
230  virtual void needSolutionState(
231  const unsigned int state,
233 
237  virtual bool hasSolutionState(
238  const unsigned int state,
240 
245  virtual void addDotVectors();
246 
247  virtual std::vector<Number> & duDotDus() { return _du_dot_du; }
248  virtual Number & duDotDotDu() { return _du_dotdot_du; }
249  virtual const Number & duDotDu(unsigned int var_num = 0) const;
250  virtual const Number & duDotDotDu() const { return _du_dotdot_du; }
251 
252  virtual NumericVector<Number> * solutionUDot() { return _u_dot; }
256  virtual const NumericVector<Number> * solutionUDot() const { return _u_dot; }
257  virtual const NumericVector<Number> * solutionUDotDot() const { return _u_dotdot; }
258  virtual const NumericVector<Number> * solutionUDotOld() const { return _u_dot_old; }
259  virtual const NumericVector<Number> * solutionUDotDotOld() const { return _u_dotdot_old; }
260 
261  virtual void saveOldSolutions();
262  virtual void restoreOldSolutions();
263 
267  bool hasVector(const std::string & tag_name) const;
268 
272  virtual bool hasVector(TagID tag_id) const
273  {
274  return tag_id < _tagged_vectors.size() && _tagged_vectors[tag_id];
275  }
276 
283  virtual TagID timeVectorTag() const { mooseError("Not implemented yet"); }
284 
288  virtual TagID systemMatrixTag() const { mooseError("Not implemented yet"); }
289 
290  /*
291  * Return TagID for nontime
292  */
293  virtual TagID nonTimeVectorTag() const { mooseError("Not implemented yet"); }
294 
295  /*
296  * Return TagID for nontime
297  */
298  virtual TagID residualVectorTag() const { mooseError("Not implemented yet"); }
299 
303  virtual std::set<TagID> defaultVectorTags() const
304  {
306  }
310  virtual std::set<TagID> defaultMatrixTags() const { return {systemMatrixTag()}; }
311 
315  virtual NumericVector<Number> & getVector(const std::string & name);
317  virtual const NumericVector<Number> & getVector(const std::string & name) const;
319 
323  virtual NumericVector<Number> & getVector(TagID tag);
325  virtual const NumericVector<Number> & getVector(TagID tag) const;
327 
331  virtual void associateVectorToTag(NumericVector<Number> & vec, TagID tag);
332 
336  virtual void disassociateVectorFromTag(NumericVector<Number> & vec, TagID tag);
337 
341  virtual void disassociateVectorFromTag(TagID tag);
342 
346  virtual void disassociateDefaultVectorTags();
347 
351  virtual bool hasMatrix(TagID tag) const
352  {
353  return tag < _tagged_matrices.size() && _tagged_matrices[tag];
354  }
355 
360 
364  virtual const libMesh::SparseMatrix<Number> & getMatrix(TagID tag) const;
365 
369  virtual void activeAllMatrixTags();
370 
374  virtual void activeMatrixTag(TagID tag);
375 
379  virtual bool matrixTagActive(TagID tag) const;
380 
384  virtual void deactiveMatrixTag(TagID tag);
385 
389  virtual void deactiveAllMatrixTags();
390 
394  void closeTaggedMatrices(const std::set<TagID> & tags);
395 
400  void flushTaggedMatrices(const std::set<TagID> & tags);
401 
405  virtual void associateMatrixToTag(libMesh::SparseMatrix<Number> & matrix, TagID tag);
406 
411 
415  virtual void disassociateMatrixFromTag(TagID tag);
416 
420  virtual void disassociateDefaultMatrixTags();
421 
426 
428  {
429  mooseError("This system does not support getting a copy of the residual");
430  }
432  {
433  mooseError("This system does not support getting a ghosted copy of the residual");
434  }
435 
439  virtual void augmentSendList(std::vector<dof_id_type> & send_list);
440 
444  virtual void augmentSparsity(libMesh::SparsityPattern::Graph & sparsity,
445  std::vector<dof_id_type> & n_nz,
446  std::vector<dof_id_type> & n_oz) = 0;
447 
454  virtual void addVariable(const std::string & var_type,
455  const std::string & var_name,
456  InputParameters & parameters);
457 
461  virtual bool isArrayVariable(const std::string & var_name) const;
462 
464 
470  virtual bool hasVariable(const std::string & var_name) const;
471  virtual bool hasScalarVariable(const std::string & var_name) const;
473 
474  virtual bool isScalarVariable(unsigned int var_name) const;
475 
483  MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string & var_name) const;
484 
492  MooseVariableFieldBase & getVariable(THREAD_ID tid, unsigned int var_number) const;
493 
503  template <typename T>
504  MooseVariableFE<T> & getFieldVariable(THREAD_ID tid, const std::string & var_name);
505 
509  template <typename T>
510  MooseVariableField<T> & getActualFieldVariable(THREAD_ID tid, const std::string & var_name);
511 
521  template <typename T>
522  MooseVariableFE<T> & getFieldVariable(THREAD_ID tid, unsigned int var_number);
523 
527  template <typename T>
528  MooseVariableField<T> & getActualFieldVariable(THREAD_ID tid, unsigned int var_number);
529 
533  template <typename T>
534  MooseVariableFV<T> & getFVVariable(THREAD_ID tid, const std::string & var_name);
535 
544  const std::string & var_name) const;
545 
553  virtual MooseVariableScalar & getScalarVariable(THREAD_ID tid, unsigned int var_number) const;
554 
561  virtual const std::set<SubdomainID> * getVariableBlocks(unsigned int var_number);
562 
567  virtual unsigned int nVariables() const;
568 
573  unsigned int nFieldVariables() const;
574 
579  unsigned int nFVVariables() const;
580 
586  std::size_t getMaxVarNDofsPerElem() const { return _max_var_n_dofs_per_elem; }
587 
593  std::size_t getMaxVarNDofsPerNode() const { return _max_var_n_dofs_per_node; }
594 
598  void assignMaxVarNDofsPerElem(std::size_t max_dofs) { _max_var_n_dofs_per_elem = max_dofs; }
599 
603  void assignMaxVarNDofsPerNode(std::size_t max_dofs) { _max_var_n_dofs_per_node = max_dofs; }
604 
609  virtual void addVariableToZeroOnResidual(std::string var_name);
610 
615  virtual void addVariableToZeroOnJacobian(std::string var_name);
616 
623  virtual void zeroVariables(std::vector<std::string> & vars_to_be_zeroed);
624 
629  virtual void zeroVariablesForResidual();
630 
635  virtual void zeroVariablesForJacobian();
636 
642 
647  virtual void prepare(THREAD_ID tid);
648 
658  virtual void prepareFace(THREAD_ID tid, bool resize_data);
659 
664  virtual void prepareNeighbor(THREAD_ID tid);
665 
670  virtual void prepareLowerD(THREAD_ID tid);
671 
677  virtual void reinitElem(const Elem * elem, THREAD_ID tid);
678 
685  virtual void reinitElemFace(const Elem * elem, unsigned int side, THREAD_ID tid);
686 
690  virtual void reinitNeighborFace(const Elem * elem, unsigned int side, THREAD_ID tid);
691 
695  virtual void reinitNeighbor(const Elem * elem, THREAD_ID tid);
696 
700  virtual void reinitLowerD(THREAD_ID tid);
701 
707  virtual void reinitNode(const Node * node, THREAD_ID tid);
708 
715  virtual void reinitNodeFace(const Node * node, BoundaryID bnd_id, THREAD_ID tid);
716 
722  virtual void reinitNodes(const std::vector<dof_id_type> & nodes, THREAD_ID tid);
723 
729  virtual void reinitNodesNeighbor(const std::vector<dof_id_type> & nodes, THREAD_ID tid);
730 
737  virtual void reinitScalars(THREAD_ID tid, bool reinit_for_derivative_reordering = false);
738 
748  virtual void addVariableToCopy(const std::string & dest_name,
749  const std::string & source_name,
750  const std::string & timestep);
751 
752  const std::vector<MooseVariableFieldBase *> & getVariables(THREAD_ID tid)
753  {
754  return _vars[tid].fieldVariables();
755  }
756 
757  const std::vector<MooseVariableScalar *> & getScalarVariables(THREAD_ID tid)
758  {
759  return _vars[tid].scalars();
760  }
761 
762  const std::set<SubdomainID> & getSubdomainsForVar(unsigned int var_number) const
763  {
764  return _var_map.at(var_number);
765  }
766 
773  const std::set<SubdomainID> & getSubdomainsForVar(const std::string & var_name) const;
774 
778  void removeVector(const std::string & name);
779 
794  addVector(const std::string & vector_name, const bool project, const libMesh::ParallelType type);
795 
810  addVector(TagID tag, const bool project, const libMesh::ParallelType type);
811 
815  void closeTaggedVector(const TagID tag);
819  void closeTaggedVectors(const std::set<TagID> & tags);
820 
824  void zeroTaggedVector(const TagID tag);
828  void zeroTaggedVectors(const std::set<TagID> & tags);
829 
835  void removeVector(TagID tag_id);
836 
839  void setVariableGlobalDoFs(const std::string & var_name);
840 
843  const std::vector<dof_id_type> & getVariableGlobalDoFs() { return _var_all_dof_indices; }
844 
851 
857  void removeMatrix(TagID tag);
858 
859  virtual const std::string & name() const;
860 
861  const std::vector<VariableName> & getVariableNames() const { return _vars[0].names(); }
862 
863  void getStandardFieldVariableNames(std::vector<VariableName> & std_field_variables) const;
864 
868  unsigned int getMaxVariableNumber() const { return _max_var_number; }
869 
870  virtual void computeVariables(const NumericVector<Number> & /*soln*/) {}
871 
872  void copyVars(libMesh::ExodusII_IO & io);
873 
877  virtual void copySolutionsBackwards();
878 
879  void addTimeIntegrator(const std::string & type,
880  const std::string & name,
881  InputParameters & parameters);
882 
884  bool hasVarCopy() const { return _var_to_copy.size() > 0; }
885 
889  void addScalingVector();
890 
898 
900  virtual void initialSetup();
901  virtual void timestepSetup();
902  virtual void customSetup(const ExecFlagType & exec_type);
903  virtual void subdomainSetup();
904  virtual void residualSetup();
905  virtual void jacobianSetup();
906 
910  void clearAllDofIndices();
911 
915  void setActiveVariableCoupleableVectorTags(const std::set<TagID> & vtags, THREAD_ID tid);
916 
920  void setActiveScalarVariableCoupleableVectorTags(const std::set<TagID> & vtags, THREAD_ID tid);
921 
926 
931  const std::vector<std::unique_ptr<NumericVector<Number>>> & gradientContainer() const
932  {
933  return _raw_grad_container;
934  }
935 
940  virtual void compute(ExecFlagType type) = 0;
941 
945  void copyTimeIntegrators(const SystemBase & other_sys);
946 
950  const TimeIntegrator & getTimeIntegrator(const unsigned int var_num) const;
951 
957  const TimeIntegrator * queryTimeIntegrator(const unsigned int var_num) const;
958 
962  const std::vector<std::shared_ptr<TimeIntegrator>> & getTimeIntegrators();
963 
967  std::string prefix() const;
968 
969 protected:
973  virtual NumericVector<Number> & solutionInternal() const = 0;
974 
978 
981 
984 
987  std::string _name;
988 
990  std::vector<VariableWarehouse> _vars;
992  std::map<unsigned int, std::set<SubdomainID>> _var_map;
994  unsigned int _max_var_number;
995 
996  std::vector<std::string> _vars_to_be_zeroed_on_residual;
997  std::vector<std::string> _vars_to_be_zeroed_on_jacobian;
998 
1003 
1008 
1011  std::vector<Real> _du_dot_du;
1013 
1015  std::vector<NumericVector<Number> *> _tagged_vectors;
1017  std::vector<libMesh::SparseMatrix<Number> *> _tagged_matrices;
1019  std::vector<bool> _matrix_tag_active_flags;
1020 
1021  // Used for saving old solutions so that they wont be accidentally changed
1022  NumericVector<Real> * _saved_old;
1023  NumericVector<Real> * _saved_older;
1024 
1025  // Used for saving old u_dot and u_dotdot so that they wont be accidentally changed
1026  NumericVector<Real> * _saved_dot_old;
1027  NumericVector<Real> * _saved_dotdot_old;
1028 
1031 
1032  std::vector<VarCopyInfo> _var_to_copy;
1033 
1036 
1039 
1041  std::vector<std::shared_ptr<TimeIntegrator>> _time_integrators;
1042 
1044  std::vector<std::vector<MooseVariableFieldBase *>> _numbered_vars;
1045 
1048 
1050  bool _verbose;
1051 
1054 
1056  std::vector<dof_id_type> _var_all_dof_indices;
1057 
1060  std::unique_ptr<NumericVector<Number>> _serialized_solution;
1061 
1065  std::vector<std::unique_ptr<NumericVector<Number>>> _raw_grad_container;
1066 
1067 private:
1071  TagName oldSolutionStateVectorName(const unsigned int,
1072  Moose::SolutionIterationType iteration_type) const;
1073 
1075  std::array<std::vector<NumericVector<Number> *>, 2> _solution_states;
1077  std::vector<NumericVector<Number> *> _saved_solution_states;
1078 };
1079 
1080 inline bool
1081 SystemBase::hasSolutionState(const unsigned int state,
1082  const Moose::SolutionIterationType iteration_type) const
1083 {
1084  return _solution_states[static_cast<unsigned short>(iteration_type)].size() > state;
1085 }
1086 
1087 #define PARALLEL_TRY
1088 
1089 #define PARALLEL_CATCH _fe_problem.checkExceptionAndStopSolve();
void zeroTaggedVector(const TagID tag)
Zero vector with the given tag.
Definition: SystemBase.C:666
std::vector< std::shared_ptr< TimeIntegrator > > _time_integrators
Time integrator.
Definition: SystemBase.h:1041
virtual const std::set< SubdomainID > * getVariableBlocks(unsigned int var_number)
Get the block where a variable of this system is defined.
Definition: SystemBase.C:163
virtual void needSolutionState(const unsigned int state, Moose::SolutionIterationType iteration_type=Moose::SolutionIterationType::Time)
Registers that the solution state state is needed.
Definition: SystemBase.C:1428
virtual void reinitNode(const Node *node, THREAD_ID tid)
Reinit nodal assembly info.
Definition: SystemBase.C:390
virtual bool hasVector(TagID tag_id) const
Check if the tagged vector exists in the system.
Definition: SystemBase.h:272
const std::vector< MooseVariableFieldBase * > & getVariables(THREAD_ID tid)
Definition: SystemBase.h:752
void closeTaggedVector(const TagID tag)
Close vector with the given tag.
Definition: SystemBase.C:641
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:198
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:1044
std::vector< dof_id_type > _var_all_dof_indices
Container for the dof indices of a given variable.
Definition: SystemBase.h:1056
std::vector< Real > _du_dot_du
Derivative of time derivative of u with respect to uj.
Definition: SystemBase.h:1011
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:47
std::vector< libMesh::SparseMatrix< Number > * > _tagged_matrices
Tagged matrices (pointer)
Definition: SystemBase.h:1017
const std::vector< MooseVariableScalar * > & getScalarVariables(THREAD_ID tid)
Definition: SystemBase.h:757
void zeroTaggedVectors(const std::set< TagID > &tags)
Zero all vectors for given tags.
Definition: SystemBase.C:685
virtual const NumericVector< Number > * solutionUDotDotOld() const
Definition: SystemBase.h:259
bool hasVector(const std::string &tag_name) const
Check if the named vector exists in the system.
Definition: SystemBase.C:907
void applyScalingFactors(const std::vector< Real > &inverse_scaling_factors)
Applies scaling factors to the system&#39;s variables.
Definition: SystemBase.C:1462
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:1288
virtual NumericVector< Number > & residualCopy()
Definition: SystemBase.h:427
const MooseMesh & mesh() const
Definition: SystemBase.h:100
bool _solution_states_initialized
Whether or not the solution states have been initialized.
Definition: SystemBase.h:1053
unsigned int TagID
Definition: MooseTypes.h:210
NumericVector< Number > & solution()
Definition: SystemBase.h:195
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters &parameters)
Canonical method for adding a variable.
Definition: SystemBase.C:710
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:256
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
Definition: MooseError.h:302
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:931
std::vector< std::string > _vars_to_be_zeroed_on_residual
Definition: SystemBase.h:996
NumericVector< Number > * _u_dot_old
old solution vector for u^dot
Definition: SystemBase.h:1005
virtual void initSolutionState()
Initializes the solution state.
Definition: SystemBase.C:1354
virtual void disassociateDefaultVectorTags()
Disassociate the vectors associated with the default vector tags of this system.
Definition: SystemBase.C:998
virtual void reinitElem(const Elem *elem, THREAD_ID tid)
Reinit an element assembly info.
Definition: SystemBase.C:339
virtual void reinitLowerD(THREAD_ID tid)
Compute the values of the variables on the lower dimensional element.
Definition: SystemBase.C:382
const TimeIntegrator & getTimeIntegrator(const unsigned int var_num) const
Retrieve the time integrator that integrates the given variable&#39;s equation.
Definition: SystemBase.C:1650
size_t _max_var_n_dofs_per_node
Maximum number of dofs for any one variable on any one node.
Definition: SystemBase.h:1038
bool hasVarCopy() const
Whether or not there are variables to be restarted from an Exodus mesh file.
Definition: SystemBase.h:884
virtual void associateVectorToTag(NumericVector< Number > &vec, TagID tag)
Associate a vector for a given tag.
Definition: SystemBase.C:964
virtual libMesh::Order getMinQuadratureOrder()
Get minimal quadrature order needed for integrating variables in this system.
Definition: SystemBase.C:240
virtual const Number & duDotDotDu() const
Definition: SystemBase.h:250
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:1419
Factory & _factory
Definition: SystemBase.h:983
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:1519
NumericVector< Number > * _u_dotdot
solution vector for u^dotdot
Definition: SystemBase.h:1002
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:1177
virtual bool hasMatrix(TagID tag) const
Check if the tagged matrix exists in the system.
Definition: SystemBase.h:351
virtual NumericVector< Number > * solutionUDotDotOld()
Definition: SystemBase.h:255
void removeMatrix(TagID tag)
Removes a matrix with a given tag.
Definition: SystemBase.C:582
virtual void associateMatrixToTag(libMesh::SparseMatrix< Number > &matrix, TagID tag)
Associate a matrix to a tag.
Definition: SystemBase.C:1059
This class provides an interface for common operations on field variables of both FE and FV types wit...
NumericVector< Number > & solutionOlder()
Definition: SystemBase.h:197
virtual void prepareFace(THREAD_ID tid, bool resize_data)
Prepare the system for use on sides.
Definition: SystemBase.C:278
void addScalingVector()
Add the scaling factor vector to the system.
Definition: SystemBase.C:1512
bool solutionStatesInitialized() const
Whether or not the solution states have been initialized via initSolutionState()
Definition: SystemBase.h:897
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:1625
void setActiveVariableCoupleableVectorTags(const std::set< TagID > &vtags, THREAD_ID tid)
Set the active vector tags for the variables.
Definition: SystemBase.C:1587
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:1065
virtual void copyPreviousNonlinearSolutions()
Shifts the solutions backwards in nonlinear iteration history.
Definition: SystemBase.C:1271
virtual bool isArrayVariable(const std::string &var_name) const
If a variable is an array variable.
Definition: SystemBase.C:847
virtual void reinitNodes(const std::vector< dof_id_type > &nodes, THREAD_ID tid)
Reinit variables at a set of nodes.
Definition: SystemBase.C:414
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:1060
size_t _max_var_n_dofs_per_elem
Maximum number of dofs for any one variable on any one element.
Definition: SystemBase.h:1035
virtual void reinitNodesNeighbor(const std::vector< dof_id_type > &nodes, THREAD_ID tid)
Reinit variables at a set of neighbor nodes.
Definition: SystemBase.C:425
NumericVector< Real > * _saved_older
Definition: SystemBase.h:1023
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:124
virtual void disassociateMatrixFromTag(libMesh::SparseMatrix< Number > &matrix, TagID tag)
Disassociate a matrix from a tag.
Definition: SystemBase.C:1071
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:1245
virtual unsigned int nVariables() const
Get the number of variables in this system.
Definition: SystemBase.C:874
void setActiveScalarVariableCoupleableVectorTags(const std::set< TagID > &vtags, THREAD_ID tid)
Set the active vector tags for the scalar variables.
Definition: SystemBase.C:1593
virtual const std::string & name() const
Definition: SystemBase.C:1330
virtual void jacobianSetup()
Definition: SystemBase.C:1573
void closeTaggedMatrices(const std::set< TagID > &tags)
Close all matrices associated the tags.
Definition: SystemBase.C:1043
virtual void deactiveAllMatrixTags()
Make matrices inactive.
Definition: SystemBase.C:1126
std::vector< VarCopyInfo > _var_to_copy
Definition: SystemBase.h:1032
virtual libMesh::DofMap & dofMap()
Gets writeable reference to the dof map.
Definition: SystemBase.C:1165
FEProblemBase & feProblem()
Definition: SystemBase.h:103
void copyTimeIntegrators(const SystemBase &other_sys)
Copy time integrators from another system.
Definition: SystemBase.C:1634
virtual NumericVector< Number > & serializedSolution()
Returns a reference to a serialized version of the solution vector for this subproblem.
Definition: SystemBase.C:1613
bool automaticScaling() const
Getter for whether we are performing automatic scaling.
Definition: SystemBase.h:122
virtual Number & duDotDotDu()
Definition: SystemBase.h:248
void copyVars(libMesh::ExodusII_IO &io)
Definition: SystemBase.C:1185
virtual const Number & duDotDu(unsigned int var_num=0) const
Definition: SystemBase.C:1668
Real _du_dotdot_du
Definition: SystemBase.h:1012
virtual void zeroVariablesForResidual()
Zero out the solution for the variables that were registered as needing to have their solutions zeroe...
Definition: SystemBase.C:228
void extraSendList(std::vector< dof_id_type > &send_list, void *context)
///< Type of coordinate system
Definition: SystemBase.C:39
std::vector< bool > _matrix_tag_active_flags
Active flags for tagged matrices.
Definition: SystemBase.h:1019
std::vector< std::string > _vars_to_be_zeroed_on_jacobian
Definition: SystemBase.h:997
boundary_id_type BoundaryID
bool _automatic_scaling
Whether to automatically scale the variables.
Definition: SystemBase.h:1047
Information about variables that will be copied.
Definition: SystemBase.h:66
virtual NumericVector< Number > * solutionUDot()
Definition: SystemBase.h:252
VarKindType
Framework-wide stuff.
Definition: MooseTypes.h:714
SubProblem & subproblem()
Definition: SystemBase.h:101
virtual void prepareNeighbor(THREAD_ID tid)
Prepare the system for use.
Definition: SystemBase.C:323
virtual ~SystemBase()
Definition: SystemBase.h:92
An inteface for the _console for outputting to the Console object.
virtual NumericVector< Number > * solutionUDotOld()
Definition: SystemBase.h:254
void assignMaxVarNDofsPerNode(std::size_t max_dofs)
assign the maximum node dofs
Definition: SystemBase.h:603
virtual void reinitScalars(THREAD_ID tid, bool reinit_for_derivative_reordering=false)
Reinit scalar varaibles.
Definition: SystemBase.C:436
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:977
virtual TagID timeVectorTag() const
Ideally, we should not need this API.
Definition: SystemBase.h:283
Moose::VarKindType _var_kind
default kind of variables in this system
Definition: SystemBase.h:1030
virtual bool matrixTagActive(TagID tag) const
If or not a matrix tag is active.
Definition: SystemBase.C:1151
virtual TagID nonTimeVectorTag() const
Definition: SystemBase.h:293
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:366
std::size_t getMaxVarNDofsPerNode() const
Gets the maximum number of dofs used by any one variable on any one node.
Definition: SystemBase.h:593
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:562
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:1600
NumericVector< Real > * _saved_dot_old
Definition: SystemBase.h:1026
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:843
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:1081
virtual void activeAllMatrixTags()
Make all exsiting matrices ative.
Definition: SystemBase.C:1137
unsigned int number() const
Gets the number of this system.
Definition: SystemBase.C:1159
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:659
virtual void reinitNeighbor(const Elem *elem, THREAD_ID tid)
Compute the values of the variables at all the current points.
Definition: SystemBase.C:374
const std::vector< std::shared_ptr< TimeIntegrator > > & getTimeIntegrators()
Definition: SystemBase.C:1662
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:834
std::size_t getMaxVarNDofsPerElem() const
Gets the maximum number of dofs used by any one variable on any one element.
Definition: SystemBase.h:586
virtual TagID systemMatrixTag() const
Return the Matrix Tag ID for System.
Definition: SystemBase.h:288
std::map< unsigned int, std::set< SubdomainID > > _var_map
Map of variables (variable id -> array of subdomains where it lives)
Definition: SystemBase.h:992
virtual void copySolutionsBackwards()
Copy current solution into old and older.
Definition: SystemBase.C:1260
virtual TagID residualVectorTag() const
Definition: SystemBase.h:298
virtual std::set< TagID > defaultMatrixTags() const
Get the default matrix tags associted with this system.
Definition: SystemBase.h:310
virtual void postInit()
Definition: SystemBase.h:162
virtual void solve()
Solve the system (using libMesh magic)
Definition: SystemBase.C:1251
void assignMaxVarNDofsPerElem(std::size_t max_dofs)
assign the maximum element dofs
Definition: SystemBase.h:598
std::string _name
The name of this system.
Definition: SystemBase.h:987
MooseApp & _app
Definition: SystemBase.h:982
FEProblemBase & _fe_problem
the governing finite element/volume problem
Definition: SystemBase.h:980
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:144
virtual void activeMatrixTag(TagID tag)
Active a matrix for tag.
Definition: SystemBase.C:1102
virtual void saveOldSolutions()
Save the old and older solutions.
Definition: SystemBase.C:502
std::vector< VariableWarehouse > _vars
Variable warehouses (one for each thread)
Definition: SystemBase.h:990
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Base class for time integrators.
virtual void subdomainSetup()
Definition: SystemBase.C:1559
Generic class for solving transient nonlinear problems.
Definition: SubProblem.h:78
bool _verbose
True if printing out additional information.
Definition: SystemBase.h:1050
void removeVector(const std::string &name)
Remove a vector from the system with the given name.
Definition: SystemBase.C:1324
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:893
MooseMesh & _mesh
Definition: SystemBase.h:985
NumericVector< Number > * _u_dot
solution vector for u^dot
Definition: SystemBase.h:1000
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:173
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:110
virtual libMesh::SparseMatrix< Number > & getMatrix(TagID tag)
Get a raw SparseMatrix.
Definition: SystemBase.C:1007
const NumericVector< Number > & solutionOld() const
Definition: SystemBase.h:199
virtual void reinitNodeFace(const Node *node, BoundaryID bnd_id, THREAD_ID tid)
Reinit nodal assembly info on a face.
Definition: SystemBase.C:402
virtual void zeroVariablesForJacobian()
Zero out the solution for the variables that were registered as needing to have their solutions zeroe...
Definition: SystemBase.C:234
virtual std::set< TagID > defaultVectorTags() const
Get the default vector tags associated with this system.
Definition: SystemBase.h:303
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:1371
NumericVector< Real > * _saved_old
Definition: SystemBase.h:1022
std::array< std::vector< NumericVector< Number > * >, 2 > _solution_states
The solution states (0 = current, 1 = old, 2 = older, etc)
Definition: SystemBase.h:1075
Class for scalar variables (they are different).
std::string prefix() const
Definition: SystemBase.C:1680
NumericVector< Real > * _saved_dotdot_old
Definition: SystemBase.h:1027
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:861
virtual std::vector< Number > & duDotDus()
Definition: SystemBase.h:247
virtual void prepare(THREAD_ID tid)
Prepare the system for use.
Definition: SystemBase.C:255
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:179
virtual const NumericVector< Number > * solutionPreviousNewton() const
Definition: SystemBase.C:1345
virtual void customSetup(const ExecFlagType &exec_type)
Definition: SystemBase.C:1552
const TimeIntegrator * queryTimeIntegrator(const unsigned int var_num) const
Retrieve the time integrator that integrates the given variable&#39;s equation.
Definition: SystemBase.C:1640
const std::set< SubdomainID > & getSubdomainsForVar(unsigned int var_number) const
Definition: SystemBase.h:762
unsigned int getMaxVariableNumber() const
Returns the maximum number of all variables on the system.
Definition: SystemBase.h:868
virtual bool isScalarVariable(unsigned int var_name) const
Definition: SystemBase.C:868
unsigned int nFieldVariables() const
Get the number of field variables in this system.
Definition: SystemBase.C:883
void getStandardFieldVariableNames(std::vector< VariableName > &std_field_variables) const
virtual void computeVariables(const NumericVector< Number > &)
Definition: SystemBase.h:870
virtual void reinitElemFace(const Elem *elem, unsigned int side, THREAD_ID tid)
Reinit assembly info for a side of an element.
Definition: SystemBase.C:358
virtual void prepareLowerD(THREAD_ID tid)
Prepare the system for use for lower dimensional elements.
Definition: SystemBase.C:331
MooseVariableFieldBase & getVariable(THREAD_ID tid, const std::string &var_name) const
Gets a reference to a variable of with specified name.
Definition: SystemBase.C:89
virtual const NumericVector< Number > * solutionUDotDot() const
Definition: SystemBase.h:257
virtual void deactiveMatrixTag(TagID tag)
deactive a matrix for tag
Definition: SystemBase.C:1114
Real Number
virtual NumericVector< Number > * solutionUDotDot()
Definition: SystemBase.h:253
virtual const NumericVector< Number > * solutionUDotOld() const
Definition: SystemBase.h:258
void setVariableGlobalDoFs(const std::string &var_name)
set all the global dof indices for a variable
Definition: SystemBase.C:185
std::vector< NumericVector< Number > * > _tagged_vectors
Tagged vectors (pointer)
Definition: SystemBase.h:1015
NumericVector< Number > & solutionOld()
Definition: SystemBase.h:196
SystemBase(SubProblem &subproblem, FEProblemBase &fe_problem, const std::string &name, Moose::VarKindType var_kind)
Definition: SystemBase.C:56
virtual bool hasScalarVariable(const std::string &var_name) const
Definition: SystemBase.C:859
MooseVariableFE< VectorValue< Real > > VectorMooseVariable
Definition: SystemBase.h:34
Moose::VarKindType varKind() const
Definition: SystemBase.h:925
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:444
virtual NumericVector< Number > & residualGhosted()
Definition: SystemBase.h:431
MooseVariableFE< Real > MooseVariable
Definition: SystemBase.h:32
virtual void initialSetup()
Setup Functions.
Definition: SystemBase.C:1525
virtual void restoreSolutions()
Restore current solutions (call after your solve failed)
Definition: SystemBase.C:1307
virtual NumericVector< Number > & getVector(const std::string &name)
Get a raw NumericVector by name.
Definition: SystemBase.C:916
virtual void residualSetup()
Definition: SystemBase.C:1566
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:1077
virtual void disassociateDefaultMatrixTags()
Disassociate the matrices associated with the default matrix tags of this system. ...
Definition: SystemBase.C:1093
void clearAllDofIndices()
Clear all dof indices from moose variables.
Definition: SystemBase.C:1580
unsigned int _max_var_number
Maximum variable number.
Definition: SystemBase.h:994
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:199
virtual void restoreOldSolutions()
Restore the old and older solutions when the saved solutions present.
Definition: SystemBase.C:534
void flushTaggedMatrices(const std::set< TagID > &tags)
flushes all matrices associated to tags.
Definition: SystemBase.C:1051
const NumericVector< Number > & solutionOlder() const
Definition: SystemBase.h:200
SolutionIterationType
Definition: MooseTypes.h:241
NumericVector< Number > * _u_dotdot_old
old solution vector for u^dotdot
Definition: SystemBase.h:1007
unsigned int THREAD_ID
Definition: MooseTypes.h:209
virtual void timestepSetup()
Definition: SystemBase.C:1545
MooseVariableField< T > & getActualFieldVariable(THREAD_ID tid, const std::string &var_name)
Returns a field variable pointer - this includes finite volume variables.
Definition: SystemBase.C:117