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.
control_module_process.hpp
Go to the documentation of this file.
1 // | / |
2 // ' / __| _` | __| _ \ __|
3 // . \ | ( | | ( |\__ `
4 // _|\_\_| \__,_|\__|\___/ ____/
5 // Multi-Physics
6 //
7 // License: BSD License
8 // Kratos default license: kratos/license.txt
9 //
10 // Main authors: Ignasi de Pouplana
11 //
12 
13 
14 #if !defined(KRATOS_CONTROL_MODULE_PROCESS )
15 #define KRATOS_CONTROL_MODULE_PROCESS
16 
17 #include "includes/table.h"
19 #include "processes/process.h"
20 
22 
23 namespace Kratos
24 {
25 
27 {
28 
29 public:
30 
32 
35 
37 
40  ModelPart& rModelPart,
41  Parameters rParameters
42  ) : Process() ,
43  mrModelPart(rModelPart)
44  {
46 
47  Parameters default_parameters( R"(
48  {
49  "model_part_name":"MODEL_PART_NAME",
50  "imposed_direction" : 0,
51  "alternate_axis_loading": false,
52  "target_stress_table_id" : 0,
53  "initial_velocity" : 0.0,
54  "limit_velocity" : 1.0,
55  "velocity_factor" : 1.0,
56  "compression_length" : 1.0,
57  "young_modulus" : 1.0e7,
58  "stress_increment_tolerance": 100.0,
59  "update_stiffness": true,
60  "start_time" : 0.0,
61  "stress_averaging_time": 1.0e-5
62  } )" );
63 
64  // Now validate agains defaults -- this also ensures no type mismatch
65  rParameters.ValidateAndAssignDefaults(default_parameters);
66 
67  mImposedDirection = rParameters["imposed_direction"].GetInt();
68  mTargetStressTableId = rParameters["target_stress_table_id"].GetInt();
69  mVelocity = rParameters["initial_velocity"].GetDouble();
70  mLimitVelocity = rParameters["limit_velocity"].GetDouble();
71  mVelocityFactor = rParameters["velocity_factor"].GetDouble();
72  mStartTime = rParameters["start_time"].GetDouble();
73  mStressIncrementTolerance = rParameters["stress_increment_tolerance"].GetDouble();
74  mUpdateStiffness = rParameters["update_stiffness"].GetBool();
75  mReactionStressOld = 0.0;
76  mStiffness = rParameters["young_modulus"].GetDouble()/rParameters["compression_length"].GetDouble(); // mStiffness is actually a stiffness over an area
77  mStressAveragingTime = rParameters["stress_averaging_time"].GetDouble();
78  mVectorOfLastStresses.resize(0);
79  // NOTE: Alternate axis loading only works for X,Y,Z loading. Radial loading is always applied.
80  mAlternateAxisLoading = rParameters["alternate_axis_loading"].GetBool();
81  mXCounter = 1;
82  mYCounter = 2;
83  mZCounter = 3;
84 
85  mApplyCM = false;
86 
87  // Initialize Variables
88  const int NNodes = static_cast<int>(mrModelPart.Nodes().size());
89  ModelPart::NodesContainerType::iterator it_begin = mrModelPart.NodesBegin();
90  array_1d<double,3> zero_vector = ZeroVector(3);
91  #pragma omp parallel for
92  for(int i = 0; i<NNodes; i++) {
93  ModelPart::NodesContainerType::iterator it = it_begin + i;
94  it->SetValue(TARGET_STRESS,zero_vector);
95  it->SetValue(REACTION_STRESS,zero_vector);
96  it->SetValue(LOADING_VELOCITY,zero_vector);
97  }
98 
99  KRATOS_CATCH("");
100  }
101 
103 
105  ~ControlModuleProcess() override {}
106 
108 
110  void Execute() override
111  {
112  }
113 
116  void ExecuteInitialize() override
117  {
118  KRATOS_TRY;
119 
120  const int NNodes = static_cast<int>(mrModelPart.Nodes().size());
121  ModelPart::NodesContainerType::iterator it_begin = mrModelPart.NodesBegin();
122 
123  if (mImposedDirection == 0) {
124  // X direction
125  #pragma omp parallel for
126  for(int i = 0; i<NNodes; i++) {
127  ModelPart::NodesContainerType::iterator it = it_begin + i;
128  it->Fix(DISPLACEMENT_X);
129  it->FastGetSolutionStepValue(DISPLACEMENT_X) = 0.0;
130  }
131  } else if (mImposedDirection == 1) {
132  // Y direction
133  #pragma omp parallel for
134  for(int i = 0; i<NNodes; i++) {
135  ModelPart::NodesContainerType::iterator it = it_begin + i;
136  it->Fix(DISPLACEMENT_Y);
137  it->FastGetSolutionStepValue(DISPLACEMENT_Y) = 0.0;
138  }
139  } else if (mImposedDirection == 2) {
140  // Z direction
141  #pragma omp parallel for
142  for(int i = 0; i<NNodes; i++) {
143  ModelPart::NodesContainerType::iterator it = it_begin + i;
144  it->Fix(DISPLACEMENT_Z);
145  it->FastGetSolutionStepValue(DISPLACEMENT_Z) = 0.0;
146  }
147  } else {
148  // Radial direction
149  #pragma omp parallel for
150  for(int i = 0; i<NNodes; i++) {
151  ModelPart::NodesContainerType::iterator it = it_begin + i;
152  it->Fix(DISPLACEMENT_X);
153  it->FastGetSolutionStepValue(DISPLACEMENT_X) = 0.0;
154  it->Fix(DISPLACEMENT_Y);
155  it->FastGetSolutionStepValue(DISPLACEMENT_Y) = 0.0;
156  }
157  }
158 
159  KRATOS_CATCH("");
160  }
161 
164  {
165  KRATOS_TRY;
166 
167  const double CurrentTime = mrModelPart.GetProcessInfo()[TIME];
168  TableType::Pointer pTargetStressTable = mrModelPart.pGetTable(mTargetStressTableId);
169  const int NNodes = static_cast<int>(mrModelPart.Nodes().size());
170  ModelPart::NodesContainerType::iterator it_begin = mrModelPart.NodesBegin();
171 
172  double ReactionStress = CalculateReactionStress();
173  ReactionStress = UpdateVectorOfHistoricalStressesAndComputeNewAverage(ReactionStress);
174 
175  // Check whether this is a loading step for the current axis
176  IsTimeToApplyCM();
177 
178  if (mApplyCM == true) {
179 
180  // Update K if required
181  const double DeltaTime = mrModelPart.GetProcessInfo()[DELTA_TIME];
182  if (mAlternateAxisLoading == false) {
183  if(mUpdateStiffness == true) {
184  mStiffness = EstimateStiffness(ReactionStress,DeltaTime);
185  }
186  }
187  mReactionStressOld = ReactionStress;
188 
189  // Update velocity
190  const double NextTargetStress = pTargetStressTable->GetValue(CurrentTime+DeltaTime);
191  const double df_target = NextTargetStress - ReactionStress;
192  double delta_velocity = df_target/(mStiffness * DeltaTime) - mVelocity;
193 
194  if(std::abs(df_target) < mStressIncrementTolerance) {
195  delta_velocity = -mVelocity;
196  }
197 
198  mVelocity += mVelocityFactor * delta_velocity;
199 
200  if(std::abs(mVelocity) > std::abs(mLimitVelocity)) {
201  if(mVelocity >= 0.0) {
202  mVelocity = std::abs(mLimitVelocity);
203  } else {
204  mVelocity = - std::abs(mLimitVelocity);
205  }
206  }
207 
208  // Update Imposed displacement
209  if (mImposedDirection == 0) { // X direction
210  #pragma omp parallel for
211  for(int i = 0; i<NNodes; i++) {
212  ModelPart::NodesContainerType::iterator it = it_begin + i;
213  it->FastGetSolutionStepValue(DISPLACEMENT_X) += mVelocity * DeltaTime;
214  // Save calculated velocity and reaction for print
215  it->GetValue(TARGET_STRESS_X) = pTargetStressTable->GetValue(CurrentTime);
216  it->GetValue(REACTION_STRESS_X) = ReactionStress;
217  it->GetValue(LOADING_VELOCITY_X) = mVelocity;
218  }
219  } else if (mImposedDirection == 1) { // Y direction
220  #pragma omp parallel for
221  for(int i = 0; i<NNodes; i++) {
222  ModelPart::NodesContainerType::iterator it = it_begin + i;
223  it->FastGetSolutionStepValue(DISPLACEMENT_Y) += mVelocity * DeltaTime;
224  // Save calculated velocity and reaction for print
225  it->GetValue(TARGET_STRESS_Y) = pTargetStressTable->GetValue(CurrentTime);
226  it->GetValue(REACTION_STRESS_Y) = ReactionStress;
227  it->GetValue(LOADING_VELOCITY_Y) = mVelocity;
228  }
229  } else if (mImposedDirection == 2) { // Z direction
230  #pragma omp parallel for
231  for(int i = 0; i<NNodes; i++) {
232  ModelPart::NodesContainerType::iterator it = it_begin + i;
233  it->FastGetSolutionStepValue(DISPLACEMENT_Z) += mVelocity * DeltaTime;
234  // Save calculated velocity and reaction for print
235  it->GetValue(TARGET_STRESS_Z) = pTargetStressTable->GetValue(CurrentTime);
236  it->GetValue(REACTION_STRESS_Z) = ReactionStress;
237  it->GetValue(LOADING_VELOCITY_Z) = mVelocity;
238  }
239  } else { // Radial direction
240  #pragma omp parallel for
241  for(int i = 0; i<NNodes; i++) {
242  ModelPart::NodesContainerType::iterator it = it_begin + i;
243  double external_radius = std::sqrt(it->X()*it->X() + it->Y()*it->Y());
244  double cos_theta = it->X()/external_radius;
245  double sin_theta = it->Y()/external_radius;
246  it->FastGetSolutionStepValue(DISPLACEMENT_X) += mVelocity * cos_theta * DeltaTime;
247  it->FastGetSolutionStepValue(DISPLACEMENT_Y) += mVelocity * sin_theta * DeltaTime;
248  // Save calculated velocity and reaction for print
249  it->GetValue(TARGET_STRESS_X) = pTargetStressTable->GetValue(CurrentTime) * cos_theta;
250  it->GetValue(TARGET_STRESS_Y) = pTargetStressTable->GetValue(CurrentTime) * sin_theta;
251  it->GetValue(REACTION_STRESS_X) = ReactionStress * cos_theta;
252  it->GetValue(REACTION_STRESS_Y) = ReactionStress * sin_theta;
253  it->GetValue(LOADING_VELOCITY_X) = mVelocity * cos_theta;
254  it->GetValue(LOADING_VELOCITY_Y) = mVelocity * sin_theta;
255  }
256  }
257  } else {
258  // Save calculated velocity and reaction for print
259  if (mImposedDirection == 0) { // X direction
260  #pragma omp parallel for
261  for(int i = 0; i<NNodes; i++) {
262  ModelPart::NodesContainerType::iterator it = it_begin + i;
263  it->GetValue(TARGET_STRESS_X) = pTargetStressTable->GetValue(CurrentTime);
264  it->GetValue(REACTION_STRESS_X) = ReactionStress;
265  it->GetValue(LOADING_VELOCITY_X) = 0.0;
266  }
267  } else if (mImposedDirection == 1) { // Y direction
268  #pragma omp parallel for
269  for(int i = 0; i<NNodes; i++) {
270  ModelPart::NodesContainerType::iterator it = it_begin + i;
271  it->GetValue(TARGET_STRESS_Y) = pTargetStressTable->GetValue(CurrentTime);
272  it->GetValue(REACTION_STRESS_Y) = ReactionStress;
273  it->GetValue(LOADING_VELOCITY_Y) = 0.0;
274  }
275  } else if (mImposedDirection == 2) { // Z direction
276  #pragma omp parallel for
277  for(int i = 0; i<NNodes; i++) {
278  ModelPart::NodesContainerType::iterator it = it_begin + i;
279  it->GetValue(TARGET_STRESS_Z) = pTargetStressTable->GetValue(CurrentTime);
280  it->GetValue(REACTION_STRESS_Z) = ReactionStress;
281  it->GetValue(LOADING_VELOCITY_Z) = 0.0;
282  }
283  } else { // Radial direction
284  #pragma omp parallel for
285  for(int i = 0; i<NNodes; i++) {
286  ModelPart::NodesContainerType::iterator it = it_begin + i;
287  double external_radius = std::sqrt(it->X()*it->X() + it->Y()*it->Y());
288  double cos_theta = it->X()/external_radius;
289  double sin_theta = it->Y()/external_radius;
290  it->GetValue(TARGET_STRESS_X) = pTargetStressTable->GetValue(CurrentTime) * cos_theta;
291  it->GetValue(TARGET_STRESS_Y) = pTargetStressTable->GetValue(CurrentTime) * sin_theta;
292  it->GetValue(REACTION_STRESS_X) = ReactionStress * cos_theta;
293  it->GetValue(REACTION_STRESS_Y) = ReactionStress * sin_theta;
294  it->GetValue(LOADING_VELOCITY_X) = 0.0;
295  it->GetValue(LOADING_VELOCITY_Y) = 0.0;
296  }
297  }
298  }
299 
300  KRATOS_CATCH("");
301  }
302 
303 
308  {
309  // Update K with latest ReactionStress after the axis has been loaded
310  if (mApplyCM == true) {
311  if (mAlternateAxisLoading == true) {
312  const double delta_time = mrModelPart.GetProcessInfo()[DELTA_TIME];
313  double ReactionStress = CalculateReactionStress();
314  if(mUpdateStiffness == true) {
315  mStiffness = EstimateStiffness(ReactionStress,delta_time);
316  }
317  }
318  }
319  }
320 
322  std::string Info() const override
323  {
324  return "ControlModuleProcess";
325  }
326 
328  void PrintInfo(std::ostream& rOStream) const override
329  {
330  rOStream << "ControlModuleProcess";
331  }
332 
334  void PrintData(std::ostream& rOStream) const override
335  {
336  }
337 
339 
340 protected:
341 
343 
345  unsigned int mImposedDirection;
346  unsigned int mTargetStressTableId;
347  double mVelocity;
350  double mStartTime;
353  double mStiffness;
355  std::vector<double> mVectorOfLastStresses;
358  unsigned int mXCounter;
359  unsigned int mYCounter;
360  unsigned int mZCounter;
361  bool mApplyCM;
362 
364 
365 private:
366 
368  ControlModuleProcess& operator=(ControlModuleProcess const& rOther);
369 
371  //ControlModuleProcess(ControlModuleProcess const& rOther);
372 
373  double UpdateVectorOfHistoricalStressesAndComputeNewAverage(const double& last_reaction) {
374  KRATOS_TRY;
375  int length_of_vector = mVectorOfLastStresses.size();
376  if (length_of_vector == 0) { //only the first time
377  int number_of_steps_for_stress_averaging = (int) (mStressAveragingTime / mrModelPart.GetProcessInfo()[DELTA_TIME]);
378  if(number_of_steps_for_stress_averaging < 1) number_of_steps_for_stress_averaging = 1;
379  mVectorOfLastStresses.resize(number_of_steps_for_stress_averaging);
380  KRATOS_INFO("DEM") << " 'number_of_steps_for_stress_averaging' is "<< number_of_steps_for_stress_averaging << std::endl;
381  }
382 
383  length_of_vector = mVectorOfLastStresses.size();
384 
385  if(length_of_vector > 1) {
386  for(int i=1; i<length_of_vector; i++) {
388  }
389  }
390  mVectorOfLastStresses[length_of_vector-1] = last_reaction;
391 
392  double average = 0.0;
393  for(int i=0; i<length_of_vector; i++) {
394  average += mVectorOfLastStresses[i];
395  }
396  average /= (double) length_of_vector;
397  return average;
398 
399  KRATOS_CATCH("");
400  }
401 
402  void IsTimeToApplyCM(){
403  const double current_time = mrModelPart.GetProcessInfo()[TIME];
404  mApplyCM = false;
405 
406  if(current_time >= mStartTime) {
407  if (mAlternateAxisLoading == true) {
408  const unsigned int step = mrModelPart.GetProcessInfo()[STEP];
409  if (mImposedDirection == 0) {
410  if(step == mXCounter){
411  mApplyCM = true;
412  mXCounter += 3;
413  }
414  } else if (mImposedDirection == 1) {
415  if(step == mYCounter){
416  mApplyCM = true;
417  mYCounter += 3;
418  }
419  } else if (mImposedDirection == 2) {
420  if(step == mZCounter){
421  mApplyCM = true;
422  mZCounter += 3;
423  }
424  } else {
425  mApplyCM = true;
426  }
427  } else {
428  mApplyCM = true;
429  }
430  }
431  }
432 
433  double CalculateReactionStress() {
434  const int NNodes = static_cast<int>(mrModelPart.Nodes().size());
435  ModelPart::NodesContainerType::iterator it_begin = mrModelPart.NodesBegin();
436 
437  // Calculate face_area
438  const int NCons = static_cast<int>(mrModelPart.Conditions().size());
439  ModelPart::ConditionsContainerType::iterator con_begin = mrModelPart.ConditionsBegin();
440  double FaceArea = 0.0;
441  #pragma omp parallel for reduction(+:FaceArea)
442  for(int i = 0; i < NCons; i++)
443  {
444  ModelPart::ConditionsContainerType::iterator itCond = con_begin + i;
445  FaceArea += itCond->GetGeometry().Area();
446  }
447 
448  // Calculate ReactionStress
449  double FaceReaction = 0.0;
450  if (mImposedDirection == 0) { // X direction
451  #pragma omp parallel for reduction(+:FaceReaction)
452  for(int i = 0; i<NNodes; i++){
453  ModelPart::NodesContainerType::iterator it = it_begin + i;
454  FaceReaction += it->FastGetSolutionStepValue(REACTION_X);
455  }
456  } else if (mImposedDirection == 1) { // Y direction
457  #pragma omp parallel for reduction(+:FaceReaction)
458  for(int i = 0; i<NNodes; i++){
459  ModelPart::NodesContainerType::iterator it = it_begin + i;
460  FaceReaction += it->FastGetSolutionStepValue(REACTION_Y);
461  }
462  } else if (mImposedDirection == 2) { // Z direction
463  #pragma omp parallel for reduction(+:FaceReaction)
464  for(int i = 0; i<NNodes; i++){
465  ModelPart::NodesContainerType::iterator it = it_begin + i;
466  FaceReaction += it->FastGetSolutionStepValue(REACTION_Z);
467  }
468  } else { // Radial direction
469  #pragma omp parallel for reduction(+:FaceReaction)
470  for(int i = 0; i<NNodes; i++){
471  ModelPart::NodesContainerType::iterator it = it_begin + i;
472  // Unit normal vector pointing outwards
473  array_1d<double,2> n;
474  n[0] = it->X();
475  n[1] = it->Y();
476  double inv_norm = 1.0/norm_2(n);
477  n[0] *= inv_norm;
478  n[1] *= inv_norm;
479  // Scalar product between reaction and normal
480  double n_dot_r = n[0] * it->FastGetSolutionStepValue(REACTION_X) +
481  n[1] * it->FastGetSolutionStepValue(REACTION_Y);
482  FaceReaction += n_dot_r;
483  }
484  }
485 
486  double ReactionStress;
487  if (std::abs(FaceArea) > 1.0e-12) {
488  ReactionStress = FaceReaction/FaceArea;
489  } else {
490  ReactionStress = 0.0;
491  }
492 
493  return ReactionStress;
494  }
495 
496  double EstimateStiffness(const double& rReactionStress, const double& rDeltaTime) {
497  double K_estimated = mStiffness;
498  if(std::abs(mVelocity) > 1.0e-12 && std::abs(rReactionStress-mReactionStressOld) > mStressIncrementTolerance) {
499  K_estimated = std::abs((rReactionStress-mReactionStressOld)/(mVelocity * rDeltaTime));
500  }
501  return K_estimated;
502  }
503 
504 }; // Class ControlModuleProcess
505 
507 inline std::istream& operator >> (std::istream& rIStream,
508  ControlModuleProcess& rThis);
509 
511 inline std::ostream& operator << (std::ostream& rOStream,
512  const ControlModuleProcess& rThis)
513 {
514  rThis.PrintInfo(rOStream);
515  rOStream << std::endl;
516  rThis.PrintData(rOStream);
517 
518  return rOStream;
519 }
520 
521 } // namespace Kratos.
522 
523 #endif /* KRATOS_CONTROL_MODULE_PROCESS defined */
Definition: control_module_process.hpp:27
std::string Info() const override
Turn back information as a string.
Definition: control_module_process.hpp:322
double mVelocity
Definition: control_module_process.hpp:347
double mStartTime
Definition: control_module_process.hpp:350
bool mUpdateStiffness
Definition: control_module_process.hpp:354
ModelPart & mrModelPart
Member Variables.
Definition: control_module_process.hpp:344
void ExecuteFinalizeSolutionStep() override
This function will be executed at every time step AFTER performing the solve phase.
Definition: control_module_process.hpp:307
double mStressIncrementTolerance
Definition: control_module_process.hpp:352
unsigned int mYCounter
Definition: control_module_process.hpp:359
bool mAlternateAxisLoading
Definition: control_module_process.hpp:357
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: control_module_process.hpp:334
unsigned int mImposedDirection
Definition: control_module_process.hpp:345
~ControlModuleProcess() override
Destructor.
Definition: control_module_process.hpp:105
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: control_module_process.hpp:328
unsigned int mZCounter
Definition: control_module_process.hpp:360
unsigned int mTargetStressTableId
Definition: control_module_process.hpp:346
double mLimitVelocity
Definition: control_module_process.hpp:348
double mStiffness
Definition: control_module_process.hpp:353
double mReactionStressOld
Definition: control_module_process.hpp:351
unsigned int mXCounter
Definition: control_module_process.hpp:358
void ExecuteInitialize() override
Definition: control_module_process.hpp:116
void Execute() override
Execute method is used to execute the ControlModuleProcess algorithms.
Definition: control_module_process.hpp:110
double mVelocityFactor
Definition: control_module_process.hpp:349
ControlModuleProcess(ModelPart &rModelPart, Parameters rParameters)
Constructor.
Definition: control_module_process.hpp:39
Table< double, double > TableType
Defining a table with double argument and result type as table type.
Definition: control_module_process.hpp:34
bool mApplyCM
Definition: control_module_process.hpp:361
void ExecuteInitializeSolutionStep() override
this function will be executed at every time step BEFORE performing the solve phase
Definition: control_module_process.hpp:163
std::vector< double > mVectorOfLastStresses
Definition: control_module_process.hpp:355
double mStressAveragingTime
Definition: control_module_process.hpp:356
KRATOS_CLASS_POINTER_DEFINITION(ControlModuleProcess)
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
ConditionIterator ConditionsBegin(IndexType ThisIndex=0)
Definition: model_part.h:1361
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
TableType::Pointer pGetTable(IndexType TableId)
Definition: model_part.h:595
NodesContainerType & Nodes(IndexType ThisIndex=0)
Definition: model_part.h:507
This class provides to Kratos a data structure for I/O based on the standard of JSON.
Definition: kratos_parameters.h:59
double GetDouble() const
This method returns the double contained in the current Parameter.
Definition: kratos_parameters.cpp:657
int GetInt() const
This method returns the integer contained in the current Parameter.
Definition: kratos_parameters.cpp:666
void ValidateAndAssignDefaults(const Parameters &rDefaultParameters)
This function is designed to verify that the parameters under testing match the form prescribed by th...
Definition: kratos_parameters.cpp:1306
bool GetBool() const
This method returns the boolean contained in the current Parameter.
Definition: kratos_parameters.cpp:675
The base class for all processes in Kratos.
Definition: process.h:49
Definition: table.h:435
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
#define KRATOS_INFO(label)
Definition: logger.h:250
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
KratosZeroVector< double > ZeroVector
Definition: amatrix_interface.h:561
TExpressionType::data_type norm_2(AMatrix::MatrixExpression< TExpressionType, TCategory > const &TheExpression)
Definition: amatrix_interface.h:625
std::istream & operator>>(std::istream &rIStream, LinearMasterSlaveConstraint &rThis)
input stream function
REACTION_CHECK_STIFFNESS_FACTOR int
Definition: contact_structural_mechanics_application_variables.h:75
TABLE_NUMBER_ANGULAR_VELOCITY TABLE_NUMBER_MOMENT I33 BEAM_INERTIA_ROT_UNIT_LENGHT_Y KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, double, BEAM_INERTIA_ROT_UNIT_LENGHT_Z) typedef std double
Definition: DEM_application_variables.h:182
std::ostream & operator<<(std::ostream &rOStream, const LinearMasterSlaveConstraint &rThis)
output stream function
Definition: linear_master_slave_constraint.h:432
int step
Definition: face_heat.py:88
delta_time
Definition: generate_frictional_mortar_condition.py:130
float external_radius
Definition: mesh_to_mdpa_converter.py:24
int n
manufactured solution and derivatives (u=0 at z=0 dudz=0 at z=domain_height)
Definition: ode_solve.py:402
integer i
Definition: TensorModule.f:17