KratosMultiphysics
KRATOS Multiphysics (Kratos) is a framework for building parallel, multi-disciplinary simulation software, aiming at modularity, extensibility, and high performance. Kratos is written in C++, and counts with an extensive Python interface.
hypo_elastic_solid2d.h
Go to the documentation of this file.
1 /*
2 ==============================================================================
3 KratosULFApplication
4 A library based on:
5 Kratos
6 A General Purpose Software for Multi-Physics Finite Element Analysis
7 Version 1.0 (Released on march 05, 2007).
8 
9 Copyright 2007
10 Pooyan Dadvand, Riccardo Rossi, Pawel Ryzhakov
11 pooyan@cimne.upc.edu
12 rrossi@cimne.upc.edu
13 - CIMNE (International Center for Numerical Methods in Engineering),
14 Gran Capita' s/n, 08034 Barcelona, Spain
15 
16 
17 Permission is hereby granted, free of charge, to any person obtaining
18 a copy of this software and associated documentation files (the
19 "Software"), to deal in the Software without restriction, including
20 without limitation the rights to use, copy, modify, merge, publish,
21 distribute, sublicense and/or sell copies of the Software, and to
22 permit persons to whom the Software is furnished to do so, subject to
23 the following condition:
24 
25 Distribution of this code for any commercial purpose is permissible
26 ONLY BY DIRECT ARRANGEMENT WITH THE COPYRIGHT OWNERS.
27 
28 The above copyright notice and this permission notice shall be
29 included in all copies or substantial portions of the Software.
30 
31 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
32 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
34 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
35 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
36 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
37 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38 
39 ==============================================================================
40 */
41 
42 
43 //
44 // Project Name: Kratos
45 // Last Modified by: $Author: anonymous $
46 // Date: $Date: 2007-03-23 13:03:13 $
47 // Revision: $Revision: 1.3 $
48 //
49 //
50 
51 
52 #if !defined(KRATOS_HYPO_ELASTIC_SOLID_H_INCLUDED )
53 #define KRATOS_HYPO_ELASTIC_SOLID_H_INCLUDED
54 
55 
56 
57 // System includes
58 
59 
60 // External includes
61 #include "boost/smart_ptr.hpp"
62 
63 
64 // Project includes
65 #include "includes/define.h"
66 #include "includes/element.h"
68 #include "includes/variables.h"
69 #include "includes/serializer.h"
70 
71 namespace Kratos
72 {
73 
76 
80 
84 
88 
92 
94 
97  : public Element
98 {
99 public:
102 
105 
109 
111  HypoElasticSolid2D(IndexType NewId, GeometryType::Pointer pGeometry);
112  HypoElasticSolid2D(IndexType NewId, GeometryType::Pointer pGeometry, PropertiesType::Pointer pProperties);
113 
115  ~HypoElasticSolid2D() override;
116 
117 
121 
122 
126 
127  Element::Pointer Create(IndexType NewId, NodesArrayType const& ThisNodes, PropertiesType::Pointer pProperties) const;
128 
129  void CalculateLocalSystem(MatrixType& rLeftHandSideMatrix, VectorType& rRightHandSideVector, ProcessInfo& rCurrentProcessInfo);
130 
131  void CalculateRightHandSide(VectorType& rRightHandSideVector, ProcessInfo& rCurrentProcessInfo);
132  //virtual void CalculateLeftHandSide(MatrixType& rLeftHandSideMatrix, ProcessInfo& rCurrentProcessInfo);
133 
134  void EquationIdVector(EquationIdVectorType& rResult, ProcessInfo& rCurrentProcessInfo);
135 
136  void GetDofList(DofsVectorType& ElementalDofList,ProcessInfo& CurrentProcessInfo);
137 
138  void InitializeSolutionStep(ProcessInfo& CurrentProcessInfo);
139 
140  void Calculate(const Variable<double >& rVariable, double& Output, const ProcessInfo& rCurrentProcessInfo);
141  void Calculate(const Variable<Matrix >& rVariable, double& Output, const ProcessInfo& rCurrentProcessInfo);
142  void CalculateMassMatrix(MatrixType& rMassMatrix, ProcessInfo& rCurrentProcessInfo);
143  //void CalculateDampingMatrix(MatrixType& rDampingMatrix, ProcessInfo& rCurrentProcessInfo);
144 
145  void CalculateLocalVelocityContribution(MatrixType& rDampingMatrix, VectorType& rRightHandSideVector, ProcessInfo& rCurrentProcessInfo);
146 
147  void GetValuesVector(Vector& values, int Step = 0);
148  void GetFirstDerivativesVector(Vector& values, int Step = 0);
149  void GetSecondDerivativesVector(Vector& values, int Step = 0);
150 
151 
155 
156 
160 
161 
165 
167  std::string Info() const override
168  {
169  return "HypoElasticSolid2D #" ;
170  }
171 
173  void PrintInfo(std::ostream& rOStream) const override
174  {
175  rOStream << Info() << Id();
176  }
177 
179 // virtual void PrintData(std::ostream& rOStream) const;
180 
181 
185 
186 
188 
189 protected:
192 
193 
197 
198 
202 
203 
207 
208 
212 
213 
217 
218 
222 
223 
225 
226 private:
229  /*
230  static boost::numeric::ublas::bounded_matrix<double,3,3> msMassFactors;
231  static boost::numeric::ublas::bounded_matrix<double,3,2> msDN_Dx;
232  static array_1d<double,3> msN; //dimension = number of nodes
233  //static Matrix msDN_DX;
234  //static Matrix msMassFactors;
235  static array_1d<double,2> ms_vel_gauss; //dimesion coincides with space dimension
236  static array_1d<double,3> ms_temp_vec_np; //dimension = number of nodes
237  static array_1d<double,3> ms_u_DN;
238 
239 
240  static boost::numeric::ublas::bounded_matrix<double,3,6> msB;
241  static boost::numeric::ublas::bounded_matrix<double,3,3> ms_constitutive_matrix;
242  static boost::numeric::ublas::bounded_matrix<double,3,6> ms_temp;
243  static array_1d<double,6> ms_temp_vec;
244  */
245 
249  double mA0; //stores area at the beginning of time-step
250 
254  friend class Serializer;
255 
256  // A private default constructor necessary for serialization
258  {
259  }
260 
261  void save(Serializer& rSerializer) const override
262  {
264  }
265 
266  void load(Serializer& rSerializer) override
267  {
269  }
270 
271 
272 
273 
277  void Stage1(MatrixType& rLeftHandSideMatrix, VectorType& rRightHandSideVector, ProcessInfo& rCurrentProcessInfo, unsigned int ComponentIndex);
278  void Stage2(MatrixType& rLeftHandSideMatrix, VectorType& rRightHandSideVector, ProcessInfo& rCurrentProcessInfo);
279 
280  void MeshMovingStep(MatrixType& rLeftHandSideMatrix, VectorType& rRightHandSideVector, ProcessInfo& rCurrentProcessInfo, unsigned int ComponentIndex);
281 
282  //inline void CalculateGeometryData(Matrix& msDN_DX, Vector& N, double& Area)
283  inline void CalculateGeometryData(BoundedMatrix<double,3,2>& DN_DX, array_1d<double,3>& N, double& Area);
284 
288 
289 
293 
294 
298 
299 
303 
305  //HypoElasticSolid2D& operator=(const HypoElasticSolid2D& rOther);
306 
308  //HypoElasticSolid2D(const HypoElasticSolid2D& rOther);
309 
310 
312 
313 }; // Class HypoElasticSolid2D
314 
316 
319 
320 
324 
325 
327 /* inline std::istream& operator >> (std::istream& rIStream,
328  HypoElasticSolid2D& rThis);
329 */
331 /* inline std::ostream& operator << (std::ostream& rOStream,
332  const HypoElasticSolid2D& rThis)
333  {
334  rThis.PrintInfo(rOStream);
335  rOStream << std::endl;
336  rThis.PrintData(rOStream);
337 
338  return rOStream;
339  }*/
341 
342 } // namespace Kratos.
343 
344 #endif // KRATOS_HYPO_ELASTIC_SOLID_H_INCLUDED defined
345 
346 
Base class for all Elements.
Definition: element.h:60
Vector VectorType
Definition: element.h:88
Element(IndexType NewId=0)
Definition: element.h:121
std::vector< DofType::Pointer > DofsVectorType
Definition: element.h:100
Matrix MatrixType
Definition: element.h:90
std::vector< std::size_t > EquationIdVectorType
Definition: element.h:98
std::size_t IndexType
Definition: flags.h:74
Short class definition.
Definition: hypo_elastic_solid2d.h:98
void Calculate(const Variable< double > &rVariable, double &Output, const ProcessInfo &rCurrentProcessInfo)
Definition: hypo_elastic_solid2d.cpp:416
void CalculateMassMatrix(MatrixType &rMassMatrix, ProcessInfo &rCurrentProcessInfo)
Definition: hypo_elastic_solid2d.cpp:182
void GetValuesVector(Vector &values, int Step=0)
Definition: hypo_elastic_solid2d.cpp:364
Element::Pointer Create(IndexType NewId, NodesArrayType const &ThisNodes, PropertiesType::Pointer pProperties) const
It creates a new element pointer.
Definition: hypo_elastic_solid2d.cpp:88
void InitializeSolutionStep(ProcessInfo &CurrentProcessInfo)
Definition: hypo_elastic_solid2d.cpp:319
~HypoElasticSolid2D() override
Destructor.
Definition: hypo_elastic_solid2d.cpp:96
void CalculateRightHandSide(VectorType &rRightHandSideVector, ProcessInfo &rCurrentProcessInfo)
Definition: hypo_elastic_solid2d.cpp:117
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: hypo_elastic_solid2d.h:173
KRATOS_CLASS_INTRUSIVE_POINTER_DEFINITION(HypoElasticSolid2D)
Counted pointer of HypoElasticSolid2D.
void GetSecondDerivativesVector(Vector &values, int Step=0)
Definition: hypo_elastic_solid2d.cpp:399
void GetDofList(DofsVectorType &ElementalDofList, ProcessInfo &CurrentProcessInfo)
Definition: hypo_elastic_solid2d.cpp:347
std::string Info() const override
Turn back information as a string.
Definition: hypo_elastic_solid2d.h:167
void CalculateLocalVelocityContribution(MatrixType &rDampingMatrix, VectorType &rRightHandSideVector, ProcessInfo &rCurrentProcessInfo)
Definition: hypo_elastic_solid2d.cpp:218
friend class Serializer
Definition: hypo_elastic_solid2d.h:254
void GetFirstDerivativesVector(Vector &values, int Step=0)
Definition: hypo_elastic_solid2d.cpp:383
void CalculateLocalSystem(MatrixType &rLeftHandSideMatrix, VectorType &rRightHandSideVector, ProcessInfo &rCurrentProcessInfo)
Definition: hypo_elastic_solid2d.cpp:102
void EquationIdVector(EquationIdVectorType &rResult, ProcessInfo &rCurrentProcessInfo)
Definition: hypo_elastic_solid2d.cpp:329
IndexType Id() const
Definition: indexed_object.h:107
PointerVector is a container like stl vector but using a vector to store pointers to its data.
Definition: pointer_vector.h:72
ProcessInfo holds the current value of different solution parameters.
Definition: process_info.h:59
The serialization consists in storing the state of an object into a storage format like data file or ...
Definition: serializer.h:123
#define KRATOS_SERIALIZE_SAVE_BASE_CLASS(Serializer, BaseType)
Definition: define.h:812
#define KRATOS_SERIALIZE_LOAD_BASE_CLASS(Serializer, BaseType)
Definition: define.h:815
void CalculateGeometryData(const GeometryType &rGeometry, const GeometryData::IntegrationMethod &rIntegrationMethod, Vector &rGaussWeights, Matrix &rNContainer, GeometryType::ShapeFunctionsGradientsType &rDN_DX)
Definition: rans_calculation_utilities.cpp:31
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
list values
Definition: bombardelli_test.py:42
ProcessInfo
Definition: edgebased_PureConvection.py:116
def load(f)
Definition: ode_solve.py:307
N
Definition: sensitivityMatrix.py:29