Flow123d  JS_before_hm-2196-g9bdbf60c0
elasticity.hh
Go to the documentation of this file.
1 /*!
2  *
3  * Copyright (C) 2015 Technical University of Liberec. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU General Public License version 3 as published by the
7  * Free Software Foundation. (http://www.gnu.org/licenses/gpl-3.0.en.html)
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12  *
13  *
14  * @file elasticity.hh
15  * @brief FEM for linear elasticity.
16  * @author Jan Stebel
17  */
18 
19 #ifndef ELASTICITY_HH_
20 #define ELASTICITY_HH_
21 
22 #include "fields/bc_field.hh"
23 #include "fields/field.hh"
24 #include "fields/field_fe.hh"
25 #include "fields/multi_field.hh"
26 #include "la/linsys.hh"
27 #include "la/vector_mpi.hh"
29 #include "coupling/equation.hh"
30 #include "fem/fe_values_views.hh"
31 #include "tools/mixed.hh"
33 
34 class Distribution;
35 class OutputTime;
36 class DOFHandlerMultiDim;
37 template<unsigned int dim> class FiniteElement;
38 class Elasticity;
39 template<unsigned int dim> class StiffnessAssemblyElasticity;
40 template<unsigned int dim> class RhsAssemblyElasticity;
41 template<unsigned int dim> class OutpuFieldsAssemblyElasticity;
42 template< template<IntDim...> class DimAssembly> class GenericAssembly;
43 
44 
45 
46 
47 class Elasticity : public EquationBase
48 {
49 public:
50 
51  class EqFields : public FieldSet {
52  public:
53 
54  enum Bc_types {
59  };
60 
61  EqFields();
62 
64 
72  Field<3, FieldValue<3>::Scalar> fracture_sigma; ///< Transition parameter for diffusive transfer on fractures.
73 
74  /// Pointer to DarcyFlow field cross_section
76  Field<3, FieldValue<3>::Scalar > potential_load; ///< Potential of an additional (external) load.
77  Field<3, FieldValue<3>::Scalar > ref_potential_load; ///< Potential of reference external load on boundary. TODO: Switch to BCField when possible.
80 
86 
87  /// @name Instances of FieldModel used in assembly methods
88  // @{
89 
93 
94  // @}
95 
96  std::shared_ptr<FieldFE<3, FieldValue<3>::VectorFixed> > output_field_ptr;
97  std::shared_ptr<FieldFE<3, FieldValue<3>::TensorFixed> > output_stress_ptr;
98  std::shared_ptr<FieldFE<3, FieldValue<3>::Scalar> > output_von_mises_stress_ptr;
99  std::shared_ptr<FieldFE<3, FieldValue<3>::Scalar> > output_cross_section_ptr;
100  std::shared_ptr<FieldFE<3, FieldValue<3>::Scalar> > output_div_ptr;
101 
103 
104  };
105 
106  class EqData {
107  public:
108 
110  : ls(nullptr) {}
111 
113  if (ls!=nullptr) delete ls;
114  }
115 
116  /// Create DOF handler objects
117  void create_dh(Mesh * mesh, unsigned int fe_order);
118 
119  /// Objects for distribution of dofs.
120  std::shared_ptr<DOFHandlerMultiDim> dh_;
121  std::shared_ptr<DOFHandlerMultiDim> dh_scalar_;
122  std::shared_ptr<DOFHandlerMultiDim> dh_tensor_;
123 
124  /// @name Solution of algebraic system
125  // @{
126 
127  /// Linear algebraic system.
129 
130  // @}
131 
132  /// Shared Balance object
133  std::shared_ptr<Balance> balance_;
134 
135  };
136 
137 
138  /**
139  * @brief Constructor.
140  * @param init_mesh computational mesh
141  * @param in_rec input record
142  * @param tm time governor (if nullptr then it is created from input record)
143  */
144  Elasticity(Mesh &init_mesh, const Input::Record in_rec, TimeGovernor *tm = nullptr);
145  /**
146 
147  * @brief Declare input record type for the equation TransportDG.
148  */
149  static const Input::Type::Record & get_input_type();
150 
151  /**
152  * @brief Initialize solution in the zero time.
153  */
154  void zero_time_step() override;
155 
156  /**
157  * @brief Computes the solution in one time instant.
158  */
159  void update_solution() override;
160 
161  /// Pass to next time and update equation data.
162  void next_time();
163 
164  /// Solve without updating time step and without output.
165  void solve_linear_system();
166 
167  /**
168  * @brief Postprocesses the solution and writes to output file.
169  */
170  void output_data();
171 
172  /**
173  * @brief Destructor.
174  */
175  ~Elasticity();
176 
177  void initialize() override;
178 
179  // Recompute fields for output (stress, divergence etc.)
180  void update_output_fields();
181 
182  void set_potential_load(const Field<3, FieldValue<3>::Scalar> &potential,
183  const Field<3, FieldValue<3>::Scalar> &ref_potential)
184  {
185  eq_fields_->potential_load = potential;
186  eq_fields_->ref_potential_load = ref_potential;
187  }
188 
190 
191  const Vec &get_solution()
192  { return eq_data_->ls->get_solution(); }
193 
194  inline EqFields &eq_fields() { return *eq_fields_; }
195 
196  inline EqData &eq_data() { return *eq_data_; }
197 
198 
199 
201 
202 
203 
204 
205 private:
206  /// Registrar of class to factory
207  static const int registrar;
208 
209  void preallocate();
210 
211 
212 
213 
214  /// @name Physical parameters
215  // @{
216 
217  /// Fields for model parameters.
218  std::shared_ptr<EqFields> eq_fields_;
219 
220  /// Data for model parameters.
221  std::shared_ptr<EqData> eq_data_;
222 
223 
224  // @}
225 
226 
227  /// @name Output to file
228  // @{
229 
230  std::shared_ptr<OutputTime> output_stream_;
231 
232  /// Record with input specification.
234 
235 
236  // @}
237 
238 
239  static constexpr const char * name_ = "Mechanics_LinearElasticity";
240 
241 
242  /// general assembly objects, hold assembly objects of appropriate dimension
246 
247 };
248 
249 
250 /*
251  * TODO Remove these two methods after implementation new assembly algorithm in HM_Iterative class.
252  */
253 double lame_mu(double young, double poisson);
254 double lame_lambda(double young, double poisson);
255 
256 
257 
258 
259 
260 
261 #endif /* ELASTICITY_HH_ */
bc_field.hh
Elasticity::input_rec
Input::Record input_rec
Record with input specification.
Definition: elasticity.hh:233
Elasticity::EqFields::poisson_ratio
Field< 3, FieldValue< 3 >::Scalar > poisson_ratio
Definition: elasticity.hh:71
Elasticity::EqFields
Definition: elasticity.hh:51
Elasticity::EqFields::output_stress_ptr
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::TensorFixed > > output_stress_ptr
Definition: elasticity.hh:97
Elasticity::EqFields::output_fields
EquationOutput output_fields
Definition: elasticity.hh:102
Elasticity::EqFields::bc_stress
BCField< 3, FieldValue< 3 >::TensorFixed > bc_stress
Definition: elasticity.hh:68
Elasticity::update_output_fields
void update_output_fields()
Definition: elasticity.cc:408
StiffnessAssemblyElasticity
Definition: assembly_elasticity.hh:35
Elasticity::eq_fields
EqFields & eq_fields()
Definition: elasticity.hh:194
Elasticity::EqFields::Bc_types
Bc_types
Definition: elasticity.hh:54
LinSys
Definition: la_linsys_new.hh:169
fe_values_views.hh
vector_mpi.hh
lame_lambda
double lame_lambda(double young, double poisson)
Definition: elasticity.cc:83
Elasticity::next_time
void next_time()
Pass to next time and update equation data.
Definition: elasticity.cc:494
Elasticity::solve_linear_system
void solve_linear_system()
Solve without updating time step and without output.
Definition: elasticity.cc:503
lame_mu
double lame_mu(double young, double poisson)
Definition: elasticity.cc:77
Elasticity::EqFields::output_divergence
Field< 3, FieldValue< 3 >::Scalar > output_divergence
Definition: elasticity.hh:85
Elasticity::EqData::ls
LinSys * ls
Linear algebraic system.
Definition: elasticity.hh:128
Elasticity::EqFields::bc_type
BCField< 3, FieldValue< 3 >::Enum > bc_type
Definition: elasticity.hh:65
Elasticity::EqFields::subdomain
Field< 3, FieldValue< 3 >::Scalar > subdomain
Definition: elasticity.hh:79
linsys.hh
Wrappers for linear systems based on MPIAIJ and MATIS format.
Elasticity::EqFields::output_cross_section
Field< 3, FieldValue< 3 >::Scalar > output_cross_section
Definition: elasticity.hh:84
Elasticity::set_potential_load
void set_potential_load(const Field< 3, FieldValue< 3 >::Scalar > &potential, const Field< 3, FieldValue< 3 >::Scalar > &ref_potential)
Definition: elasticity.hh:182
Elasticity::EqFields::output_div_ptr
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::Scalar > > output_div_ptr
Definition: elasticity.hh:100
field_fe.hh
Elasticity::name_
static constexpr const char * name_
Definition: elasticity.hh:239
Elasticity::FactoryBaseType
Elasticity FactoryBaseType
Definition: elasticity.hh:200
Elasticity::EqFields::output_stress
Field< 3, FieldValue< 3 >::TensorFixed > output_stress
Definition: elasticity.hh:82
Elasticity::EqData::dh_
std::shared_ptr< DOFHandlerMultiDim > dh_
Objects for distribution of dofs.
Definition: elasticity.hh:120
Elasticity
Definition: elasticity.hh:47
Elasticity::calculate_cumulative_balance
void calculate_cumulative_balance()
Definition: elasticity.cc:564
EquationBase::mesh
Mesh & mesh()
Definition: equation.hh:179
equation_output.hh
Distribution
Definition: distribution.hh:50
Elasticity::registrar
static const int registrar
Registrar of class to factory.
Definition: elasticity.hh:207
Elasticity::EqData::~EqData
~EqData()
Definition: elasticity.hh:112
Elasticity::EqFields::fracture_sigma
Field< 3, FieldValue< 3 >::Scalar > fracture_sigma
Transition parameter for diffusive transfer on fractures.
Definition: elasticity.hh:72
Elasticity::initialize
void initialize() override
Definition: elasticity.cc:324
Elasticity::EqFields::output_von_mises_stress_ptr
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::Scalar > > output_von_mises_stress_ptr
Definition: elasticity.hh:98
Elasticity::EqFields::bc_displacement
BCField< 3, FieldValue< 3 >::VectorFixed > bc_displacement
Definition: elasticity.hh:66
Elasticity::EqFields::output_von_mises_stress
Field< 3, FieldValue< 3 >::Scalar > output_von_mises_stress
Definition: elasticity.hh:83
Input::Record
Accessor to the data with type Type::Record.
Definition: accessors.hh:291
quadrature_lib.hh
Definitions of particular quadrature rules on simplices.
DOFHandlerMultiDim
Provides the numbering of the finite element degrees of freedom on the computational mesh.
Definition: dofhandler.hh:151
EquationOutput
Definition: equation_output.hh:44
TimeGovernor
Basic time management functionality for unsteady (and steady) solvers (class Equation).
Definition: time_governor.hh:317
Elasticity::get_solution
const Vec & get_solution()
Definition: elasticity.hh:191
Elasticity::EqFields::lame_mu
Field< 3, FieldValue< 3 >::Scalar > lame_mu
Definition: elasticity.hh:90
OutputTime
The class for outputting data during time.
Definition: output_time.hh:51
Elasticity::Elasticity
Elasticity(Mesh &init_mesh, const Input::Record in_rec, TimeGovernor *tm=nullptr)
Constructor.
Definition: elasticity.cc:282
Elasticity::eq_data
EqData & eq_data()
Definition: elasticity.hh:196
Elasticity::preallocate
void preallocate()
Definition: elasticity.cc:469
Elasticity::EqFields::output_field_ptr
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::VectorFixed > > output_field_ptr
Definition: elasticity.hh:96
Elasticity::EqFields::cross_section
Field< 3, FieldValue< 3 >::Scalar > cross_section
Pointer to DarcyFlow field cross_section.
Definition: elasticity.hh:75
FieldSet
Container for various descendants of FieldCommonBase.
Definition: field_set.hh:159
equation.hh
Abstract base class for equation clasess.
EquationBase
Definition: equation.hh:57
Input::Type::Selection
Template for classes storing finite set of named values.
Definition: type_selection.hh:65
Elasticity::EqFields::young_modulus
Field< 3, FieldValue< 3 >::Scalar > young_modulus
Definition: elasticity.hh:70
OutpuFieldsAssemblyElasticity
Definition: assembly_elasticity.hh:553
Elasticity::EqFields::bc_type_displacement
@ bc_type_displacement
Definition: elasticity.hh:55
Elasticity::output_stream_
std::shared_ptr< OutputTime > output_stream_
Definition: elasticity.hh:230
FiniteElement
Abstract class for the description of a general finite element on a reference simplex in dim dimensio...
Definition: discrete_space.hh:26
Input::Type::Record
Record type proxy class.
Definition: type_record.hh:182
Elasticity::EqData::balance_
std::shared_ptr< Balance > balance_
Shared Balance object.
Definition: elasticity.hh:133
Elasticity::EqFields::ref_potential_load
Field< 3, FieldValue< 3 >::Scalar > ref_potential_load
Potential of reference external load on boundary. TODO: Switch to BCField when possible.
Definition: elasticity.hh:77
Mesh
Definition: mesh.h:355
RhsAssemblyElasticity
Definition: assembly_elasticity.hh:284
Elasticity::EqData::dh_tensor_
std::shared_ptr< DOFHandlerMultiDim > dh_tensor_
Definition: elasticity.hh:122
multi_field.hh
Elasticity::EqFields::bc_traction
BCField< 3, FieldValue< 3 >::VectorFixed > bc_traction
Definition: elasticity.hh:67
Elasticity::EqFields::dirichlet_penalty
Field< 3, FieldValue< 3 >::Scalar > dirichlet_penalty
Definition: elasticity.hh:92
Elasticity::EqFields::lame_lambda
Field< 3, FieldValue< 3 >::Scalar > lame_lambda
Definition: elasticity.hh:91
Elasticity::EqFields::load
Field< 3, FieldValue< 3 >::VectorFixed > load
Definition: elasticity.hh:69
Elasticity::eq_fields_
std::shared_ptr< EqFields > eq_fields_
Fields for model parameters.
Definition: elasticity.hh:218
Elasticity::EqFields::bc_type_stress
@ bc_type_stress
Definition: elasticity.hh:58
Elasticity::~Elasticity
~Elasticity()
Destructor.
Definition: elasticity.cc:394
Elasticity::EqFields::region_id
Field< 3, FieldValue< 3 >::Scalar > region_id
Definition: elasticity.hh:78
Elasticity::output_fields_assembly_
GenericAssembly< OutpuFieldsAssemblyElasticity > * output_fields_assembly_
Definition: elasticity.hh:245
Elasticity::get_input_type
static const Input::Type::Record & get_input_type()
Declare input record type for the equation TransportDG.
Definition: elasticity.cc:47
Elasticity::EqFields::output_field
Field< 3, FieldValue< 3 >::VectorFixed > output_field
Definition: elasticity.hh:81
Elasticity::rhs_assembly_
GenericAssembly< RhsAssemblyElasticity > * rhs_assembly_
Definition: elasticity.hh:244
BCField
Definition: bc_field.hh:32
Elasticity::update_solution
void update_solution() override
Computes the solution in one time instant.
Definition: elasticity.cc:480
Elasticity::EqData
Definition: elasticity.hh:106
Elasticity::EqFields::EqFields
EqFields()
Definition: elasticity.cc:128
Field
Class template representing a field with values dependent on: point, element, and region.
Definition: field.hh:93
Elasticity::EqFields::bc_type_traction
@ bc_type_traction
Definition: elasticity.hh:57
Elasticity::stiffness_assembly_
GenericAssembly< StiffnessAssemblyElasticity > * stiffness_assembly_
general assembly objects, hold assembly objects of appropriate dimension
Definition: elasticity.hh:243
Elasticity::EqData::EqData
EqData()
Definition: elasticity.hh:109
Elasticity::EqFields::output_cross_section_ptr
std::shared_ptr< FieldFE< 3, FieldValue< 3 >::Scalar > > output_cross_section_ptr
Definition: elasticity.hh:99
Elasticity::EqData::dh_scalar_
std::shared_ptr< DOFHandlerMultiDim > dh_scalar_
Definition: elasticity.hh:121
Elasticity::eq_data_
std::shared_ptr< EqData > eq_data_
Data for model parameters.
Definition: elasticity.hh:221
Elasticity::EqData::create_dh
void create_dh(Mesh *mesh, unsigned int fe_order)
Create DOF handler objects.
Definition: elasticity.cc:257
mixed.hh
GenericAssembly
Generic class of assemblation.
Definition: generic_assembly.hh:160
Elasticity::zero_time_step
void zero_time_step() override
Initialize solution in the zero time.
Definition: elasticity.cc:436
Elasticity::output_data
void output_data()
Postprocesses the solution and writes to output file.
Definition: elasticity.cc:543
field.hh
Elasticity::EqFields::get_bc_type_selection
static const Input::Type::Selection & get_bc_type_selection()
Definition: elasticity.cc:114
Elasticity::EqFields::potential_load
Field< 3, FieldValue< 3 >::Scalar > potential_load
Potential of an additional (external) load.
Definition: elasticity.hh:76
FieldValue
Definition: field_values.hh:645
Elasticity::EqFields::bc_type_displacement_normal
@ bc_type_displacement_normal
Definition: elasticity.hh:56
IntDim
unsigned int IntDim
A dimension index type.
Definition: mixed.hh:19