OGS
TH2MProcess.h
Go to the documentation of this file.
1 
11 #pragma once
12 
14 #include "ProcessLib/Process.h"
15 #include "TH2MProcessData.h"
16 
17 namespace ProcessLib
18 {
19 namespace TH2M
20 {
21 struct LocalAssemblerInterface;
22 
25 template <int DisplacementDim>
26 class TH2MProcess final : public Process
27 {
28 public:
30  std::string name,
31  MeshLib::Mesh& mesh,
32  std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&&
33  jacobian_assembler,
34  std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
35  parameters,
36  unsigned const integration_order,
37  std::vector<std::vector<std::reference_wrapper<ProcessVariable>>>&&
38  process_variables,
39  TH2MProcessData<DisplacementDim>&& process_data,
40  SecondaryVariableCollection&& secondary_variables,
41  bool const use_monolithic_scheme);
42 
45 
46  bool isLinear() const override;
48 
62  const int process_id) const override;
63 
64 private:
65  void constructDofTable() override;
66 
68  NumLib::LocalToGlobalIndexMap const& dof_table,
69  MeshLib::Mesh const& mesh,
70  unsigned const integration_order) override;
71 
72  void initializeBoundaryConditions() override;
73 
74  void setInitialConditionsConcreteProcess(std::vector<GlobalVector*>& x,
75  double const t,
76  int const process_id) override;
77 
78  void assembleConcreteProcess(const double t, double const dt,
79  std::vector<GlobalVector*> const& x,
80  std::vector<GlobalVector*> const& xdot,
81  int const process_id, GlobalMatrix& M,
82  GlobalMatrix& K, GlobalVector& b) override;
83 
85  const double t, double const dt, std::vector<GlobalVector*> const& x,
86  std::vector<GlobalVector*> const& xdot, const double dxdot_dx,
87  const double dx_dx, int const process_id, GlobalMatrix& M,
88  GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) override;
89 
90  void preTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
91  double const t, double const dt,
92  const int process_id) override;
93 
94  void postTimestepConcreteProcess(std::vector<GlobalVector*> const& x,
95  const double t, const double dt,
96  int const /*process_id*/) override;
97 
99  const int process_id) const override;
100 
101  std::vector<NumLib::LocalToGlobalIndexMap const*> getDOFTables(
102  int const number_of_processes) const;
103 
104 private:
105  std::vector<MeshLib::Node*> _base_nodes;
106  std::unique_ptr<MeshLib::MeshSubset const> _mesh_subset_base_nodes;
108 
109  std::vector<std::unique_ptr<LocalAssemblerInterface>> _local_assemblers;
110 
111  std::unique_ptr<NumLib::LocalToGlobalIndexMap>
113 
116  std::unique_ptr<NumLib::LocalToGlobalIndexMap>
118 
122 
123  void computeSecondaryVariableConcrete(double const t, double const dt,
124  std::vector<GlobalVector*> const& x,
125  GlobalVector const& x_dot,
126  const int process_id) override;
130  std::tuple<NumLib::LocalToGlobalIndexMap*, bool>
131  getDOFTableForExtrapolatorData() const override;
132 
136  bool hasMechanicalProcess(int const process_id) const
137  {
138  return _use_monolithic_scheme || process_id == deformation_process_id;
139  }
140 
143 
144  static constexpr int monolithic_process_id = 0;
145  static constexpr int deformation_process_id = 3;
146 
147  // number of per_process_variable_components
148  static constexpr int n_gas_pressure_components = 1;
149  static constexpr int n_capillary_pressure_components = 1;
150  static constexpr int n_temperature_components = 1;
151  static constexpr int n_displacement_components = DisplacementDim;
152 };
153 
154 extern template class TH2MProcess<2>;
155 extern template class TH2MProcess<3>;
156 
157 } // namespace TH2M
158 } // 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_single_component
Definition: TH2MProcess.h:112
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
static constexpr int monolithic_process_id
Definition: TH2MProcess.h:144
bool isLinear() const override
Definition: TH2MProcess.cpp:73
std::vector< std::unique_ptr< LocalAssemblerInterface > > _local_assemblers
Definition: TH2MProcess.h:109
std::tuple< NumLib::LocalToGlobalIndexMap *, bool > getDOFTableForExtrapolatorData() const override
TH2MProcess(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, TH2MProcessData< DisplacementDim > &&process_data, SecondaryVariableCollection &&secondary_variables, bool const use_monolithic_scheme)
Definition: TH2MProcess.cpp:27
void setInitialConditionsConcreteProcess(std::vector< GlobalVector * > &x, double const t, int const process_id) override
MeshLib::PropertyVector< double > * _nodal_forces
Definition: TH2MProcess.h:141
bool hasMechanicalProcess(int const process_id) const
Definition: TH2MProcess.h:136
static constexpr int n_temperature_components
Definition: TH2MProcess.h:150
std::vector< NumLib::LocalToGlobalIndexMap const * > getDOFTables(int const number_of_processes) const
void preTimestepConcreteProcess(std::vector< GlobalVector * > const &x, double const t, double const dt, const int process_id) override
void postTimestepConcreteProcess(std::vector< GlobalVector * > const &x, const double t, const double dt, int const) override
MathLib::MatrixSpecifications getMatrixSpecifications(const int process_id) const override
Definition: TH2MProcess.cpp:80
static constexpr int n_displacement_components
Definition: TH2MProcess.h:151
MeshLib::PropertyVector< double > * _hydraulic_flow
Definition: TH2MProcess.h:142
TH2MProcessData< DisplacementDim > _process_data
Definition: TH2MProcess.h:107
GlobalSparsityPattern _sparsity_pattern_with_linear_element
Definition: TH2MProcess.h:121
std::vector< MeshLib::Node * > _base_nodes
Definition: TH2MProcess.h:105
static constexpr int n_gas_pressure_components
Definition: TH2MProcess.h:148
void constructDofTable() override
Definition: TH2MProcess.cpp:99
void computeSecondaryVariableConcrete(double const t, double const dt, std::vector< GlobalVector * > const &x, GlobalVector const &x_dot, const int process_id) override
NumLib::LocalToGlobalIndexMap const & getDOFTable(const int process_id) const override
std::unique_ptr< NumLib::LocalToGlobalIndexMap > _local_to_global_index_map_with_base_nodes
Definition: TH2MProcess.h:117
std::unique_ptr< MeshLib::MeshSubset const > _mesh_subset_base_nodes
Definition: TH2MProcess.h:106
static constexpr int n_capillary_pressure_components
Definition: TH2MProcess.h:149
void initializeConcreteProcess(NumLib::LocalToGlobalIndexMap const &dof_table, MeshLib::Mesh const &mesh, unsigned const integration_order) override
Process specific initialization called by initialize().
static constexpr int deformation_process_id
Definition: TH2MProcess.h:145
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
void initializeBoundaryConditions() override