OGS
ThermoHydroMechanicsProcess.h
Go to the documentation of this file.
1 
11 #pragma once
12 
14 #include "ProcessLib/Process.h"
16 
17 namespace ProcessLib
18 {
19 namespace ThermoHydroMechanics
20 {
21 struct LocalAssemblerInterface;
22 
28 template <int DisplacementDim>
30 {
31 public:
33  std::string name,
34  MeshLib::Mesh& mesh,
35  std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
36  jacobian_assembler,
37  std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
38  parameters,
39  unsigned const integration_order,
40  std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
41  process_variables,
43  SecondaryVariableCollection&& secondary_variables,
44  bool const use_monolithic_scheme);
45 
48 
49  bool isLinear() const override;
51 
65  const int process_id) const override;
66 
67 private:
68  void constructDofTable() override;
69 
71  NumLib::LocalToGlobalIndexMap const& dof_table,
72  MeshLib::Mesh const& mesh,
73  unsigned const integration_order) override;
74 
75  void initializeBoundaryConditions() override;
76 
77  void assembleConcreteProcess(const double t, double const dt,
78  std::vector<GlobalVector*> const& x,
79  std::vector<GlobalVector*> const& xdot,
80  int const process_id, GlobalMatrix& M,
81  GlobalMatrix& K, GlobalVector& b) override;
82 
84  const double t, double const dt, std::vector<GlobalVector*> const& x,
85  std::vector<GlobalVector*> const& xdot, const double dxdot_dx,
86  const double dx_dx, int const process_id, GlobalMatrix& M,
87  GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) override;
88 
89  void preTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
90  double const t, double const dt,
91  const int process_id) override;
92 
93  void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
94  const double t, const double dt,
95  int const process_id) override;
96 
98  GlobalVector const& xdot,
99  const double t, double const dt,
100  int const process_id) override;
101 
103  const int process_id) const override;
104 
105 private:
106  std::vector<MeshLib::Node*> _base_nodes;
107  std::unique_ptr<MeshLib::MeshSubset const> _mesh_subset_base_nodes;
109 
110  std::vector<std::unique_ptr<LocalAssemblerInterface>> _local_assemblers;
111 
112  std::unique_ptr<NumLib::LocalToGlobalIndexMap>
114 
117  std::unique_ptr<NumLib::LocalToGlobalIndexMap>
119 
123 
124  void computeSecondaryVariableConcrete(double const t, double const dt,
125  std::vector<GlobalVector*> const& x,
126  GlobalVector const& x_dot,
127  const int process_id) override;
131  std::tuple<NumLib::LocalToGlobalIndexMap*, bool>
132  getDOFTableForExtrapolatorData() const override;
133 
137  bool hasMechanicalProcess(int const process_id) const
138  {
139  return _use_monolithic_scheme || process_id == 2;
140  }
141 
145 };
146 
147 extern template class ThermoHydroMechanicsProcess<2>;
148 extern template class ThermoHydroMechanicsProcess<3>;
149 
150 } // namespace ThermoHydroMechanics
151 } // namespace ProcessLib
MathLib::SparsityPattern< GlobalIndexType > GlobalSparsityPattern
Global vector based on Eigen vector.
Definition: EigenVector.h:26
std::string const name
Definition: Process.h:323
const bool _use_monolithic_scheme
Definition: Process.h:335
Handles configuration of several secondary variables from the project file.
std::unique_ptr< NumLib::LocalToGlobalIndexMap > _local_to_global_index_map_with_base_nodes
NumLib::LocalToGlobalIndexMap const & getDOFTable(const int process_id) const override
void postNonLinearSolverConcreteProcess(GlobalVector const &x, GlobalVector const &xdot, const double t, double const dt, int const process_id) override
void initializeConcreteProcess(NumLib::LocalToGlobalIndexMap const &dof_table, MeshLib::Mesh const &mesh, unsigned const integration_order) override
Process specific initialization called by initialize().
void preTimestepConcreteProcess(std::vector< GlobalVector * > const &x, double const t, double const dt, const int process_id) override
std::unique_ptr< NumLib::LocalToGlobalIndexMap > _local_to_global_index_map_single_component
void postTimestepConcreteProcess(std::vector< GlobalVector * > const &x, const double t, const double dt, int const process_id) override
void assembleWithJacobianConcreteProcess(const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &xdot, const double dxdot_dx, const double dx_dx, int const process_id, GlobalMatrix &M, GlobalMatrix &K, GlobalVector &b, GlobalMatrix &Jac) override
std::tuple< NumLib::LocalToGlobalIndexMap *, bool > getDOFTableForExtrapolatorData() const override
std::unique_ptr< MeshLib::MeshSubset const > _mesh_subset_base_nodes
void computeSecondaryVariableConcrete(double const t, double const dt, std::vector< GlobalVector * > const &x, GlobalVector const &x_dot, const int process_id) override
MathLib::MatrixSpecifications getMatrixSpecifications(const int process_id) const override
ThermoHydroMechanicsProcessData< DisplacementDim > _process_data
ThermoHydroMechanicsProcess(std::string name, MeshLib::Mesh &mesh, std::unique_ptr< ProcessLib::AbstractJacobianAssembler > &&jacobian_assembler, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const &parameters, unsigned const integration_order, std::vector< std::vector< std::reference_wrapper< ProcessVariable >>> &&process_variables, ThermoHydroMechanicsProcessData< DisplacementDim > &&process_data, SecondaryVariableCollection &&secondary_variables, bool const use_monolithic_scheme)
std::vector< std::unique_ptr< LocalAssemblerInterface > > _local_assemblers
void assembleConcreteProcess(const double t, double const dt, std::vector< GlobalVector * > const &x, std::vector< GlobalVector * > const &xdot, int const process_id, GlobalMatrix &M, GlobalMatrix &K, GlobalVector &b) override