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.
harmonic_analysis_strategy.hpp
Go to the documentation of this file.
1 // KRATOS ___| | | |
2 // \___ \ __| __| | | __| __| | | __| _` | |
3 // | | | | | ( | | | | ( | |
4 // _____/ \__|_| \__,_|\___|\__|\__,_|_| \__,_|_| MECHANICS
5 //
6 // License: BSD License
7 // license: StructuralMechanicsApplication/license.txt
8 //
9 // Main authors: Quirin Aumann
10 //
11 
12 #pragma once
13 
14 // System includes
15 
16 // External includes
17 
18 // Project includes
21 
22 // Application includes
24 
25 namespace Kratos
26 {
27 
30 
34 
38 
42 
46 
48 template<class TSparseSpace,
49  class TDenseSpace,
50  class TLinearSolver
51  >
53  : public ImplicitSolvingStrategy<TSparseSpace, TDenseSpace, TLinearSolver>
54 {
55 public:
58 
60 
62 
63  typedef typename BaseType::TSchemeType::Pointer SchemePointerType;
64 
65  typedef typename BaseType::TBuilderAndSolverType::Pointer BuilderAndSolverPointerType;
66 
67  typedef TDenseSpace DenseSpaceType;
68 
70 
72 
73  typedef typename TDenseSpace::MatrixPointerType DenseMatrixPointerType;
74 
75  typedef TSparseSpace SparseSpaceType;
76 
77  typedef typename TSparseSpace::VectorPointerType SparseVectorPointerType;
78 
79  typedef std::complex<double> ComplexType;
80 
82 
86 
89  ModelPart& rModelPart,
90  SchemePointerType pScheme,
91  BuilderAndSolverPointerType pBuilderAndSolver,
92  bool UseMaterialDampingFlag = false
93  )
94  : ImplicitSolvingStrategy<TSparseSpace, TDenseSpace, TLinearSolver>(rModelPart)
95  {
97 
98  mpScheme = pScheme;
99 
100  mpBuilderAndSolver = pBuilderAndSolver;
101 
102  // ensure initialization of system matrices in InitializeSolutionStep()
103  mpBuilderAndSolver->SetDofSetIsInitializedFlag(false);
104 
107 
108  this->SetUseMaterialDampingFlag(UseMaterialDampingFlag);
109 
110  // default echo level (mute)
111  this->SetEchoLevel(0);
112 
113  // default rebuild level (build only once)
114  this->SetRebuildLevel(0);
115 
116  KRATOS_CATCH("")
117  }
118 
121 
124  {
125  }
126 
130 
134 
135  void SetIsInitialized(bool val)
136  {
137  mInitializeWasPerformed = val;
138  }
139 
140  bool GetIsInitialized() const
141  {
142  return mInitializeWasPerformed;
143  }
144 
146  {
147  mpScheme = pScheme;
148  }
149 
151  {
152  return mpScheme;
153  }
154 
156  {
157  mpBuilderAndSolver = pNewBuilderAndSolver;
158  }
159 
161  {
162  return mpBuilderAndSolver;
163  }
164 
166  {
167  this->pGetBuilderAndSolver()->SetReshapeMatrixFlag(flag);
168  }
169 
171  {
172  return this->pGetBuilderAndSolver()->GetReshapeMatrixFlag();
173  }
174 
176  {
177  mUseMaterialDamping = flag;
178  }
179 
181  {
182  return mUseMaterialDamping;
183  }
184 
186 
192  void SetEchoLevel(int Level) override
193  {
194  BaseType::SetEchoLevel(Level);
195  this->pGetBuilderAndSolver()->SetEchoLevel(Level);
196  }
197 
199  void Initialize() override
200  {
201  KRATOS_TRY
202 
203  auto& r_model_part = BaseType::GetModelPart();
204  const auto rank = r_model_part.GetCommunicator().MyPID();
205 
206  KRATOS_INFO_IF("HarmonicAnalysisStrategy", BaseType::GetEchoLevel() > 2 && rank == 0)
207  << "Entering Initialize" << std::endl;
208 
209  if( !mInitializeWasPerformed )
210  {
211  auto& r_process_info = r_model_part.GetProcessInfo();
212 
213  auto& p_scheme = this->pGetScheme();
214 
215  if (p_scheme->SchemeIsInitialized() == false)
216  p_scheme->Initialize(r_model_part);
217 
218  if (p_scheme->ElementsAreInitialized() == false)
219  p_scheme->InitializeElements(r_model_part);
220 
221  if (p_scheme->ConditionsAreInitialized() == false)
222  p_scheme->InitializeConditions(r_model_part);
223 
224  // set up the system
225  auto& p_builder_and_solver = this->pGetBuilderAndSolver();
226 
227  // Reset solution dofs
228  // Set up list of dofs
229  BuiltinTimer setup_dofs_time;
230  p_builder_and_solver->SetUpDofSet(p_scheme, r_model_part);
231  KRATOS_INFO_IF("Setup Dofs Time", BaseType::GetEchoLevel() > 0 && rank == 0)
232  << setup_dofs_time << std::endl;
233 
234  // Set global equation ids
235  BuiltinTimer setup_system_time;
236  p_builder_and_solver->SetUpSystem(r_model_part);
237  KRATOS_INFO_IF("Setup System Time", BaseType::GetEchoLevel() > 0 && rank == 0)
238  << setup_system_time << std::endl;
239 
240  // initialize the force vector; this does not change during the computation
241  auto& r_force_vector = *mpForceVector;
242  const unsigned int system_size = p_builder_and_solver->GetEquationSystemSize();
243 
244  BuiltinTimer force_vector_build_time;
245  if (r_force_vector.size() != system_size)
246  r_force_vector.resize(system_size, false);
247  r_force_vector = ZeroVector( system_size );
248  p_builder_and_solver->BuildRHS(p_scheme,r_model_part,r_force_vector);
249 
250  KRATOS_INFO_IF("Force Vector Build Time", BaseType::GetEchoLevel() > 0 && rank == 0)
251  << force_vector_build_time << std::endl;
252 
253  // initialize the modal matrix
254  auto& r_modal_matrix = *mpModalMatrix;
255  const std::size_t n_modes = r_process_info[EIGENVALUE_VECTOR].size();
256  if( r_modal_matrix.size1() != system_size || r_modal_matrix.size2() != n_modes )
257  r_modal_matrix.resize( system_size, n_modes, false );
258  r_modal_matrix = ZeroMatrix( system_size, n_modes );
259 
260  BuiltinTimer modal_matrix_build_time;
261  for( std::size_t i = 0; i < n_modes; ++i )
262  {
263  for( auto& node : r_model_part.Nodes() )
264  {
265  ModelPart::NodeType::DofsContainerType& node_dofs = node.GetDofs();
266  const std::size_t n_node_dofs = node_dofs.size();
267  const Matrix& r_node_eigenvectors = node.GetValue(EIGENVECTOR_MATRIX);
268 
269  // TO BE VERIFIED!! In the current implmentation of Dofs there are nor reordered and only pushec back.
270  // if( node_dofs.IsSorted() == false )
271  // {
272  // node_dofs.Sort();
273  // }
274 
275  for( std::size_t j = 0; j < n_node_dofs; ++j )
276  {
277  const auto it_dof = std::begin(node_dofs) + j;
278  r_modal_matrix((*it_dof)->EquationId(), i) = r_node_eigenvectors(i, j);
279  }
280  }
281  }
282 
283  KRATOS_INFO_IF("Modal Matrix Build Time", BaseType::GetEchoLevel() > 0 && rank == 0)
284  << modal_matrix_build_time << std::endl;
285 
286  // get the damping coefficients if they exist
287  for( auto& property : r_model_part.PropertiesArray() )
288  {
289  if( property->Has(SYSTEM_DAMPING_RATIO) )
290  {
291  mSystemDamping = property->GetValue(SYSTEM_DAMPING_RATIO);
292  }
293 
294  if( property->Has(RAYLEIGH_ALPHA) && property->Has(RAYLEIGH_BETA) )
295  {
296  mRayleighAlpha = property->GetValue(RAYLEIGH_ALPHA);
297  mRayleighBeta = property->GetValue(RAYLEIGH_BETA);
298  }
299  }
300 
301  // compute the effective material damping if required
302  if( mUseMaterialDamping )
303  {
304  // throw an error, if no submodelparts are present
305  KRATOS_ERROR_IF(r_model_part.NumberOfSubModelParts() < 1) << "No submodelparts detected!" << std::endl;
306 
307  //initialize all required variables
308  r_model_part.GetProcessInfo()[BUILD_LEVEL] = 2;
309  mMaterialDampingRatios = ZeroVector( n_modes );
310 
311  //initialize dummy vectors
314  auto& rDx = *pDx;
315  auto& rb = *pb;
316  SparseSpaceType::Resize(rDx,system_size);
317  SparseSpaceType::Set(rDx,0.0);
318  SparseSpaceType::Resize(rb,system_size);
319  SparseSpaceType::Set(rb,0.0);
320 
321  //loop over all modes and initialize the material damping ratio per mode
322  BuiltinTimer material_damping_build_time;
323 
324  for( std::size_t i = 0; i < n_modes; ++i )
325  {
326  double up = 0.0;
327  double down = 0.0;
328  auto modal_vector = column( r_modal_matrix, i );
329  for( auto& sub_model_part : r_model_part.SubModelParts() )
330  {
331  double damping_coefficient = 0.0;
332  for( auto& property : sub_model_part.PropertiesArray() )
333  {
334  if( property->Has(SYSTEM_DAMPING_RATIO) )
335  {
336  damping_coefficient = property->GetValue(SYSTEM_DAMPING_RATIO);
337  }
338  }
339 
340  //initialize the submodelpart stiffness matrix
341  auto temp_stiffness_matrix = SparseSpaceType::CreateEmptyMatrixPointer();
342  p_builder_and_solver->ResizeAndInitializeVectors(p_scheme,
343  temp_stiffness_matrix,
344  pDx,
345  pb,
346  r_model_part);
347 
348  //build stiffness matrix for submodelpart material
349  p_builder_and_solver->BuildLHS(p_scheme, sub_model_part, *temp_stiffness_matrix);
350 
351  //compute strain energy of the submodelpart and the effective damping ratio
352  double strain_energy = 0.5 * inner_prod( prod(modal_vector, *temp_stiffness_matrix), modal_vector );
353  down += strain_energy;
354  up += damping_coefficient * strain_energy;
355  }
356  KRATOS_ERROR_IF(down < std::numeric_limits<double>::epsilon()) << "No valid effective "
357  << "material damping ratio could be computed. Are all elements to be damped available "
358  << "in the submodelparts? Are the modal vectors available?" << std::endl;
359 
360  mMaterialDampingRatios(i) = up / down;
361  }
362 
363  KRATOS_INFO_IF("Material Damping Build Time", BaseType::GetEchoLevel() > 0 && rank == 0)
364  << material_damping_build_time << std::endl;
365  }
366  mInitializeWasPerformed = true;
367  }
368 
369  KRATOS_INFO_IF("HarmonicAnalysisStrategy", BaseType::GetEchoLevel() > 2 && rank == 0)
370  << "Exiting Initialize" << std::endl;
371 
372  KRATOS_CATCH("")
373  }
374 
375  bool SolveSolutionStep() override
376  {
377  KRATOS_TRY
378 
379  auto& r_model_part = BaseType::GetModelPart();
380  const auto rank = r_model_part.GetCommunicator().MyPID();
381 
382  KRATOS_INFO_IF("HarmonicAnalysisStrategy", BaseType::GetEchoLevel() > 2 && rank == 0)
383  << "Entering SolveSolutionStep" << std::endl;
384 
385  auto& r_process_info = r_model_part.GetProcessInfo();
386  double excitation_frequency = r_process_info[TIME];
387 
388  // get eigenvalues
389  DenseVectorType eigenvalues = r_process_info[EIGENVALUE_VECTOR];
390  const std::size_t n_modes = eigenvalues.size();
391 
392  // DenseMatrixType eigenvectors;
393  const std::size_t n_dofs = this->pGetBuilderAndSolver()->GetEquationSystemSize();
394 
395  auto& f = *mpForceVector;
396 
397  ComplexType mode_weight;
398  ComplexVectorType modal_displacement;
399  modal_displacement.resize(n_dofs, false);
400  modal_displacement = ZeroVector( n_dofs );
401 
402  double modal_damping = 0.0;
403 
404  for( std::size_t i = 0; i < n_modes; ++i )
405  {
406  KRATOS_ERROR_IF( eigenvalues[i] < std::numeric_limits<double>::epsilon() ) << "No valid eigenvalue "
407  << "for mode " << i << std::endl;
408  modal_damping = mSystemDamping + mRayleighAlpha / (2 * std::sqrt(eigenvalues[i])) + mRayleighBeta * std::sqrt(eigenvalues[i]) / 2;
409 
410  if( mUseMaterialDamping )
411  {
412  modal_damping += mMaterialDampingRatios[i];
413  }
414 
415  auto& r_modal_matrix = *mpModalMatrix;
416 
417  DenseVectorType modal_vector(n_dofs);
418  TDenseSpace::GetColumn(i, r_modal_matrix, modal_vector);
419 
420  ComplexType factor( eigenvalues[i] - std::pow( excitation_frequency, 2.0 ), 2 * modal_damping * std::sqrt(eigenvalues[i]) * excitation_frequency );
421  KRATOS_ERROR_IF( std::abs(factor) < std::numeric_limits<double>::epsilon() ) << "No valid modal weight" << std::endl;
422  mode_weight = inner_prod( modal_vector, f ) / factor;
423 
424  // compute the modal displacement as a superposition of modal_weight * eigenvector
425  for( auto& node : r_model_part.Nodes() )
426  {
427  auto& node_dofs = node.GetDofs();
428  const std::size_t n_node_dofs = node_dofs.size();
429  const Matrix& r_node_eigenvectors = node.GetValue(EIGENVECTOR_MATRIX);
430 
431  // TO BE VERIFIED!! In the current implmentation of Dofs there are nor reordered and only pushec back.
432  // if (node_dofs.IsSorted() == false)
433  // {
434  // node_dofs.Sort();
435  // }
436 
437  for (std::size_t j = 0; j < n_node_dofs; j++)
438  {
439  auto it_dof = std::begin(node_dofs) + j;
440  modal_displacement[(*it_dof)->EquationId()] = modal_displacement[(*it_dof)->EquationId()] + mode_weight * r_node_eigenvectors(i,j);
441  }
442  }
443  }
444 
445  this->AssignVariables(modal_displacement);
446 
447  KRATOS_INFO_IF("HarmonicAnalysisStrategy", BaseType::GetEchoLevel() > 2 && rank == 0)
448  << "Exiting SolveSolutionStep" << std::endl;
449 
450  return true;
451 
452  KRATOS_CATCH("")
453  }
454 
456  void Clear() override
457  {
458  KRATOS_TRY
459 
460  // if the preconditioner is saved between solves, it should be cleared here
461  auto& p_builder_and_solver = this->pGetBuilderAndSolver();
462  p_builder_and_solver->GetLinearSystemSolver()->Clear();
463 
464  SparseSpaceType::Clear(mpForceVector);
465  DenseSpaceType::Clear(mpModalMatrix);
466 
467  // re-setting internal flag to ensure that the dof sets are recalculated
468  p_builder_and_solver->SetDofSetIsInitializedFlag(false);
469 
470  p_builder_and_solver->Clear();
471 
472  this->pGetScheme()->Clear();
473 
474  mInitializeWasPerformed = false;
475  mUseMaterialDamping = false;
476  mRayleighAlpha = 0.0;
477  mRayleighBeta = 0.0;
478  mSystemDamping = 0.0;
479 
480  KRATOS_CATCH("")
481  }
482 
484  int Check() override
485  {
486  KRATOS_TRY
487 
488  auto& r_model_part = BaseType::GetModelPart();
489  const auto rank = r_model_part.GetCommunicator().MyPID();
490 
491  KRATOS_INFO_IF("HarmonicAnalysisStrategy", BaseType::GetEchoLevel() > 2 && rank == 0)
492  << "Entering Check" << std::endl;
493 
494  // check the model part
495  BaseType::Check();
496 
497  // check the scheme
498  this->pGetScheme()->Check(r_model_part);
499 
500  // check the builder and solver
501  this->pGetBuilderAndSolver()->Check(r_model_part);
502 
503  KRATOS_INFO_IF("HarmonicAnalysisStrategy", BaseType::GetEchoLevel() > 2 && rank == 0)
504  << "Exiting Check" << std::endl;
505 
506  return 0;
507 
508  KRATOS_CATCH("")
509  }
510 
514 
518 
522 
524 
525 protected:
528 
532 
536 
540 
544 
548 
552 
554 
555 private:
558 
562 
563  SchemePointerType mpScheme;
564 
565  BuilderAndSolverPointerType mpBuilderAndSolver;
566 
567  bool mInitializeWasPerformed = false;
568 
569  SparseVectorPointerType mpForceVector;
570 
571  DenseMatrixPointerType mpModalMatrix;
572 
573  double mRayleighAlpha = 0.0;
574 
575  double mRayleighBeta = 0.0;
576 
577  double mSystemDamping = 0.0;
578 
579  bool mUseMaterialDamping;
580 
581  vector< double > mMaterialDampingRatios;
582 
586 
590 
592  void AssignVariables(ComplexVectorType& rModalDisplacement, int step=0)
593  {
594  auto& r_model_part = BaseType::GetModelPart();
595  for( auto& node : r_model_part.Nodes() )
596  {
597  ModelPart::NodeType::DofsContainerType& rNodeDofs = node.GetDofs();
598 
599  for( auto it_dof = std::begin(rNodeDofs); it_dof != std::end(rNodeDofs); it_dof++ )
600  {
601  auto& p_dof = *it_dof;
602  if( !p_dof->IsFixed() )
603  {
604  const auto modal_displacement = rModalDisplacement( p_dof->EquationId() );
605  //displacement
606  if( std::real( modal_displacement ) < 0 )
607  {
608  p_dof->GetSolutionStepValue(step) = -1 * std::abs( modal_displacement );
609  }
610  else
611  {
612  p_dof->GetSolutionStepValue(step) = std::abs( modal_displacement );
613  }
614 
615  //phase angle
616  p_dof->GetSolutionStepReactionValue(step) = std::arg( modal_displacement );
617  }
618  else
619  {
620  p_dof->GetSolutionStepValue(step) = 0.0;
621  p_dof->GetSolutionStepReactionValue(step) = 0.0;
622  }
623  }
624  }
625  }
626 
630 
634 
636 
637 }; /* Class HarmonicAnalysisStrategy */
638 
640 
643 
644 
646 
647 } /* namespace Kratos */
648 
Definition: builtin_timer.h:26
Strategy for solving generalized eigenvalue problems.
Definition: harmonic_analysis_strategy.hpp:54
void SetScheme(SchemePointerType pScheme)
Definition: harmonic_analysis_strategy.hpp:145
TDenseSpace::MatrixPointerType DenseMatrixPointerType
Definition: harmonic_analysis_strategy.hpp:73
bool GetIsInitialized() const
Definition: harmonic_analysis_strategy.hpp:140
HarmonicAnalysisStrategy(const HarmonicAnalysisStrategy &Other)=delete
Deleted copy constructor.
SchemePointerType & pGetScheme()
Definition: harmonic_analysis_strategy.hpp:150
void SetIsInitialized(bool val)
Definition: harmonic_analysis_strategy.hpp:135
int Check() override
Check whether initial input is valid.
Definition: harmonic_analysis_strategy.hpp:484
void SetBuilderAndSolver(BuilderAndSolverPointerType pNewBuilderAndSolver)
Definition: harmonic_analysis_strategy.hpp:155
~HarmonicAnalysisStrategy() override
Destructor.
Definition: harmonic_analysis_strategy.hpp:123
HarmonicAnalysisStrategy(ModelPart &rModelPart, SchemePointerType pScheme, BuilderAndSolverPointerType pBuilderAndSolver, bool UseMaterialDampingFlag=false)
Constructor.
Definition: harmonic_analysis_strategy.hpp:88
TSparseSpace::VectorPointerType SparseVectorPointerType
Definition: harmonic_analysis_strategy.hpp:77
DenseVector< ComplexType > ComplexVectorType
Definition: harmonic_analysis_strategy.hpp:81
KRATOS_CLASS_POINTER_DEFINITION(HarmonicAnalysisStrategy)
void SetUseMaterialDampingFlag(bool flag)
Definition: harmonic_analysis_strategy.hpp:175
void SetReformDofSetAtEachStepFlag(bool flag)
Definition: harmonic_analysis_strategy.hpp:165
ImplicitSolvingStrategy< TSparseSpace, TDenseSpace, TLinearSolver > BaseType
Definition: harmonic_analysis_strategy.hpp:61
bool GetUseMaterialDampingFlag() const
Definition: harmonic_analysis_strategy.hpp:180
void SetEchoLevel(int Level) override
Set verbosity level of the solving strategy.
Definition: harmonic_analysis_strategy.hpp:192
TDenseSpace::VectorType DenseVectorType
Definition: harmonic_analysis_strategy.hpp:69
BaseType::TBuilderAndSolverType::Pointer BuilderAndSolverPointerType
Definition: harmonic_analysis_strategy.hpp:65
TDenseSpace DenseSpaceType
Definition: harmonic_analysis_strategy.hpp:67
TDenseSpace::MatrixType DenseMatrixType
Definition: harmonic_analysis_strategy.hpp:71
void Clear() override
Clear the strategy.
Definition: harmonic_analysis_strategy.hpp:456
BuilderAndSolverPointerType & pGetBuilderAndSolver()
Definition: harmonic_analysis_strategy.hpp:160
bool SolveSolutionStep() override
Solves the current step. This function returns true if a solution has been found, false otherwise.
Definition: harmonic_analysis_strategy.hpp:375
bool GetReformDofSetAtEachStepFlag() const
Definition: harmonic_analysis_strategy.hpp:170
BaseType::TSchemeType::Pointer SchemePointerType
Definition: harmonic_analysis_strategy.hpp:63
std::complex< double > ComplexType
Definition: harmonic_analysis_strategy.hpp:79
TSparseSpace SparseSpaceType
Definition: harmonic_analysis_strategy.hpp:75
void Initialize() override
Initialization to be performed once before using the strategy.
Definition: harmonic_analysis_strategy.hpp:199
Implicit solving strategy base class This is the base class from which we will derive all the implici...
Definition: implicit_solving_strategy.h:61
void SetRebuildLevel(int Level) override
This sets the build level.
Definition: implicit_solving_strategy.h:207
Definition: amatrix_interface.h:41
void resize(std::size_t NewSize1, std::size_t NewSize2, bool preserve=0)
Definition: amatrix_interface.h:224
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
std::vector< std::unique_ptr< Dof< double > >> DofsContainerType
The DoF container type definition.
Definition: node.h:92
virtual void SetEchoLevel(const int Level)
This sets the level of echo for the solving strategy.
Definition: solving_strategy.h:255
ModelPart & GetModelPart()
Operations to get the pointer to the model.
Definition: solving_strategy.h:350
int GetEchoLevel()
This returns the level of echo for the solving strategy.
Definition: solving_strategy.h:271
virtual int Check()
Function to perform expensive checks.
Definition: solving_strategy.h:377
static void Set(VectorType &rX, TDataType A)
rX = A
Definition: ublas_space.h:553
static void Resize(MatrixType &rA, SizeType m, SizeType n)
Definition: ublas_space.h:558
static MatrixPointerType CreateEmptyMatrixPointer()
Definition: ublas_space.h:178
static void Clear(MatrixPointerType &pA)
Definition: ublas_space.h:578
static VectorPointerType CreateEmptyVectorPointer()
Definition: ublas_space.h:183
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
#define KRATOS_ERROR_IF(conditional)
Definition: exception.h:162
#define KRATOS_INFO_IF(label, conditional)
Definition: logger.h:251
end
Definition: DEM_benchmarks.py:180
Vector VectorType
Definition: geometrical_transformation_utilities.h:56
Matrix MatrixType
Definition: geometrical_transformation_utilities.h:55
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
KratosZeroVector< double > ZeroVector
Definition: amatrix_interface.h:561
KratosZeroMatrix< double > ZeroMatrix
Definition: amatrix_interface.h:559
AMatrix::MatrixProductExpression< TExpression1Type, TExpression2Type > prod(AMatrix::MatrixExpression< TExpression1Type, TCategory1 > const &First, AMatrix::MatrixExpression< TExpression2Type, TCategory2 > const &Second)
Definition: amatrix_interface.h:568
TExpression1Type::data_type inner_prod(AMatrix::MatrixExpression< TExpression1Type, TCategory1 > const &First, AMatrix::MatrixExpression< TExpression2Type, TCategory2 > const &Second)
Definition: amatrix_interface.h:592
AMatrix::MatrixColumn< const TExpressionType > column(AMatrix::MatrixExpression< TExpressionType, TCategory > const &TheExpression, std::size_t ColumnIndex)
Definition: amatrix_interface.h:637
int step
Definition: face_heat.py:88
f
Definition: generate_convection_diffusion_explicit_element.py:112
n_dofs
Definition: generate_total_lagrangian_mixed_volumetric_strain_element.py:151
int j
Definition: quadrature.py:648
integer i
Definition: TensorModule.f:17
float factor
for node in (self.combined_model_part).Nodes: pold = node.GetSolutionStepValue(PRESSURE,...
Definition: ulf_PGLASS.py:254
Definition: mesh_converter.cpp:38