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.
dynamic_scheme.hpp
Go to the documentation of this file.
1 //
2 // Project Name: KratosSolidMechanicsApplication $
3 // Created by: $Author: JMCarbonell $
4 // Last modified by: $Co-Author: $
5 // Date: $Date: November 2017 $
6 // Revision: $Revision: 0.0 $
7 //
8 //
9 
10 #if !defined(KRATOS_DYNAMIC_SCHEME_H_INCLUDED)
11 #define KRATOS_DYNAMIC_SCHEME_H_INCLUDED
12 
13 // System includes
14 
15 // External includes
16 
17 // Project includes
19 
20 namespace Kratos
21 {
36 
39  template<class TSparseSpace, class TDenseSpace >
40  class DynamicScheme: public StaticScheme<TSparseSpace,TDenseSpace>
41  {
42  protected:
43 
45  {
46  std::vector< Matrix > M; // First derivative matrix (usually mass matrix)
47  std::vector< Matrix > D; // Second derivative matrix (usually damping matrix)
48  };
49 
51  {
52  std::vector< Vector > v; // Velocity
53  std::vector< Vector > a; // Acceleration
54  std::vector< Vector > c; // Composed Variable
55  };
56 
57 
58  public:
59 
63 
67 
69 
70  typedef typename BaseType::NodeType NodeType;
76 
80 
83 
87 
89  DynamicScheme(IntegrationMethodsVectorType& rTimeVectorIntegrationMethods, Flags& rOptions)
90  :DerivedType(rTimeVectorIntegrationMethods, rOptions)
91  {
92  }
93 
95  DynamicScheme(IntegrationMethodsVectorType& rTimeVectorIntegrationMethods)
96  :DerivedType(rTimeVectorIntegrationMethods)
97  {
98  }
99 
101  DynamicScheme(IntegrationMethodsScalarType& rTimeScalarIntegrationMethods, Flags& rOptions)
102  :DerivedType(rTimeScalarIntegrationMethods, rOptions)
103  {
104  }
105 
107  DynamicScheme(IntegrationMethodsScalarType& rTimeScalarIntegrationMethods)
108  :DerivedType(rTimeScalarIntegrationMethods)
109  {
110  }
111 
112 
114  DynamicScheme(IntegrationMethodsVectorType& rTimeVectorIntegrationMethods,
115  IntegrationMethodsScalarType& rTimeScalarIntegrationMethods,
116  Flags& rOptions)
117  :DerivedType(rTimeVectorIntegrationMethods, rTimeScalarIntegrationMethods, rOptions)
118  {
119  }
120 
122  DynamicScheme(IntegrationMethodsVectorType& rTimeVectorIntegrationMethods,
123  IntegrationMethodsScalarType& rTimeScalarIntegrationMethods)
124  :DerivedType(rTimeVectorIntegrationMethods, rTimeScalarIntegrationMethods)
125  {
126  }
127 
129  DynamicScheme(Flags& rOptions)
130  :DerivedType(rOptions)
131  {
132  }
133 
136  :DerivedType(rOther)
137  ,mMatrix(rOther.mMatrix)
138  ,mVector(rOther.mVector)
139  {
140  }
141 
144  {
145  return BasePointerType( new DynamicScheme(*this) );
146  }
147 
149  ~DynamicScheme() override {}
150 
154 
158 
163  void Initialize(ModelPart& rModelPart) override
164  {
165  KRATOS_TRY
166 
167  DerivedType::Initialize(rModelPart);
168 
169  // Allocate auxiliary memory
170  const unsigned int NumThreads = ParallelUtilities::GetNumThreads();
171 
172  mMatrix.M.resize(NumThreads);
173  mMatrix.D.resize(NumThreads);
174 
175  mVector.v.resize(NumThreads);
176  mVector.a.resize(NumThreads);
177 
178  double parameter = 0.0;
179  if(this->mTimeVectorIntegrationMethods.size() != 0)
180  parameter = this->mTimeVectorIntegrationMethods.front()->GetSecondDerivativeKineticFactor(parameter);
181  else if(this->mTimeScalarIntegrationMethods.size() != 0)
182  parameter = this->mTimeScalarIntegrationMethods.front()->GetSecondDerivativeKineticFactor(parameter);
183 
184  if( parameter != 0 )
185  mVector.c.resize(NumThreads);
186 
187  KRATOS_CATCH("")
188  }
189 
190 
200  void CalculateSystemContributions(Element::Pointer pCurrentElement,
201  LocalSystemMatrixType& rLHS_Contribution,
202  LocalSystemVectorType& rRHS_Contribution,
204  ProcessInfo& rCurrentProcessInfo) override
205  {
206  KRATOS_TRY;
207 
208  int thread = OpenMPUtils::ThisThread();
209 
210  (pCurrentElement) -> CalculateLocalSystem(rLHS_Contribution,rRHS_Contribution, rCurrentProcessInfo);
211 
212  (pCurrentElement) -> EquationIdVector(EquationId, rCurrentProcessInfo);
213 
214  if ( rCurrentProcessInfo[COMPUTE_DYNAMIC_TANGENT] == true ){
215 
216  (pCurrentElement) -> CalculateSecondDerivativesContributions(this->mMatrix.M[thread],this->mVector.a[thread],rCurrentProcessInfo);
217 
218  (pCurrentElement) -> CalculateFirstDerivativesContributions(this->mMatrix.D[thread],this->mVector.v[thread],rCurrentProcessInfo);
219 
220  AddDynamicTangentsToLHS(rLHS_Contribution,this->mMatrix.D[thread],this->mMatrix.M[thread],rCurrentProcessInfo);
221 
222  AddDynamicForcesToRHS(rRHS_Contribution,this->mVector.v[thread],this->mVector.a[thread],rCurrentProcessInfo);
223 
224  }
225  else{
226 
227  (pCurrentElement) -> CalculateMassMatrix(mMatrix.M[thread], rCurrentProcessInfo);
228 
229  (pCurrentElement) -> CalculateDampingMatrix(mMatrix.D[thread], rCurrentProcessInfo);
230 
231  AddDynamicsToLHS (rLHS_Contribution, mMatrix.D[thread], mMatrix.M[thread], rCurrentProcessInfo);
232 
233  AddDynamicsToRHS (pCurrentElement, rRHS_Contribution, mMatrix.D[thread], mMatrix.M[thread], rCurrentProcessInfo);
234 
235  }
236 
237  KRATOS_CATCH("")
238  }
239 
248  void Calculate_RHS_Contribution(Element::Pointer pCurrentElement,
249  LocalSystemVectorType& rRHS_Contribution,
251  ProcessInfo& rCurrentProcessInfo) override
252  {
253 
254  KRATOS_TRY;
255 
256  int thread = OpenMPUtils::ThisThread();
257 
258  // Basic operations for the element considered
259  (pCurrentElement) -> CalculateRightHandSide(rRHS_Contribution, rCurrentProcessInfo);
260 
261  (pCurrentElement) -> EquationIdVector(EquationId, rCurrentProcessInfo);
262 
263  if ( rCurrentProcessInfo[COMPUTE_DYNAMIC_TANGENT] == true ){
264 
265  (pCurrentElement) -> CalculateSecondDerivativesRHS(this->mVector.a[thread],rCurrentProcessInfo);
266 
267  (pCurrentElement) -> CalculateFirstDerivativesRHS(this->mVector.v[thread],rCurrentProcessInfo);
268 
269  AddDynamicForcesToRHS(rRHS_Contribution,this->mVector.v[thread],this->mVector.a[thread],rCurrentProcessInfo);
270 
271  }
272  else{
273 
274  (pCurrentElement) -> CalculateMassMatrix(mMatrix.M[thread], rCurrentProcessInfo);
275 
276  (pCurrentElement) -> CalculateDampingMatrix(mMatrix.D[thread], rCurrentProcessInfo);
277 
278  AddDynamicsToRHS (pCurrentElement, rRHS_Contribution, mMatrix.D[thread], mMatrix.M[thread], rCurrentProcessInfo);
279  }
280 
281  KRATOS_CATCH("")
282  }
283 
293  void Condition_CalculateSystemContributions(Condition::Pointer pCurrentCondition,
294  LocalSystemMatrixType& rLHS_Contribution,
295  LocalSystemVectorType& rRHS_Contribution,
297  ProcessInfo& rCurrentProcessInfo) override
298  {
299  KRATOS_TRY;
300 
301  int thread = OpenMPUtils::ThisThread();
302 
303  // Basic operations for the condition considered
304  (pCurrentCondition) -> CalculateLocalSystem(rLHS_Contribution,rRHS_Contribution, rCurrentProcessInfo);
305 
306  (pCurrentCondition) -> EquationIdVector(EquationId, rCurrentProcessInfo);
307 
308  if ( rCurrentProcessInfo[COMPUTE_DYNAMIC_TANGENT] == true ){
309 
310  (pCurrentCondition) -> CalculateSecondDerivativesContributions(this->mMatrix.M[thread],this->mVector.a[thread],rCurrentProcessInfo);
311 
312  (pCurrentCondition) -> CalculateFirstDerivativesContributions(this->mMatrix.D[thread],this->mVector.v[thread],rCurrentProcessInfo);
313 
314  AddDynamicTangentsToLHS(rLHS_Contribution,this->mMatrix.D[thread],this->mMatrix.M[thread],rCurrentProcessInfo);
315 
316  AddDynamicForcesToRHS(rRHS_Contribution,this->mVector.v[thread],this->mVector.a[thread],rCurrentProcessInfo);
317 
318  }
319  else{
320 
321  (pCurrentCondition) -> CalculateMassMatrix(mMatrix.M[thread], rCurrentProcessInfo);
322 
323  (pCurrentCondition) -> CalculateDampingMatrix(mMatrix.D[thread], rCurrentProcessInfo);
324 
325  AddDynamicsToLHS (rLHS_Contribution, mMatrix.D[thread], mMatrix.M[thread], rCurrentProcessInfo);
326 
327  AddDynamicsToRHS (pCurrentCondition, rRHS_Contribution, mMatrix.D[thread], mMatrix.M[thread], rCurrentProcessInfo);
328  }
329 
330  KRATOS_CATCH("")
331  }
332 
341  void Condition_Calculate_RHS_Contribution(Condition::Pointer pCurrentCondition,
342  LocalSystemVectorType& rRHS_Contribution,
344  ProcessInfo& rCurrentProcessInfo) override
345  {
346  KRATOS_TRY;
347 
348  int thread = OpenMPUtils::ThisThread();
349 
350  // Basic operations for the condition considered
351  (pCurrentCondition) -> CalculateRightHandSide(rRHS_Contribution, rCurrentProcessInfo);
352 
353  (pCurrentCondition) -> EquationIdVector(EquationId, rCurrentProcessInfo);
354 
355  if ( rCurrentProcessInfo[COMPUTE_DYNAMIC_TANGENT] == true ){
356 
357  (pCurrentCondition) -> CalculateSecondDerivativesRHS(this->mVector.a[thread],rCurrentProcessInfo);
358 
359  (pCurrentCondition) -> CalculateFirstDerivativesRHS(this->mVector.v[thread],rCurrentProcessInfo);
360 
361  AddDynamicForcesToRHS(rRHS_Contribution,this->mVector.v[thread],this->mVector.a[thread],rCurrentProcessInfo);
362 
363  }
364  else{
365 
366  (pCurrentCondition) -> CalculateMassMatrix(mMatrix.M[thread], rCurrentProcessInfo);
367 
368  (pCurrentCondition) -> CalculateDampingMatrix(mMatrix.D[thread], rCurrentProcessInfo);
369 
370  AddDynamicsToRHS (pCurrentCondition, rRHS_Contribution, mMatrix.D[thread], mMatrix.M[thread], rCurrentProcessInfo);
371  }
372 
373  KRATOS_CATCH("")
374  }
375 
376 
385  int Check(ModelPart& rModelPart) override
386  {
387  KRATOS_TRY;
388 
389  // Perform base base checks
390  int ErrorCode = 0;
391  ErrorCode = DerivedType::Check(rModelPart);
392 
393  if( !rModelPart.GetProcessInfo().Has(COMPUTE_DYNAMIC_TANGENT) )
394  KRATOS_ERROR << "COMPUTE_DYNAMIC_TANGENT must be set to use a Dynamic Scheme" << std::endl;
395 
396 
397  return ErrorCode;
398 
399  KRATOS_CATCH("")
400  }
401 
405 
409 
413 
415  std::string Info() const override
416  {
417  std::stringstream buffer;
418  buffer << "DynamicScheme";
419  return buffer.str();
420  }
421 
423  void PrintInfo(std::ostream& rOStream) const override
424  {
425  rOStream << "DynamicScheme";
426  }
427 
429  void PrintData(std::ostream& rOStream) const override
430  {
431  rOStream << "DynamicScheme Data";
432  }
433 
437 
439 
440  protected:
441 
444 
448 
450 
452 
456 
460 
461 
470  virtual void AddDynamicsToLHS(LocalSystemMatrixType& rLHS_Contribution,
473  ProcessInfo& rCurrentProcessInfo)
474  {
475 
476  double parameter = 0;
477  // Adding mass contribution to the dynamic stiffness
478  if (rM.size1() != 0) // if M matrix declared
479  {
480  if(this->mTimeVectorIntegrationMethods.size() != 0)
481  parameter = this->mTimeVectorIntegrationMethods.front()->GetSecondDerivativeInertialFactor(parameter);
482  else if(this->mTimeScalarIntegrationMethods.size() != 0)
483  parameter = this->mTimeScalarIntegrationMethods.front()->GetSecondDerivativeInertialFactor(parameter);
484 
485  noalias(rLHS_Contribution) += rM * parameter;
486  }
487 
488  // Adding damping contribution
489  if (rD.size1() != 0) // if D matrix declared
490  {
491  parameter = 0;
492  if(this->mTimeVectorIntegrationMethods.size() != 0)
493  parameter = this->mTimeVectorIntegrationMethods.front()->GetFirstDerivativeInertialFactor(parameter);
494  else if(this->mTimeScalarIntegrationMethods.size() != 0)
495  parameter = this->mTimeScalarIntegrationMethods.front()->GetFirstDerivativeInertialFactor(parameter);
496 
497  noalias(rLHS_Contribution) += rD * parameter;
498  }
499  }
500 
501 
510  virtual void AddDynamicTangentsToLHS(LocalSystemMatrixType& rLHS_Contribution,
513  ProcessInfo& rCurrentProcessInfo)
514  {
515 
516  // Adding mass contribution to the dynamic stiffness
517  if (rM.size1() != 0) // if M matrix declared
518  {
519  noalias(rLHS_Contribution) += rM ;
520  }
521 
522  // Adding damping contribution
523  if (rD.size1() != 0) // if D matrix declared
524  {
525  noalias(rLHS_Contribution) += rD;
526  }
527  }
528 
538  virtual void AddDynamicsToRHS(Element::Pointer pCurrentElement,
539  LocalSystemVectorType& rRHS_Contribution,
542  ProcessInfo& rCurrentProcessInfo)
543  {
544  int thread = OpenMPUtils::ThisThread();
545 
546  // Adding inertia contribution
547  if (rM.size1() != 0)
548  {
549  pCurrentElement->GetSecondDerivativesVector(mVector.a[thread], 0);
550 
551  double parameter = 0.0;
552  if(this->mTimeVectorIntegrationMethods.size() != 0)
553  parameter = this->mTimeVectorIntegrationMethods.front()->GetSecondDerivativeKineticFactor(parameter);
554  else if(this->mTimeScalarIntegrationMethods.size() != 0)
555  parameter = this->mTimeScalarIntegrationMethods.front()->GetSecondDerivativeKineticFactor(parameter);
556 
557  if( parameter != 0 ){
558 
559  (mVector.a[thread]) *= (1.00 - parameter);
560 
561  pCurrentElement->GetSecondDerivativesVector(mVector.c[thread], 1);
562 
563  noalias(mVector.a[thread]) += parameter * mVector.c[thread];
564 
565  }
566 
567  noalias(rRHS_Contribution) -= prod(rM, mVector.a[thread]);
568  }
569 
570  // Adding damping contribution
571  if (rD.size1() != 0)
572  {
573  pCurrentElement->GetFirstDerivativesVector(mVector.v[thread], 0);
574 
575  noalias(rRHS_Contribution) -= prod(rD, mVector.v[thread]);
576  }
577  }
578 
588  virtual void AddDynamicsToRHS(Condition::Pointer pCurrentCondition,
589  LocalSystemVectorType& rRHS_Contribution,
592  ProcessInfo& rCurrentProcessInfo)
593  {
594  int thread = OpenMPUtils::ThisThread();
595 
596  // Adding inertia contribution
597  if (rM.size1() != 0)
598  {
599  pCurrentCondition->GetSecondDerivativesVector(mVector.a[thread], 0);
600 
601  double parameter = 0.0;
602  if(this->mTimeVectorIntegrationMethods.size() != 0)
603  parameter = this->mTimeVectorIntegrationMethods.front()->GetSecondDerivativeKineticFactor(parameter);
604  else if(this->mTimeScalarIntegrationMethods.size() != 0)
605  parameter = this->mTimeScalarIntegrationMethods.front()->GetSecondDerivativeKineticFactor(parameter);
606 
607  if( parameter != 0 ){
608 
609  (mVector.a[thread]) *= (1.00 - parameter);
610 
611  pCurrentCondition->GetSecondDerivativesVector(mVector.c[thread], 1);
612 
613  noalias(mVector.a[thread]) += parameter * mVector.c[thread];
614 
615  }
616 
617  noalias(rRHS_Contribution) -= prod(rM, mVector.a[thread]);
618  }
619 
620  // Adding damping contribution
621  if (rD.size1() != 0)
622  {
623  pCurrentCondition->GetFirstDerivativesVector(mVector.v[thread], 0);
624 
625  noalias(rRHS_Contribution) -= prod(rD, mVector.v[thread]);
626  }
627 
628  }
629 
630 
640  LocalSystemVectorType& rfv ,
642  ProcessInfo& rCurrentProcessInfo)
643  {
644 
645  // Adding inertia contribution
646  if (rfa.size() != 0)
647  {
648  noalias(rRHS_Contribution) -= rfa;
649  }
650 
651  // Adding damping contribution
652  if (rfv.size() != 0)
653  {
654  noalias(rRHS_Contribution) -= rfv;
655  }
656  }
657 
661 
665 
669 
671 
672  private:
673 
676 
680 
684 
688 
692 
696 
700 
704 
706  }; // Class DynamicScheme
708 
711 
712 
716 
717 
719 
721 
722 } // namespace Kratos.
723 
724 #endif // KRATOS_DYNAMIC_SCHEME_H_INCLUDED defined
bool Has(const Variable< TDataType > &rThisVariable) const
Checks if the data container has a value associated with a given variable.
Definition: data_value_container.h:382
Dynamic integration scheme.
Definition: dynamic_scheme.hpp:41
KRATOS_CLASS_POINTER_DEFINITION(DynamicScheme)
BaseType::SolutionSchemePointerType BasePointerType
Definition: dynamic_scheme.hpp:65
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: dynamic_scheme.hpp:429
BaseType::NodeType NodeType
Definition: dynamic_scheme.hpp:70
BaseType::LocalSystemMatrixType LocalSystemMatrixType
Definition: dynamic_scheme.hpp:75
void Condition_Calculate_RHS_Contribution(Condition::Pointer pCurrentCondition, LocalSystemVectorType &rRHS_Contribution, Element::EquationIdVectorType &EquationId, ProcessInfo &rCurrentProcessInfo) override
Definition: dynamic_scheme.hpp:341
DynamicScheme(Flags &rOptions)
Constructor.
Definition: dynamic_scheme.hpp:129
BaseType::LocalSystemVectorType LocalSystemVectorType
Definition: dynamic_scheme.hpp:74
std::string Info() const override
Turn back information as a string.
Definition: dynamic_scheme.hpp:415
DynamicScheme(IntegrationMethodsScalarType &rTimeScalarIntegrationMethods)
Constructor.
Definition: dynamic_scheme.hpp:107
BaseType::IntegrationMethodsVectorType IntegrationMethodsVectorType
Definition: dynamic_scheme.hpp:81
DynamicScheme(DynamicScheme &rOther)
Copy Constructor.
Definition: dynamic_scheme.hpp:135
BaseType::NodesContainerType NodesContainerType
Definition: dynamic_scheme.hpp:77
BaseType::SystemMatrixType SystemMatrixType
Definition: dynamic_scheme.hpp:72
virtual void AddDynamicsToLHS(LocalSystemMatrixType &rLHS_Contribution, LocalSystemMatrixType &rD, LocalSystemMatrixType &rM, ProcessInfo &rCurrentProcessInfo)
Definition: dynamic_scheme.hpp:470
virtual void AddDynamicsToRHS(Element::Pointer pCurrentElement, LocalSystemVectorType &rRHS_Contribution, LocalSystemMatrixType &rD, LocalSystemMatrixType &rM, ProcessInfo &rCurrentProcessInfo)
Definition: dynamic_scheme.hpp:538
virtual void AddDynamicsToRHS(Condition::Pointer pCurrentCondition, LocalSystemVectorType &rRHS_Contribution, LocalSystemMatrixType &rD, LocalSystemMatrixType &rM, ProcessInfo &rCurrentProcessInfo)
Definition: dynamic_scheme.hpp:588
GeneralVectors mVector
Definition: dynamic_scheme.hpp:451
DynamicScheme(IntegrationMethodsVectorType &rTimeVectorIntegrationMethods)
Constructor.
Definition: dynamic_scheme.hpp:95
BasePointerType Clone() override
Clone.
Definition: dynamic_scheme.hpp:143
GeneralMatrices mMatrix
Definition: dynamic_scheme.hpp:449
void CalculateSystemContributions(Element::Pointer pCurrentElement, LocalSystemMatrixType &rLHS_Contribution, LocalSystemVectorType &rRHS_Contribution, Element::EquationIdVectorType &EquationId, ProcessInfo &rCurrentProcessInfo) override
Definition: dynamic_scheme.hpp:200
StaticScheme< TSparseSpace, TDenseSpace > DerivedType
Definition: dynamic_scheme.hpp:68
void AddDynamicForcesToRHS(LocalSystemVectorType &rRHS_Contribution, LocalSystemVectorType &rfv, LocalSystemVectorType &rfa, ProcessInfo &rCurrentProcessInfo)
Definition: dynamic_scheme.hpp:639
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: dynamic_scheme.hpp:423
SolutionScheme< TSparseSpace, TDenseSpace > BaseType
Definition: dynamic_scheme.hpp:64
BaseType::ElementsContainerType ElementsContainerType
Definition: dynamic_scheme.hpp:78
void Condition_CalculateSystemContributions(Condition::Pointer pCurrentCondition, LocalSystemMatrixType &rLHS_Contribution, LocalSystemVectorType &rRHS_Contribution, Element::EquationIdVectorType &EquationId, ProcessInfo &rCurrentProcessInfo) override
Definition: dynamic_scheme.hpp:293
DynamicScheme(IntegrationMethodsScalarType &rTimeScalarIntegrationMethods, Flags &rOptions)
Constructor.
Definition: dynamic_scheme.hpp:101
DynamicScheme(IntegrationMethodsVectorType &rTimeVectorIntegrationMethods, IntegrationMethodsScalarType &rTimeScalarIntegrationMethods, Flags &rOptions)
Constructor.
Definition: dynamic_scheme.hpp:114
BaseType::ConditionsContainerType ConditionsContainerType
Definition: dynamic_scheme.hpp:79
void Initialize(ModelPart &rModelPart) override
Definition: dynamic_scheme.hpp:163
DynamicScheme(IntegrationMethodsVectorType &rTimeVectorIntegrationMethods, IntegrationMethodsScalarType &rTimeScalarIntegrationMethods)
Constructor.
Definition: dynamic_scheme.hpp:122
virtual void AddDynamicTangentsToLHS(LocalSystemMatrixType &rLHS_Contribution, LocalSystemMatrixType &rD, LocalSystemMatrixType &rM, ProcessInfo &rCurrentProcessInfo)
Definition: dynamic_scheme.hpp:510
~DynamicScheme() override
Destructor.
Definition: dynamic_scheme.hpp:149
BaseType::LocalFlagType LocalFlagType
Definition: dynamic_scheme.hpp:66
DynamicScheme(IntegrationMethodsVectorType &rTimeVectorIntegrationMethods, Flags &rOptions)
Constructor.
Definition: dynamic_scheme.hpp:89
BaseType::SystemVectorType SystemVectorType
Definition: dynamic_scheme.hpp:73
BaseType::IntegrationMethodsScalarType IntegrationMethodsScalarType
Definition: dynamic_scheme.hpp:82
int Check(ModelPart &rModelPart) override
Definition: dynamic_scheme.hpp:385
void Calculate_RHS_Contribution(Element::Pointer pCurrentElement, LocalSystemVectorType &rRHS_Contribution, Element::EquationIdVectorType &EquationId, ProcessInfo &rCurrentProcessInfo) override
Definition: dynamic_scheme.hpp:248
BaseType::DofsArrayType DofsArrayType
Definition: dynamic_scheme.hpp:71
std::vector< std::size_t > EquationIdVectorType
Definition: element.h:98
Definition: flags.h:58
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
ProcessInfo & GetProcessInfo()
Definition: model_part.h:1746
This class defines the node.
Definition: node.h:65
static int ThisThread()
Wrapper for omp_get_thread_num().
Definition: openmp_utils.h:108
static int GetNumThreads()
Returns the current number of threads.
Definition: parallel_utilities.cpp:34
A sorted associative container similar to an STL set, but uses a vector to store pointers to its data...
Definition: pointer_vector_set.h:72
ProcessInfo holds the current value of different solution parameters.
Definition: process_info.h:59
Solution scheme base class.
Definition: solution_scheme.hpp:54
std::vector< IntegrationScalarPointerType > IntegrationMethodsScalarType
Definition: solution_scheme.hpp:83
SolutionSchemeType::Pointer SolutionSchemePointerType
Definition: solution_scheme.hpp:60
TDenseSpace::MatrixType LocalSystemMatrixType
Definition: solution_scheme.hpp:66
ModelPart::ElementsContainerType ElementsContainerType
Definition: solution_scheme.hpp:70
TDenseSpace::VectorType LocalSystemVectorType
Definition: solution_scheme.hpp:67
TSparseSpace::MatrixType SystemMatrixType
Definition: solution_scheme.hpp:64
ModelPart::NodesContainerType NodesContainerType
Definition: solution_scheme.hpp:69
IntegrationMethodsVectorType mTimeVectorIntegrationMethods
Definition: solution_scheme.hpp:800
IntegrationMethodsScalarType mTimeScalarIntegrationMethods
Definition: solution_scheme.hpp:801
virtual void EquationId(Element::Pointer pCurrentElement, Element::EquationIdVectorType &rEquationId, ProcessInfo &rCurrentProcessInfo)
Definition: solution_scheme.hpp:651
TSparseSpace::VectorType SystemVectorType
Definition: solution_scheme.hpp:65
ModelPart::ConditionsContainerType ConditionsContainerType
Definition: solution_scheme.hpp:71
std::vector< IntegrationVectorPointerType > IntegrationMethodsVectorType
Definition: solution_scheme.hpp:78
Solver local flags class definition.
Definition: solution_local_flags.hpp:48
Static integration scheme (for static problems)
Definition: static_scheme.hpp:41
void Initialize(ModelPart &rModelPart) override
Definition: static_scheme.hpp:137
int Check(ModelPart &rModelPart) override
Definition: static_scheme.hpp:194
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
#define KRATOS_ERROR
Definition: exception.h:161
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
AMatrix::MatrixProductExpression< TExpression1Type, TExpression2Type > prod(AMatrix::MatrixExpression< TExpression1Type, TCategory1 > const &First, AMatrix::MatrixExpression< TExpression2Type, TCategory2 > const &Second)
Definition: amatrix_interface.h:568
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
Definition: dynamic_scheme.hpp:45
std::vector< Matrix > D
Definition: dynamic_scheme.hpp:47
std::vector< Matrix > M
Definition: dynamic_scheme.hpp:46
Definition: dynamic_scheme.hpp:51
std::vector< Vector > c
Definition: dynamic_scheme.hpp:54
std::vector< Vector > a
Definition: dynamic_scheme.hpp:53
std::vector< Vector > v
Definition: dynamic_scheme.hpp:52