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.
incrementalupdate_static_damped_smoothing_scheme.hpp
Go to the documentation of this file.
1 //
2 // Project Name: KratosDamApplication $
3 // Last Modified by: $Author:Lorenzo Gracia $
4 // Date: $Date: November 2016$
5 // Revision: $Revision: 1.0 $
6 //
7 
8 #if !defined(KRATOS_INCREMENTAL_UPDATE_STATIC_DAMPED_SMOOTHING_SCHEME )
9 #define KRATOS_INCREMENTAL_UPDATE_STATIC_DAMPED_SMOOTHING_SCHEME
10 
11 // Application includes
12 //~ #include "solving_strategies/schemes/residualbased_incrementalupdate_static_scheme.h"
15 
16 namespace Kratos
17 {
18 
19 template<class TSparseSpace, class TDenseSpace>
20 
22 {
23 
24 public:
25 
27 
36 
37 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
38 
40  IncrementalUpdateStaticDampedSmoothingScheme(double rayleigh_m, double rayleigh_k)
41  : IncrementalUpdateStaticSmoothingScheme<TSparseSpace,TDenseSpace>()
42 
43  {
44  mRayleighAlpha = rayleigh_m;
45  mRayleighBeta = rayleigh_k;
46 
47  //Allocate auxiliary memory
48  int NumThreads = ParallelUtilities::GetNumThreads();
49  mDampingMatrix.resize(NumThreads);
50  mVelocityVector.resize(NumThreads);
51 
52  }
53 
54  //------------------------------------------------------------------------------------
55 
58 
59 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
60 
61  int Check(ModelPart& r_model_part) override
62  {
64 
65  int ierr = Scheme<TSparseSpace,TDenseSpace>::Check(r_model_part);
66  if(ierr != 0) return ierr;
67 
68  if ( RAYLEIGH_ALPHA.Key() == 0 )
69  KRATOS_THROW_ERROR( std::invalid_argument, "RAYLEIGH_ALPHA has Key zero! (check if the application is correctly registered", "" )
70  if ( RAYLEIGH_BETA.Key() == 0 )
71  KRATOS_THROW_ERROR( std::invalid_argument, "RAYLEIGH_BETA has Key zero! (check if the application is correctly registered", "" )
72 
73  // Check rayleigh coefficients
74  if( mRayleighAlpha < 0.0 || mRayleighBeta < 0.0 )
75  KRATOS_THROW_ERROR( std::invalid_argument,"Some of the rayleigh coefficients has an invalid value ", "" )
76 
77  return 0;
78 
79  KRATOS_CATCH( "" )
80  }
81 
82 
83 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
84 
85  void Initialize(ModelPart& r_model_part) override
86  {
88 
89  mDeltaTime = r_model_part.GetProcessInfo()[DELTA_TIME];
90 
91  // Pure Newmark scheme
92  // Note: this is a quasistatic scheme. The velocity and acceleration are stored without affecting the displacement
93  mbeta = 0.25;
94  mgamma = 0.5;
95 
96  mNewmark0 = ( 1.0 / (mbeta * mDeltaTime * mDeltaTime) );
97  mNewmark1 = ( mgamma / (mbeta * mDeltaTime) );
98  mNewmark2 = ( 1.0 / (mbeta * mDeltaTime) );
99  mNewmark3 = ( 0.5 / (mbeta) - 1.0 );
100  mNewmark4 = ( (mgamma / mbeta) - 1.0 );
101  mNewmark5 = ( mDeltaTime * 0.5 * ( ( mgamma / mbeta ) - 2.0 ) );
102 
103  r_model_part.GetProcessInfo()[RAYLEIGH_ALPHA] = mRayleighAlpha;
104  r_model_part.GetProcessInfo()[RAYLEIGH_BETA] = mRayleighBeta;
105 
106  mSchemeIsInitialized = true;
107 
108  KRATOS_CATCH("")
109  }
110 
111 
112 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
113 
114  void Predict(
115  ModelPart& rModelPart,
116  DofsArrayType& rDofSet,
118  TSystemVectorType& Dx,
120  ) override
121  {
122  KRATOS_TRY;
123 
124  //const double DeltaTime = rModelPart.GetProcessInfo()[DELTA_TIME];
125 
126  // Updating time derivatives (nodally for efficiency)
127  const unsigned int NumThreads = ParallelUtilities::GetNumThreads();
128  OpenMPUtils::PartitionVector NodePartition;
129  OpenMPUtils::DivideInPartitions(rModelPart.Nodes().size(), NumThreads, NodePartition);
130 
131  const int nnodes = static_cast<int>( rModelPart.Nodes().size() );
132  NodesArrayType::iterator NodeBegin = rModelPart.Nodes().begin();
133 
134  #pragma omp parallel for firstprivate(NodeBegin)
135  for(int i = 0; i< nnodes; i++)
136  {
137  array_1d<double, 3 > DeltaDisplacement;
138 
139  NodesArrayType::iterator itNode = NodeBegin + i;
140 
141  const array_1d<double, 3 > & PreviousAcceleration = (itNode)->FastGetSolutionStepValue(ACCELERATION, 1);
142  const array_1d<double, 3 > & PreviousVelocity = (itNode)->FastGetSolutionStepValue(VELOCITY, 1);
143  const array_1d<double, 3 > & PreviousDisplacement = (itNode)->FastGetSolutionStepValue(DISPLACEMENT, 1);
144  array_1d<double, 3 > & CurrentAcceleration = (itNode)->FastGetSolutionStepValue(ACCELERATION, 0);
145  array_1d<double, 3 > & CurrentVelocity = (itNode)->FastGetSolutionStepValue(VELOCITY, 0);
146  array_1d<double, 3 > & CurrentDisplacement = (itNode)->FastGetSolutionStepValue(DISPLACEMENT, 0);
147 
148  // Updating time derivatives ::: Please note that displacements and its time derivatives can not be consistently fixed separately
149  noalias(DeltaDisplacement) = CurrentDisplacement - PreviousDisplacement;
150 
151  this->UpdateVelocity (CurrentVelocity, DeltaDisplacement, PreviousVelocity, PreviousAcceleration);
152 
153  this->UpdateAcceleration (CurrentAcceleration, DeltaDisplacement, PreviousVelocity, PreviousAcceleration);
154  }
155 
156  KRATOS_CATCH( "" );
157  }
158 
159 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
160 
161  void Update(
162  ModelPart& rModelPart,
163  DofsArrayType& rDofSet,
165  TSystemVectorType& Dx,
166  TSystemVectorType& b ) override
167  {
168  KRATOS_TRY;
169 
170  int NumThreads = ParallelUtilities::GetNumThreads();
171 
172  // Initialize
173  block_for_each(rDofSet, [&Dx](auto& dof)
174  {
175  if (dof.IsFree())
176  {
177  dof.GetSolutionStepValue() += TSparseSpace::GetValue(Dx, dof.EquationId());
178  }
179 
180  }
181  );
182 
183  // Updating time derivatives (nodally for efficiency)
184  OpenMPUtils::PartitionVector NodePartition;
185  OpenMPUtils::DivideInPartitions(rModelPart.Nodes().size(), NumThreads, NodePartition);
186 
187  const int nnodes = static_cast<int>(rModelPart.Nodes().size());
188  NodesArrayType::iterator NodeBegin = rModelPart.Nodes().begin();
189 
190  #pragma omp parallel for firstprivate(NodeBegin)
191  for(int i = 0; i < nnodes; i++)
192  {
193  array_1d<double, 3 > DeltaDisplacement;
194 
195  NodesArrayType::iterator itNode = NodeBegin + i;
196 
197  noalias(DeltaDisplacement) = (itNode)->FastGetSolutionStepValue(DISPLACEMENT) - (itNode)->FastGetSolutionStepValue(DISPLACEMENT, 1);
198 
199  array_1d<double, 3 > & CurrentVelocity = (itNode)->FastGetSolutionStepValue(VELOCITY, 0);
200  const array_1d<double, 3 > & PreviousVelocity = (itNode)->FastGetSolutionStepValue(VELOCITY, 1);
201 
202  array_1d<double, 3 > & CurrentAcceleration = (itNode)->FastGetSolutionStepValue(ACCELERATION, 0);
203  const array_1d<double, 3 > & PreviousAcceleration = (itNode)->FastGetSolutionStepValue(ACCELERATION, 1);
204 
205  this->UpdateVelocity (CurrentVelocity, DeltaDisplacement, PreviousVelocity, PreviousAcceleration);
206 
207  this->UpdateAcceleration (CurrentAcceleration, DeltaDisplacement, PreviousVelocity, PreviousAcceleration);
208  }
209 
210  KRATOS_CATCH( "" );
211  }
212 
213 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
214 
215  // Note: this is in a parallel loop
216 
218  Element& rCurrentElement,
219  LocalSystemMatrixType& LHS_Contribution,
220  LocalSystemVectorType& RHS_Contribution,
222  const ProcessInfo& CurrentProcessInfo) override
223  {
224  KRATOS_TRY
225 
226  int thread = OpenMPUtils::ThisThread();
227 
228  rCurrentElement.CalculateLocalSystem(LHS_Contribution, RHS_Contribution, CurrentProcessInfo);
229 
230  rCurrentElement.CalculateDampingMatrix(mDampingMatrix[thread], CurrentProcessInfo);
231 
232  this->AddDampingToLHS (LHS_Contribution, mDampingMatrix[thread], CurrentProcessInfo);
233 
234  this->AddDampingToRHS (rCurrentElement, RHS_Contribution, mDampingMatrix[thread], CurrentProcessInfo);
235 
236  rCurrentElement.EquationIdVector(EquationId, CurrentProcessInfo);
237 
238  KRATOS_CATCH( "" )
239  }
240 
241 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
242 
243 // Note: this is in a parallel loop
244 
246  Element& rCurrentElement,
247  LocalSystemVectorType& RHS_Contribution,
249  const ProcessInfo& CurrentProcessInfo)
250  {
251  KRATOS_TRY
252 
253  int thread = OpenMPUtils::ThisThread();
254 
255  rCurrentElement.CalculateRightHandSide(RHS_Contribution, CurrentProcessInfo);
256 
257  rCurrentElement.CalculateDampingMatrix(mDampingMatrix[thread], CurrentProcessInfo);
258 
259  this->AddDampingToRHS (rCurrentElement, RHS_Contribution, mDampingMatrix[thread], CurrentProcessInfo);
260 
261  rCurrentElement.EquationIdVector(EquationId, CurrentProcessInfo);
262 
263  KRATOS_CATCH( "" )
264  }
265 
266 
267 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
268 
269 // Note: this is in a parallel loop
270 
272  Element& rCurrentElement,
273  LocalSystemMatrixType& LHS_Contribution,
275  const ProcessInfo& CurrentProcessInfo)
276  {
277  KRATOS_TRY
278 
279  int thread = OpenMPUtils::ThisThread();
280 
281  rCurrentElement.CalculateLeftHandSide(LHS_Contribution, CurrentProcessInfo);
282 
283  rCurrentElement.CalculateDampingMatrix(mDampingMatrix[thread], CurrentProcessInfo);
284 
285  this->AddDampingToLHS (LHS_Contribution, mDampingMatrix[thread], CurrentProcessInfo);
286 
287  rCurrentElement.EquationIdVector(EquationId, CurrentProcessInfo);
288 
289  KRATOS_CATCH( "" )
290  }
291 
292 
293 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
294 
295 protected:
296 
297  //Member variables
299 
300  double mDeltaTime;
301  double mbeta;
302  double mgamma;
303 
306 
307  std::vector< Matrix > mDampingMatrix;
308  std::vector< Vector > mVelocityVector;
309 
310 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
311 
312  void AddDampingToLHS(LocalSystemMatrixType& LHS_Contribution, LocalSystemMatrixType& C, const ProcessInfo& CurrentProcessInfo)
313  {
314  // adding damping contribution
315  if (C.size1() != 0)
316  {
317  noalias(LHS_Contribution) += mgamma/(mbeta*mDeltaTime)*C;
318  }
319  }
320 
321 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
322 
323  void AddDampingToRHS(Element& rCurrentElement,
324  LocalSystemVectorType& RHS_Contribution,
326  const ProcessInfo& CurrentProcessInfo)
327  {
328  int thread = OpenMPUtils::ThisThread();
329 
330  //adding damping contribution
331  if (C.size1() != 0)
332  {
333  rCurrentElement.GetFirstDerivativesVector(mVelocityVector[thread], 0);
334 
335  noalias(RHS_Contribution) -= prod(C, mVelocityVector[thread]);
336 
337  }
338  }
339 
340 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
341 
342  inline void UpdateVelocity(
343  array_1d<double, 3 > & CurrentVelocity,
344  const array_1d<double, 3 > & DeltaDisplacement,
345  const array_1d<double, 3 > & PreviousVelocity,
346  const array_1d<double, 3 > & PreviousAcceleration
347  )
348  {
349  noalias(CurrentVelocity) = (mNewmark1 * DeltaDisplacement - mNewmark4 * PreviousVelocity
350  - mNewmark5 * PreviousAcceleration);
351  }
352 
353  //----------------------------------------------------------------------------------------------------------------
354 
355  inline void UpdateAcceleration(
356  array_1d<double, 3 > & CurrentAcceleration,
357  const array_1d<double, 3 > & DeltaDisplacement,
358  const array_1d<double, 3 > & PreviousVelocity,
359  const array_1d<double, 3 > & PreviousAcceleration
360  )
361  {
362  noalias(CurrentAcceleration) = (mNewmark0 * DeltaDisplacement - mNewmark2 * PreviousVelocity
363  - mNewmark3 * PreviousAcceleration);
364  }
365 
366 }; // Class IncrementalUpdateStaticDampedSmoothingScheme
367 } // namespace Kratos
368 
369 #endif // KRATOS_INCREMENTAL_UPDATE_STATIC_DAMPED_SMOOTHING_SCHEME defined
Base class for all Elements.
Definition: element.h:60
virtual void GetFirstDerivativesVector(Vector &values, int Step=0) const
Definition: element.h:310
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 CalculateDampingMatrix(MatrixType &rDampingMatrix, const ProcessInfo &rCurrentProcessInfo)
Definition: element.h:583
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
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:22
BaseType::TSystemVectorType TSystemVectorType
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:30
ModelPart::NodesContainerType NodesArrayType
Definition: incrementalupdate_static_damped_smoothing_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: incrementalupdate_static_damped_smoothing_scheme.hpp:217
double mNewmark4
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:298
BaseType::TSystemMatrixType TSystemMatrixType
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:29
BaseType::LocalSystemVectorType LocalSystemVectorType
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:31
double mNewmark5
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:298
KRATOS_CLASS_POINTER_DEFINITION(IncrementalUpdateStaticDampedSmoothingScheme)
double mRayleighAlpha
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:304
BaseType::DofsArrayType DofsArrayType
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:33
double mgamma
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:302
void Update(ModelPart &rModelPart, DofsArrayType &rDofSet, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b) override
Performing the update of the solution.
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:161
void Calculate_LHS_Contribution(Element &rCurrentElement, LocalSystemMatrixType &LHS_Contribution, Element::EquationIdVectorType &EquationId, const ProcessInfo &CurrentProcessInfo)
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:271
double mNewmark2
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:298
void UpdateAcceleration(array_1d< double, 3 > &CurrentAcceleration, const array_1d< double, 3 > &DeltaDisplacement, const array_1d< double, 3 > &PreviousVelocity, const array_1d< double, 3 > &PreviousAcceleration)
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:355
void Initialize(ModelPart &r_model_part) override
This is the place to initialize the Scheme.
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:85
std::vector< Matrix > mDampingMatrix
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:307
double mNewmark1
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:298
int Check(ModelPart &r_model_part) override
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:61
void Predict(ModelPart &rModelPart, DofsArrayType &rDofSet, TSystemMatrixType &A, TSystemVectorType &Dx, TSystemVectorType &b) override
Performing the prediction of the solution.
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:114
double mDeltaTime
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:300
virtual ~IncrementalUpdateStaticDampedSmoothingScheme()
Destructor.
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:57
double mbeta
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:301
void Calculate_RHS_Contribution(Element &rCurrentElement, LocalSystemVectorType &RHS_Contribution, Element::EquationIdVectorType &EquationId, const ProcessInfo &CurrentProcessInfo)
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:245
BaseType::LocalSystemMatrixType LocalSystemMatrixType
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:32
double mRayleighBeta
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:305
IncrementalUpdateStaticDampedSmoothingScheme(double rayleigh_m, double rayleigh_k)
Constructor.
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:40
double mNewmark3
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:298
void AddDampingToLHS(LocalSystemMatrixType &LHS_Contribution, LocalSystemMatrixType &C, const ProcessInfo &CurrentProcessInfo)
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:312
std::vector< Vector > mVelocityVector
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:308
void AddDampingToRHS(Element &rCurrentElement, LocalSystemVectorType &RHS_Contribution, LocalSystemMatrixType &C, const ProcessInfo &CurrentProcessInfo)
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:323
void UpdateVelocity(array_1d< double, 3 > &CurrentVelocity, const array_1d< double, 3 > &DeltaDisplacement, const array_1d< double, 3 > &PreviousVelocity, const array_1d< double, 3 > &PreviousAcceleration)
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:342
double mNewmark0
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:298
Scheme< TSparseSpace, TDenseSpace > BaseType
Definition: incrementalupdate_static_damped_smoothing_scheme.hpp:28
Definition: incrementalupdate_static_smoothing_scheme.hpp:21
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
ProcessInfo & GetProcessInfo()
Definition: model_part.h:1746
MeshType::NodesContainerType NodesContainerType
Nodes container. Which is a vector set of nodes with their Id's as key.
Definition: model_part.h:128
NodesContainerType & Nodes(IndexType ThisIndex=0)
Definition: model_part.h:507
static void DivideInPartitions(const int NumTerms, const int NumThreads, PartitionVector &Partitions)
Divide an array of length NumTerms between NumThreads threads.
Definition: openmp_utils.h:158
static int ThisThread()
Wrapper for omp_get_thread_num().
Definition: openmp_utils.h:108
std::vector< int > PartitionVector
Vector type for the output of DivideInPartitions method.
Definition: openmp_utils.h:53
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
BaseType::LocalSystemMatrixType LocalSystemMatrixType
Local system vector type definition.
Definition: residualbased_incrementalupdate_static_scheme.h:84
BaseType::TSystemMatrixType TSystemMatrixType
Matrix type definition.
Definition: residualbased_incrementalupdate_static_scheme.h:78
BaseType::TSystemVectorType TSystemVectorType
Vector type definition.
Definition: residualbased_incrementalupdate_static_scheme.h:80
BaseType::LocalSystemVectorType LocalSystemVectorType
Local system matrix type definition.
Definition: residualbased_incrementalupdate_static_scheme.h:82
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
virtual int Check(const ModelPart &rModelPart) const
This function is designed to be called once to perform all the checks needed on the input provided....
Definition: scheme.h:508
#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
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
int C
Definition: generate_hyper_elastic_simo_taylor_neo_hookean.py:27
b
Definition: generate_total_lagrangian_mixed_volumetric_strain_element.py:31
int dof
Definition: ode_solve.py:393
A
Definition: sensitivityMatrix.py:70
int nnodes
Definition: sensitivityMatrix.py:24
integer i
Definition: TensorModule.f:17