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.
dam_P_scheme.hpp
Go to the documentation of this file.
1 //
2 // Project Name: KratosDamApplication $
3 // Last Modified by: $Author: Lorenzo Gracia $
4 // Date: $Date: January 2016 $
5 // Revision: $Revision: 1.0 $
6 //
7 
8 #if !defined(KRATOS_DAM_P_SCHEME )
9 #define KRATOS_DAM_P_SCHEME
10 
11 // Project includes
12 #include "includes/define.h"
13 #include "includes/model_part.h"
15 #include "includes/variables.h"
16 #include "containers/array_1d.h"
17 #include "includes/element.h"
18 
19 // Application includes
21 
22 namespace Kratos
23 {
24 
25 template<class TSparseSpace, class TDenseSpace>
26 
27 class DamPScheme : public Scheme<TSparseSpace,TDenseSpace>
28 {
29 
30 public:
31 
33 
40 
41 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
42 
44  DamPScheme(double beta, double gamma): Scheme<TSparseSpace,TDenseSpace>()
45  {
46  mBeta = beta;
47  mGamma = gamma;
48 
49  }
50 
51  //------------------------------------------------------------------------------------
52 
54  virtual ~DamPScheme() {}
55 
56 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
57 
58  int Check(ModelPart& r_model_part) override
59  {
61 
62  //check for variables keys (verify that the variables are correctly initialized)
63  if(PRESSURE.Key() == 0)
64  KRATOS_THROW_ERROR( std::invalid_argument, "PRESSURE has Key zero! (check if the application is correctly registered", "" )
65  if(Dt_PRESSURE.Key() == 0)
66  KRATOS_THROW_ERROR( std::invalid_argument, "Dt_PRESSURE has Key zero! (check if the application is correctly registered", "" )
67  if(Dt2_PRESSURE.Key() == 0)
68  KRATOS_THROW_ERROR( std::invalid_argument, "Dt2_PRESSURE has Key zero! (check if the application is correctly registered", "" )
69  if ( VELOCITY_PRESSURE_COEFFICIENT.Key() == 0 )
70  KRATOS_THROW_ERROR( std::invalid_argument, "VELOCITY_PRESSURE_COEFFICIENT has Key zero! (check if the application is correctly registered", "" )
71  if ( ACCELERATION_PRESSURE_COEFFICIENT.Key() == 0 )
72  KRATOS_THROW_ERROR( std::invalid_argument, "ACCELERATION_PRESSURE_COEFFICIENT has Key zero! (check if the application is correctly registered", "" )
73 
74  //check that variables are correctly allocated
75  for(ModelPart::NodesContainerType::iterator it=r_model_part.NodesBegin(); it!=r_model_part.NodesEnd(); it++)
76  {
77  if(it->SolutionStepsDataHas(PRESSURE) == false)
78  KRATOS_THROW_ERROR( std::logic_error, "PRESSURE variable is not allocated for node ", it->Id() )
79  if(it->SolutionStepsDataHas(Dt_PRESSURE) == false)
80  KRATOS_THROW_ERROR( std::logic_error, "Dt_PRESSURE variable is not allocated for node ", it->Id() )
81  if(it->SolutionStepsDataHas(Dt2_PRESSURE) == false)
82  KRATOS_THROW_ERROR( std::logic_error, "Dt2_PRESSURE variable is not allocated for node ", it->Id() )
83 
84  if(it->HasDofFor(PRESSURE) == false)
85  KRATOS_THROW_ERROR( std::invalid_argument,"missing PRESSURE dof on node ",it->Id() )
86  }
87 
88  //check for minimum value of the buffer index.
89  if (r_model_part.GetBufferSize() < 2)
90  KRATOS_THROW_ERROR( std::logic_error, "insufficient buffer size. Buffer size should be greater than 2. Current size is", r_model_part.GetBufferSize() )
91 
92  // Check beta, gamma and theta
93  if(mBeta <= 0.0 || mGamma<= 0.0)
94  KRATOS_THROW_ERROR( std::invalid_argument,"Some of the scheme variables: beta or gamma has an invalid value ", "" )
95 
96  return 0;
97 
98  KRATOS_CATCH( "" )
99  }
100 
101 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
102 
103  void Initialize(ModelPart& r_model_part) override
104  {
105  KRATOS_TRY
106 
107  mDeltaTime = r_model_part.GetProcessInfo()[DELTA_TIME];
108  r_model_part.GetProcessInfo()[VELOCITY_PRESSURE_COEFFICIENT] = mGamma/(mBeta*mDeltaTime);
109  r_model_part.GetProcessInfo()[ACCELERATION_PRESSURE_COEFFICIENT] = 1.0/(mBeta*mDeltaTime*mDeltaTime);
110 
112 
113  KRATOS_CATCH("")
114  }
115 
116 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
117 
119  ModelPart& r_model_part,
121  TSystemVectorType& Dx,
122  TSystemVectorType& b) override
123  {
124  KRATOS_TRY
125 
126  mDeltaTime = r_model_part.GetProcessInfo()[DELTA_TIME];
127  r_model_part.GetProcessInfo()[VELOCITY_PRESSURE_COEFFICIENT] = mGamma/(mBeta*mDeltaTime);
128  r_model_part.GetProcessInfo()[ACCELERATION_PRESSURE_COEFFICIENT] = 1.0/(mBeta*mDeltaTime*mDeltaTime);
129 
130  const ProcessInfo& CurrentProcessInfo = r_model_part.GetProcessInfo();
131 
132  int NElems = static_cast<int>(r_model_part.Elements().size());
133  ModelPart::ElementsContainerType::iterator el_begin = r_model_part.ElementsBegin();
134 
135  #pragma omp parallel for
136  for(int i = 0; i < NElems; i++)
137  {
138  ModelPart::ElementsContainerType::iterator itElem = el_begin + i;
139  itElem -> InitializeSolutionStep(CurrentProcessInfo);
140  }
141 
142  int NCons = static_cast<int>(r_model_part.Conditions().size());
143  ModelPart::ConditionsContainerType::iterator con_begin = r_model_part.ConditionsBegin();
144 
145  #pragma omp parallel for
146  for(int i = 0; i < NCons; i++)
147  {
148  ModelPart::ConditionsContainerType::iterator itCond = con_begin + i;
149  itCond -> InitializeSolutionStep(CurrentProcessInfo);
150  }
151 
152  KRATOS_CATCH("")
153  }
154 
155 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
156 
157  void Predict(
158  ModelPart& r_model_part,
159  DofsArrayType& rDofSet,
161  TSystemVectorType& Dx,
162  TSystemVectorType& b) override
163  {
164 
165  KRATOS_TRY
166 
167  // Updating DtPressure and Dt2Pressure
168  double DeltaPressure;
169 
170  const int NNodes = static_cast<int>(r_model_part.Nodes().size());
171  ModelPart::NodesContainerType::iterator node_begin = r_model_part.NodesBegin();
172 
173  #pragma omp parallel for private(DeltaPressure)
174  for(int i = 0; i < NNodes; i++)
175  {
176  ModelPart::NodesContainerType::iterator itNode = node_begin + i;
177 
178  // Terms related to Pressure field
179  double& CurrentDt2Pressure = itNode->FastGetSolutionStepValue(Dt2_PRESSURE);
180  double& CurrentDtPressure = itNode->FastGetSolutionStepValue(Dt_PRESSURE);
181  DeltaPressure = itNode->FastGetSolutionStepValue(PRESSURE) - itNode->FastGetSolutionStepValue(PRESSURE, 1);
182  const double& PreviousDt2Pressure = itNode->FastGetSolutionStepValue(Dt2_PRESSURE, 1);
183  const double& PreviousDtPressure = itNode->FastGetSolutionStepValue(Dt_PRESSURE, 1);
184 
185  CurrentDt2Pressure = 1.0/(mBeta*mDeltaTime*mDeltaTime)*(DeltaPressure - mDeltaTime*PreviousDtPressure - (0.5-mBeta)*mDeltaTime*mDeltaTime*PreviousDt2Pressure);
186  CurrentDtPressure = PreviousDtPressure + (1.0-mGamma)*mDeltaTime*PreviousDt2Pressure + mGamma*mDeltaTime*CurrentDt2Pressure;
187 
188  }
189 
190  KRATOS_CATCH( "" )
191  }
192 
193 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
194 
196  ModelPart& r_model_part,
198  TSystemVectorType& Dx,
199  TSystemVectorType& b) override
200  {
201  KRATOS_TRY
202 
203  const ProcessInfo& CurrentProcessInfo = r_model_part.GetProcessInfo();
204 
205  int NElems = static_cast<int>(r_model_part.Elements().size());
206  ModelPart::ElementsContainerType::iterator el_begin = r_model_part.ElementsBegin();
207 
208  #pragma omp parallel for
209  for(int i = 0; i < NElems; i++)
210  {
211  ModelPart::ElementsContainerType::iterator itElem = el_begin + i;
212  itElem -> InitializeNonLinearIteration(CurrentProcessInfo);
213  }
214 
215  int NCons = static_cast<int>(r_model_part.Conditions().size());
216  ModelPart::ConditionsContainerType::iterator con_begin = r_model_part.ConditionsBegin();
217 
218  #pragma omp parallel for
219  for(int i = 0; i < NCons; i++)
220  {
221  ModelPart::ConditionsContainerType::iterator itCond = con_begin + i;
222  itCond -> InitializeNonLinearIteration(CurrentProcessInfo);
223  }
224 
225  KRATOS_CATCH("")
226  }
227 
228 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
229 
231  ModelPart& r_model_part,
233  TSystemVectorType& Dx,
234  TSystemVectorType& b) override
235  {
236  KRATOS_TRY
237 
238  const ProcessInfo& CurrentProcessInfo = r_model_part.GetProcessInfo();
239 
240  int NElems = static_cast<int>(r_model_part.Elements().size());
241  ModelPart::ElementsContainerType::iterator el_begin = r_model_part.ElementsBegin();
242 
243  #pragma omp parallel for
244  for(int i = 0; i < NElems; i++)
245  {
246  ModelPart::ElementsContainerType::iterator itElem = el_begin + i;
247  itElem -> FinalizeNonLinearIteration(CurrentProcessInfo);
248  }
249 
250  int NCons = static_cast<int>(r_model_part.Conditions().size());
251  ModelPart::ConditionsContainerType::iterator con_begin = r_model_part.ConditionsBegin();
252 
253  #pragma omp parallel for
254  for(int i = 0; i < NCons; i++)
255  {
256  ModelPart::ConditionsContainerType::iterator itCond = con_begin + i;
257  itCond -> FinalizeNonLinearIteration(CurrentProcessInfo);
258  }
259 
260  KRATOS_CATCH("")
261  }
262 
263 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
264 
265 // Note: this is in a parallel loop
266 
268  Element& rCurrentElement,
269  LocalSystemMatrixType& LHS_Contribution,
270  LocalSystemVectorType& RHS_Contribution,
272  const ProcessInfo& CurrentProcessInfo) override
273  {
274  KRATOS_TRY
275 
276  rCurrentElement.CalculateLocalSystem(LHS_Contribution, RHS_Contribution, CurrentProcessInfo);
277 
278  rCurrentElement.EquationIdVector(EquationId, CurrentProcessInfo);
279 
280  KRATOS_CATCH( "" )
281  }
282 
283 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
284 
285 // Note: this is in a parallel loop
286 
288  Condition& rCurrentCondition,
289  LocalSystemMatrixType& LHS_Contribution,
290  LocalSystemVectorType& RHS_Contribution,
292  const ProcessInfo& CurrentProcessInfo) override
293  {
294  KRATOS_TRY
295 
296  rCurrentCondition.CalculateLocalSystem(LHS_Contribution, RHS_Contribution, CurrentProcessInfo);
297 
298  rCurrentCondition.EquationIdVector(EquationId, CurrentProcessInfo);
299 
300  KRATOS_CATCH( "" )
301  }
302 
303 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
304 
305 // Note: this is in a parallel loop
306 
308  Element& rCurrentElement,
309  LocalSystemVectorType& RHS_Contribution,
311  const ProcessInfo& CurrentProcessInfo)
312  {
313  KRATOS_TRY
314 
315  rCurrentElement.CalculateRightHandSide(RHS_Contribution, CurrentProcessInfo);
316 
317  rCurrentElement.EquationIdVector(EquationId, CurrentProcessInfo);
318 
319  KRATOS_CATCH( "" )
320  }
321 
322 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
323 
324 // Note: this is in a parallel loop
325 
327  Condition& rCurrentCondition,
328  LocalSystemVectorType& RHS_Contribution,
330  const ProcessInfo& CurrentProcessInfo)
331  {
332  KRATOS_TRY
333 
334  rCurrentCondition.CalculateRightHandSide(RHS_Contribution, CurrentProcessInfo);
335 
336  rCurrentCondition.EquationIdVector(EquationId, CurrentProcessInfo);
337 
338 
339  KRATOS_CATCH( "" )
340  }
341 
342 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
343 
344 // Note: this is in a parallel loop
345 
347  Element& rCurrentElement,
348  LocalSystemMatrixType& LHS_Contribution,
350  const ProcessInfo& CurrentProcessInfo)
351  {
352  KRATOS_TRY
353 
354  rCurrentElement.CalculateLeftHandSide(LHS_Contribution, CurrentProcessInfo);
355 
356  rCurrentElement.EquationIdVector(EquationId, CurrentProcessInfo);
357 
358  KRATOS_CATCH( "" )
359  }
360 
361 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
362 
363 // Note: this is in a parallel loop
364 
366  Condition& rCurrentCondition,
367  LocalSystemMatrixType& LHS_Contribution,
369  const ProcessInfo& CurrentProcessInfo)
370  {
371  KRATOS_TRY
372 
373  rCurrentCondition.CalculateLeftHandSide(LHS_Contribution, CurrentProcessInfo);
374 
375  rCurrentCondition.EquationIdVector(EquationId, CurrentProcessInfo);
376 
377  KRATOS_CATCH( "" )
378  }
379 
380 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
381 
382  void Update(
383  ModelPart& r_model_part,
384  DofsArrayType& rDofSet,
386  TSystemVectorType& Dx,
387  TSystemVectorType& b) override
388  {
389  KRATOS_TRY
390 
391  // Initialize
392  block_for_each(rDofSet, [&Dx](auto& dof)
393  {
394  if (dof.IsFree())
395  {
396  dof.GetSolutionStepValue() += TSparseSpace::GetValue(Dx, dof.EquationId());
397  }
398 
399  }
400  );
401 
402  this->UpdateVariablesDerivatives(r_model_part);
403 
404  KRATOS_CATCH( "" )
405  }
406 
407 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
408 
409 protected:
410 
412 
413  double mBeta;
414  double mGamma;
415  double mDeltaTime;
416 
417 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
418 
419  inline void UpdateVariablesDerivatives(ModelPart& r_model_part)
420  {
421  KRATOS_TRY
422 
423  // Updating DtPressure and Dt2Pressure
424  double DeltaPressure;
425 
426  const int NNodes = static_cast<int>(r_model_part.Nodes().size());
427  ModelPart::NodesContainerType::iterator node_begin = r_model_part.NodesBegin();
428 
429  #pragma omp parallel for private(DeltaPressure)
430  for(int i = 0; i < NNodes; i++)
431  {
432  ModelPart::NodesContainerType::iterator itNode = node_begin + i;
433 
434  // Terms related to Pressure field
435 
436  double& CurrentDt2Pressure = itNode->FastGetSolutionStepValue(Dt2_PRESSURE);
437  double& CurrentDtPressure = itNode->FastGetSolutionStepValue(Dt_PRESSURE);
438  DeltaPressure = itNode->FastGetSolutionStepValue(PRESSURE) - itNode->FastGetSolutionStepValue(PRESSURE, 1);
439  const double& PreviousDt2Pressure = itNode->FastGetSolutionStepValue(Dt2_PRESSURE, 1);
440  const double& PreviousDtPressure = itNode->FastGetSolutionStepValue(Dt_PRESSURE, 1);
441 
442  CurrentDt2Pressure = 1.0/(mBeta*mDeltaTime*mDeltaTime)*(DeltaPressure - mDeltaTime*PreviousDtPressure - (0.5-mBeta)*mDeltaTime*mDeltaTime*PreviousDt2Pressure);
443  CurrentDtPressure = PreviousDtPressure + (1.0-mGamma)*mDeltaTime*PreviousDt2Pressure + mGamma*mDeltaTime*CurrentDt2Pressure;
444 
445  }
446 
447  KRATOS_CATCH( "" )
448  }
449 
450 
451 }; // Class DamPScheme
452 } // namespace Kratos
453 
454 #endif // KRATOS_DAM_P_SCHEME defined
455 
Base class for all Conditions.
Definition: condition.h:59
virtual void CalculateLeftHandSide(MatrixType &rLeftHandSideMatrix, const ProcessInfo &rCurrentProcessInfo)
Definition: condition.h:426
virtual void EquationIdVector(EquationIdVectorType &rResult, const ProcessInfo &rCurrentProcessInfo) const
Definition: condition.h:260
virtual void CalculateRightHandSide(VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo)
Definition: condition.h:440
virtual void CalculateLocalSystem(MatrixType &rLeftHandSideMatrix, VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo)
Definition: condition.h:408
Definition: dam_P_scheme.hpp:28
void FinalizeNonLinIteration(ModelPart &r_model_part, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b) override
Function to be called when it is needed to finalize an iteration. It is designed to be called at the ...
Definition: dam_P_scheme.hpp:230
void Update(ModelPart &r_model_part, DofsArrayType &rDofSet, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b) override
Performing the update of the solution.
Definition: dam_P_scheme.hpp:382
DamPScheme(double beta, double gamma)
Constructor.
Definition: dam_P_scheme.hpp:44
void Calculate_RHS_Contribution(Element &rCurrentElement, LocalSystemVectorType &RHS_Contribution, Element::EquationIdVectorType &EquationId, const ProcessInfo &CurrentProcessInfo)
Definition: dam_P_scheme.hpp:307
void Predict(ModelPart &r_model_part, DofsArrayType &rDofSet, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b) override
Performing the prediction of the solution.
Definition: dam_P_scheme.hpp:157
virtual ~DamPScheme()
Destructor.
Definition: dam_P_scheme.hpp:54
double mBeta
Member Variables.
Definition: dam_P_scheme.hpp:413
BaseType::TSystemVectorType TSystemVectorType
Definition: dam_P_scheme.hpp:37
KRATOS_CLASS_POINTER_DEFINITION(DamPScheme)
BaseType::DofsArrayType DofsArrayType
Definition: dam_P_scheme.hpp:35
BaseType::LocalSystemVectorType LocalSystemVectorType
Definition: dam_P_scheme.hpp:38
void Calculate_LHS_Contribution(Element &rCurrentElement, LocalSystemMatrixType &LHS_Contribution, Element::EquationIdVectorType &EquationId, const ProcessInfo &CurrentProcessInfo)
Definition: dam_P_scheme.hpp:346
Scheme< TSparseSpace, TDenseSpace > BaseType
Definition: dam_P_scheme.hpp:34
void CalculateSystemContributions(Element &rCurrentElement, LocalSystemMatrixType &LHS_Contribution, LocalSystemVectorType &RHS_Contribution, Element::EquationIdVectorType &EquationId, const ProcessInfo &CurrentProcessInfo) override
This function is designed to be called in the builder and solver to introduce the selected time integ...
Definition: dam_P_scheme.hpp:267
BaseType::TSystemMatrixType TSystemMatrixType
Definition: dam_P_scheme.hpp:36
void InitializeSolutionStep(ModelPart &r_model_part, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b) override
Function called once at the beginning of each solution step.
Definition: dam_P_scheme.hpp:118
void Initialize(ModelPart &r_model_part) override
This is the place to initialize the Scheme.
Definition: dam_P_scheme.hpp:103
double mGamma
Definition: dam_P_scheme.hpp:414
void CalculateSystemContributions(Condition &rCurrentCondition, LocalSystemMatrixType &LHS_Contribution, LocalSystemVectorType &RHS_Contribution, Element::EquationIdVectorType &EquationId, const ProcessInfo &CurrentProcessInfo) override
Functions totally analogous to the precedent but applied to the "condition" objects.
Definition: dam_P_scheme.hpp:287
void Calculate_LHS_Contribution(Condition &rCurrentCondition, LocalSystemMatrixType &LHS_Contribution, Element::EquationIdVectorType &EquationId, const ProcessInfo &CurrentProcessInfo)
Definition: dam_P_scheme.hpp:365
BaseType::LocalSystemMatrixType LocalSystemMatrixType
Definition: dam_P_scheme.hpp:39
void Calculate_RHS_Contribution(Condition &rCurrentCondition, LocalSystemVectorType &RHS_Contribution, Element::EquationIdVectorType &EquationId, const ProcessInfo &CurrentProcessInfo)
Definition: dam_P_scheme.hpp:326
void UpdateVariablesDerivatives(ModelPart &r_model_part)
Definition: dam_P_scheme.hpp:419
double mDeltaTime
Definition: dam_P_scheme.hpp:415
void InitializeNonLinIteration(ModelPart &r_model_part, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b) override
unction to be called when it is needed to initialize an iteration. It is designed to be called at the...
Definition: dam_P_scheme.hpp:195
int Check(ModelPart &r_model_part) override
Definition: dam_P_scheme.hpp:58
Base class for all Elements.
Definition: element.h:60
virtual void CalculateLeftHandSide(MatrixType &rLeftHandSideMatrix, const ProcessInfo &rCurrentProcessInfo)
Definition: element.h:423
virtual void CalculateRightHandSide(VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo)
Definition: element.h:437
virtual void EquationIdVector(EquationIdVectorType &rResult, const ProcessInfo &rCurrentProcessInfo) const
Definition: element.h:258
virtual void CalculateLocalSystem(MatrixType &rLeftHandSideMatrix, VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo)
Definition: element.h:405
std::vector< std::size_t > EquationIdVectorType
Definition: element.h:98
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
ElementIterator ElementsBegin(IndexType ThisIndex=0)
Definition: model_part.h:1169
ConditionIterator ConditionsBegin(IndexType ThisIndex=0)
Definition: model_part.h:1361
IndexType GetBufferSize() const
This method gets the suffer size of the model part database.
Definition: model_part.h:1876
NodeIterator NodesBegin(IndexType ThisIndex=0)
Definition: model_part.h:487
ConditionsContainerType & Conditions(IndexType ThisIndex=0)
Definition: model_part.h:1381
ProcessInfo & GetProcessInfo()
Definition: model_part.h:1746
ElementsContainerType & Elements(IndexType ThisIndex=0)
Definition: model_part.h:1189
NodeIterator NodesEnd(IndexType ThisIndex=0)
Definition: model_part.h:497
NodesContainerType & Nodes(IndexType ThisIndex=0)
Definition: model_part.h:507
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
This class provides the implementation of the basic tasks that are needed by the solution strategy.
Definition: scheme.h:56
typename TSparseSpace::MatrixType TSystemMatrixType
Matrix type definition.
Definition: scheme.h:71
virtual void EquationId(const Element &rElement, Element::EquationIdVectorType &rEquationId, const ProcessInfo &rCurrentProcessInfo)
This method gets the eqaution id corresponding to the current element.
Definition: scheme.h:636
typename TSparseSpace::VectorType TSystemVectorType
Vector type definition.
Definition: scheme.h:74
typename TDenseSpace::VectorType LocalSystemVectorType
Local system vector type definition.
Definition: scheme.h:80
typename TDenseSpace::MatrixType LocalSystemMatrixType
Local system matrix type definition.
Definition: scheme.h:77
bool mSchemeIsInitialized
Definition: scheme.h:755
#define KRATOS_THROW_ERROR(ExceptionType, ErrorMessage, MoreInfo)
Definition: define.h:77
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
void block_for_each(TIterator itBegin, TIterator itEnd, TFunction &&rFunction)
Execute a functor on all items of a range in parallel.
Definition: parallel_utilities.h:299
b
Definition: generate_total_lagrangian_mixed_volumetric_strain_element.py:31
float gamma
Definition: generate_two_fluid_navier_stokes.py:131
int dof
Definition: ode_solve.py:393
A
Definition: sensitivityMatrix.py:70
integer i
Definition: TensorModule.f:17