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.
time_integration_method.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_TIME_INTEGRATION_METHOD_H_INCLUDED)
11 #define KRATOS_TIME_INTEGRATION_METHOD_H_INCLUDED
12 
13 // System includes
14 
15 // External includes
16 
17 // Project includes
18 #include "includes/checks.h"
19 #include "includes/process_info.h"
20 #include "includes/variables.h"
21 #include "includes/node.h"
24 
25 namespace Kratos
26 {
29 
32 
36 
40 
44 
48 
50 
53  template<class TVariableType, class TValueType>
55  {
56  public:
57 
60 
62  typedef Node NodeType;
63 
65  typedef const TVariableType* VariablePointer;
66 
67  typedef const TValueType* ValuePointer;
68 
69  typedef void (TimeIntegrationMethod::*MethodPointer) (NodeType& rNode);
70 
71  typedef double& (TimeIntegrationMethod::*MethodFactorPointer) (double& rParameter);
72 
74 
75  typedef typename TimeIntegrationMethod::Pointer TimeIntegrationMethodPointer;
76 
80 
81 
84  {
85  mpVariable = nullptr;
86  mpFirstDerivative = nullptr;
87  mpSecondDerivative = nullptr;
88 
89  mpPrimaryVariable = nullptr;
90  mpInputVariable = nullptr;
91  }
92 
94  TimeIntegrationMethod(const TVariableType& rVariable) : Flags()
95  {
96  mpVariable = &rVariable;
97  mpFirstDerivative = nullptr;
98  mpSecondDerivative = nullptr;
99 
100  //default dof variable
101  mpPrimaryVariable = &rVariable;
102 
103  this->SetPointerMethods();
104  }
105 
107  TimeIntegrationMethod(const TVariableType& rVariable, const TVariableType& rFirstDerivative, const TVariableType& rSecondDerivative) : Flags()
108  {
109  mpVariable = &rVariable;
110  mpFirstDerivative = &rFirstDerivative;
111  mpSecondDerivative = &rSecondDerivative;
112 
113  //default dof variable
114  mpPrimaryVariable = &rVariable;
115 
116  this->SetPointerMethods();
117  }
118 
120  TimeIntegrationMethod(const TVariableType& rVariable, const TVariableType& rFirstDerivative, const TVariableType& rSecondDerivative, const TVariableType& rPrimaryVariable) : Flags()
121  {
122  mpVariable = &rVariable;
123  mpFirstDerivative = &rFirstDerivative;
124  mpSecondDerivative = &rSecondDerivative;
125 
126  if( HasVariableName(rPrimaryVariable.Name()) ){
127  //default dof variable
128  mpPrimaryVariable = &rPrimaryVariable;
129  }
130  else{
131  KRATOS_ERROR << "The primary variable supplied: "<<rPrimaryVariable.Name()<<" is not any of the time integration variables" << std::endl;
132  }
133 
134  this->SetPointerMethods();
135  }
136 
139  :Flags(rOther)
140  ,mpVariable(rOther.mpVariable)
145  {
146  }
147 
150  {
151  return Kratos::make_shared<TimeIntegrationMethod>(*this);
152  }
153 
156 
160 
164 
165  // set parameters (to call it once with the original input parameters)
166  virtual void CalculateParameters(ProcessInfo& rCurrentProcessInfo)
167  {
168 
169  }
170 
171  // set parameters (do not calculate parameters here, only read them)
172  virtual void SetParameters(const ProcessInfo& rCurrentProcessInfo)
173  {
174 
175  }
176 
177  // set parameters to process info
178  virtual void SetProcessInfoParameters(ProcessInfo& rCurrentProcessInfo)
179  {
180 
181  }
182 
183  // set input variable (constrained or dof variable)
184  void SetInputVariable(const TVariableType& rVariable)
185  {
186  mpInputVariable = &rVariable;
187 
188  this->SetPointerAssignMethod();
189  }
190 
191 
192  // get primary variable name
194  {
195  return (*this->mpPrimaryVariable).Name();
196  }
197 
198  // get primary variable name
199  std::string GetVariableName()
200  {
201  return (*this->mpVariable).Name();
202  }
203 
204  // check if the integration method has the variable
205  bool HasVariableName(const std::string& rVariableName)
206  {
207  if( this->mpVariable != nullptr ){
208  if( rVariableName == (*this->mpVariable).Name() ){
209  return true;
210  }
211  else if( this->mpFirstDerivative != nullptr ){
212  if( rVariableName == (*this->mpFirstDerivative).Name() ){
213  return true;
214  }
215  else if( this->mpSecondDerivative != nullptr ){
216  if( rVariableName == (*this->mpSecondDerivative).Name() ){
217  return true;
218  }
219  }
220  }
221  }
222  return false;
223  }
224 
225 
226  // check if the integration method has the step variable (step variable)
227  virtual bool HasStepVariable()
228  {
229  return false;
230  }
231 
232  // set step variable (step variable)
233  virtual void SetStepVariable(const TVariableType& rStepVariable)
234  {
235  KRATOS_ERROR << " Calling SetStepVariable from time integration base class " <<std::endl;
236  }
237 
238  // assign
239  virtual void Assign(NodeType& rNode)
240  {
241  KRATOS_TRY
242 
243  (this->*this->mpAssign)(rNode);
244 
245  KRATOS_CATCH( "" )
246  }
247 
248  // predict
249  virtual void Predict(NodeType& rNode)
250  {
251  KRATOS_TRY
252 
253  (this->*this->mpPredict)(rNode);
254 
255  KRATOS_CATCH( "" )
256  }
257 
258  // update
259  virtual void Update(NodeType& rNode)
260  {
261  KRATOS_TRY
262 
263  (this->*this->mpUpdate)(rNode);
264 
265  KRATOS_CATCH( "" )
266  }
267 
272  virtual int Check( const ProcessInfo& rCurrentProcessInfo )
273  {
274  KRATOS_TRY
275 
276  // Check that all required variables have been registered
277  if( mpVariable == nullptr ){
278  KRATOS_ERROR << " time integration method Variable not set " <<std::endl;
279  }
280 
281  if( mpPrimaryVariable == nullptr ){
282  KRATOS_ERROR << " time integration method PrimaryVariable not set " <<std::endl;
283  }
284 
285  // if( mpInputVariable == nullptr ){
286  // KRATOS_ERROR << " time integration method InputVariable not set " <<std::endl;
287  // }
288 
289  // if( mpFirstDerivative == nullptr ){
290  // KRATOS_ERROR << " time integration method FirstDerivative not set " <<std::endl;
291  // }
292 
293  // if( mpSecondDerivative == nullptr ){
294  // KRATOS_ERROR << " time integration method SecondDerivative not set " <<std::endl;
295  // }
296 
297  return 0;
298 
299  KRATOS_CATCH("")
300  }
301 
305 
306  // get parameters for variables (RHS)
307  virtual double& GetFirstDerivativeKineticFactor(double& rParameter)
308  {
309  KRATOS_TRY
310  return (this->*this->mpFirstDerivativeKineticFactor)(rParameter);
311  KRATOS_CATCH("")
312  }
313 
314  virtual double& GetSecondDerivativeKineticFactor(double& rParameter)
315  {
316  KRATOS_TRY
317  return (this->*this->mpSecondDerivativeKineticFactor)(rParameter);
318  KRATOS_CATCH("")
319  }
320 
321 
322  // get parameters for matrices (LHS)
323  virtual double& GetFirstDerivativeInertialFactor(double& rParameter)
324  {
325  KRATOS_TRY
326  return (this->*this->mpFirstDerivativeInertialFactor)(rParameter);
327  KRATOS_CATCH("")
328  }
329 
330  virtual double& GetSecondDerivativeInertialFactor(double& rParameter)
331  {
332  KRATOS_TRY
333  return (this->*this->mpSecondDerivativeInertialFactor)(rParameter);
334  KRATOS_CATCH("")
335  }
336 
340 
342  {
343  return *this;
344  }
345 
346  Flags const& GetFlags() const
347  {
348  return *this;
349  }
350 
351  void SetFlags(Flags const& rThisFlags)
352  {
353  Flags::operator=(rThisFlags);
354  }
355 
359 
363 
364 
366  std::string Info() const override
367  {
368  std::stringstream buffer;
369  buffer << "TimeIntegrationMethod";
370  return buffer.str();
371  }
372 
374  void PrintInfo(std::ostream& rOStream) const override
375  {
376  rOStream << "TimeIntegrationMethod";
377  }
378 
380  void PrintData(std::ostream& rOStream) const override
381  {
382  rOStream << "TimeIntegrationMethod Data";
383  }
384 
385 
389 
390 
392 
393  protected:
394 
397 
401 
402 
403  // method variables and derivatives
404 
406 
408 
410 
411  // primary variable (calculated variable 'dof')
412 
414 
415 
416  // input variable (imposed variable or calculated variable)
417 
419 
420 
421  // method pointer
422 
424 
426 
428 
429  // dynamic integration method pointers
430 
433 
436 
440 
444 
445  // set methods from primary variable
447  {
448  if( this->mpPrimaryVariable != nullptr ){
449 
450  if( this->mpVariable != nullptr ){
451  if( *this->mpPrimaryVariable == *this->mpVariable ){
454 
457 
460  }
461  else if( this->mpFirstDerivative != nullptr ){
462  if( *this->mpPrimaryVariable == *this->mpFirstDerivative ){
465 
468 
471  }
472  else if( this->mpSecondDerivative != nullptr ){
473  if( *this->mpPrimaryVariable == *this->mpSecondDerivative ){
476 
479 
482  }
483  }
484  }
485  }
486  }
487 
488  }
489 
490  // set methods from input variable
492  {
493  if( this->mpInputVariable != nullptr ){
494 
495  if( this->mpVariable != nullptr ){
496  if( *this->mpInputVariable == *this->mpVariable ){
498  }
499  else if( this->mpFirstDerivative != nullptr ){
500  if( *this->mpInputVariable == *this->mpFirstDerivative ){
502  }
503  else if( this->mpSecondDerivative != nullptr ){
504  if( *this->mpInputVariable == *this->mpSecondDerivative ){
506  }
507  }
508  }
509  }
510  }
511 
512  }
513 
514  virtual void AssignFromVariable(NodeType& rNode)
515  {
516  KRATOS_ERROR << " Calling predict from variable from time integration base class " <<std::endl;
517  }
518 
519  virtual void AssignFromFirstDerivative(NodeType& rNode)
520  {
521  KRATOS_ERROR << " Calling predict from first derivative from time integration base class " <<std::endl;
522  }
523 
525  {
526  KRATOS_ERROR << " Calling predict from second derivative from time integration base class " <<std::endl;
527  }
528 
529  virtual void AssignVariable(NodeType& rNode)
530  {
531  KRATOS_ERROR << " Calling predict variable from time integration base class " <<std::endl;
532  }
533 
534  virtual void AssignFirstDerivative(NodeType& rNode)
535  {
536  KRATOS_ERROR << " Calling predict first derivative from time integration base class " <<std::endl;
537  }
538 
539  virtual void AssignSecondDerivative(NodeType& rNode)
540  {
541  KRATOS_ERROR << " Calling predict second derivative from time integration base class " <<std::endl;
542  }
543 
544  virtual void PredictFromVariable(NodeType& rNode)
545  {
546  KRATOS_ERROR << " Calling predict from variable from time integration base class " <<std::endl;
547  }
548 
550  {
551  KRATOS_ERROR << " Calling predict from first derivative from time integration base class " <<std::endl;
552  }
553 
555  {
556  KRATOS_ERROR << " Calling predict from second derivative from time integration base class " <<std::endl;
557  }
558 
559  virtual void PredictVariable(NodeType& rNode)
560  {
561  KRATOS_ERROR << " Calling predict variable from time integration base class " <<std::endl;
562  }
563 
564  virtual void PredictFirstDerivative(NodeType& rNode)
565  {
566  KRATOS_ERROR << " Calling predict first derivative from time integration base class " <<std::endl;
567  }
568 
569  virtual void PredictSecondDerivative(NodeType& rNode)
570  {
571  KRATOS_ERROR << " Calling predict second derivative from time integration base class " <<std::endl;
572  }
573 
574  virtual void UpdateFromVariable(NodeType& rNode)
575  {
576  KRATOS_ERROR << " Calling update from variable from time integration base class " <<std::endl;
577  }
578 
579  virtual void UpdateFromFirstDerivative(NodeType& rNode)
580  {
581  KRATOS_ERROR << " Calling update from first derivative from time integration base class " <<std::endl;
582  }
583 
585  {
586  KRATOS_ERROR << " Calling update from second derivative from time integration base class " <<std::endl;
587  }
588 
589  virtual void UpdateVariable(NodeType& rNode)
590  {
591  KRATOS_ERROR << " Calling update variable from time integration base class " <<std::endl;
592  }
593 
594  virtual void UpdateFirstDerivative(NodeType& rNode)
595  {
596  KRATOS_ERROR << " Calling update first derivative from time integration base class " <<std::endl;
597  }
598 
599  virtual void UpdateSecondDerivative(NodeType& rNode)
600  {
601  KRATOS_ERROR << " Calling update second derivative from time integration base class " <<std::endl;
602  }
603 
604 
608 
609  // get parameters for variables (RHS)
610  virtual double& GetKineticParameter(double& rParameter)
611  {
612  rParameter = 0.0;
613  return rParameter;
614  }
615 
616  virtual double& GetFirstDerivativeKineticParameter(double& rParameter)
617  {
618  rParameter = 0.0;
619  return rParameter;
620  }
621 
622  virtual double& GetSecondDerivativeKineticParameter(double& rParameter)
623  {
624  rParameter = 0.0;
625  return rParameter;
626  }
627 
628 
629  // get parameters for matrices (LHS)
630  virtual double& GetInertialParameter(double& rParameter)
631  {
632  rParameter = 1.0;
633  return rParameter;
634  }
635 
636  virtual double& GetFirstDerivativeInertialParameter(double& rParameter)
637  {
638  rParameter = 1.0;
639  return rParameter;
640  }
641 
642  virtual double& GetSecondDerivativeInertialParameter(double& rParameter)
643  {
644  rParameter = 1.0;
645  return rParameter;
646  }
647 
651 
655 
657 
658  private:
659 
662 
666 
670 
674 
678 
682  friend class Serializer;
683 
684  void save(Serializer& rSerializer) const override
685  {
687  rSerializer.save("Variable", mpVariable->Name());
688  rSerializer.save("FirstDerivative", mpFirstDerivative->Name());
689  rSerializer.save("SecondDerivative", mpSecondDerivative->Name());
690  rSerializer.save("PrimaryVariable", mpPrimaryVariable->Name());
691  rSerializer.save("InputVariable", mpInputVariable->Name());
692  };
693 
694  void load(Serializer& rSerializer) override
695  {
697  std::string Name;
698  rSerializer.load("Variable", Name);
700  rSerializer.load("FirstDerivative", Name);
702  rSerializer.load("SecondDerivative", Name);
704  rSerializer.load("PrimaryVariable", Name);
706  rSerializer.load("InputVariable", Name);
708 
709  this->SetPointerMethods();
710  this->SetPointerAssignMethod();
711  };
715 
719 
721  }; // Class TimeIntegrationMethod
722 
724 
727 
731 
732  template<class TVariableType, class TValueType>
733  inline std::istream & operator >> (std::istream & rIStream, TimeIntegrationMethod<TVariableType,TValueType>& rThis)
734  {
735  return rIStream;
736  }
737 
738  template<class TVariableType, class TValueType>
739  inline std::ostream & operator << (std::ostream & rOStream, const TimeIntegrationMethod<TVariableType,TValueType>& rThis)
740  {
741  return rOStream << rThis.Info();
742  }
743 
745 
747 
748 } // namespace Kratos.
749 
750 #endif // KRATOS_TIME_INTEGRATION_METHOD_H_INCLUDED defined
Definition: flags.h:58
Flags & operator=(Flags const &rOther)
Assignment operator.
Definition: flags.h:151
KratosComponents class encapsulates a lookup table for a family of classes in a generic way.
Definition: kratos_components.h:49
This class defines the node.
Definition: node.h:65
ProcessInfo holds the current value of different solution parameters.
Definition: process_info.h:59
The serialization consists in storing the state of an object into a storage format like data file or ...
Definition: serializer.h:123
void load(std::string const &rTag, TDataType &rObject)
Definition: serializer.h:207
void save(std::string const &rTag, std::array< TDataType, TDataSize > const &rObject)
Definition: serializer.h:545
Short class definition.
Definition: time_integration_method.hpp:55
virtual void SetProcessInfoParameters(ProcessInfo &rCurrentProcessInfo)
Definition: time_integration_method.hpp:178
TimeIntegrationMethod(const TVariableType &rVariable)
Constructor.
Definition: time_integration_method.hpp:94
void(TimeIntegrationMethod::* MethodPointer)(NodeType &rNode)
Definition: time_integration_method.hpp:69
virtual void Assign(NodeType &rNode)
Definition: time_integration_method.hpp:239
KRATOS_CLASS_POINTER_DEFINITION(TimeIntegrationMethod)
virtual void UpdateFirstDerivative(NodeType &rNode)
Definition: time_integration_method.hpp:594
~TimeIntegrationMethod() override
Destructor.
Definition: time_integration_method.hpp:155
virtual void AssignVariable(NodeType &rNode)
Definition: time_integration_method.hpp:529
VariablePointer mpVariable
Definition: time_integration_method.hpp:405
virtual void PredictFirstDerivative(NodeType &rNode)
Definition: time_integration_method.hpp:564
std::string GetPrimaryVariableName()
Definition: time_integration_method.hpp:193
virtual int Check(const ProcessInfo &rCurrentProcessInfo)
This function is designed to be called once to perform all the checks needed.
Definition: time_integration_method.hpp:272
virtual double & GetFirstDerivativeInertialParameter(double &rParameter)
Definition: time_integration_method.hpp:636
virtual void AssignSecondDerivative(NodeType &rNode)
Definition: time_integration_method.hpp:539
bool HasVariableName(const std::string &rVariableName)
Definition: time_integration_method.hpp:205
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: time_integration_method.hpp:380
virtual void AssignFirstDerivative(NodeType &rNode)
Definition: time_integration_method.hpp:534
const TValueType * ValuePointer
Definition: time_integration_method.hpp:67
TimeIntegrationMethod(const TVariableType &rVariable, const TVariableType &rFirstDerivative, const TVariableType &rSecondDerivative)
Constructor.
Definition: time_integration_method.hpp:107
MethodPointer mpUpdate
Definition: time_integration_method.hpp:427
std::string GetVariableName()
Definition: time_integration_method.hpp:199
const TVariableType * VariablePointer
KratosVariable or KratosVariableComponent.
Definition: time_integration_method.hpp:65
VariablePointer mpInputVariable
Definition: time_integration_method.hpp:418
virtual double & GetSecondDerivativeKineticParameter(double &rParameter)
Definition: time_integration_method.hpp:622
virtual double & GetKineticParameter(double &rParameter)
Definition: time_integration_method.hpp:610
virtual TimeIntegrationMethodPointer Clone()
Clone.
Definition: time_integration_method.hpp:149
virtual double & GetFirstDerivativeKineticParameter(double &rParameter)
Definition: time_integration_method.hpp:616
virtual double & GetFirstDerivativeInertialFactor(double &rParameter)
Definition: time_integration_method.hpp:323
TimeIntegrationMethod()
Default Constructor.
Definition: time_integration_method.hpp:83
virtual void AssignFromSecondDerivative(NodeType &rNode)
Definition: time_integration_method.hpp:524
MethodFactorPointer mpSecondDerivativeInertialFactor
Definition: time_integration_method.hpp:435
virtual void CalculateParameters(ProcessInfo &rCurrentProcessInfo)
Definition: time_integration_method.hpp:166
TimeIntegrationMethod(const TVariableType &rVariable, const TVariableType &rFirstDerivative, const TVariableType &rSecondDerivative, const TVariableType &rPrimaryVariable)
Constructor.
Definition: time_integration_method.hpp:120
void SetInputVariable(const TVariableType &rVariable)
Definition: time_integration_method.hpp:184
void SetFlags(Flags const &rThisFlags)
Definition: time_integration_method.hpp:351
virtual void PredictFromVariable(NodeType &rNode)
Definition: time_integration_method.hpp:544
MethodPointer mpPredict
Definition: time_integration_method.hpp:425
MethodFactorPointer mpFirstDerivativeKineticFactor
Definition: time_integration_method.hpp:431
virtual void Predict(NodeType &rNode)
Definition: time_integration_method.hpp:249
virtual bool HasStepVariable()
Definition: time_integration_method.hpp:227
void SetPointerAssignMethod()
Definition: time_integration_method.hpp:491
Flags const & GetFlags() const
Definition: time_integration_method.hpp:346
virtual double & GetInertialParameter(double &rParameter)
Definition: time_integration_method.hpp:630
void SetPointerMethods()
Definition: time_integration_method.hpp:446
virtual void PredictVariable(NodeType &rNode)
Definition: time_integration_method.hpp:559
virtual void SetStepVariable(const TVariableType &rStepVariable)
Definition: time_integration_method.hpp:233
virtual void AssignFromFirstDerivative(NodeType &rNode)
Definition: time_integration_method.hpp:519
Flags & GetFlags()
Definition: time_integration_method.hpp:341
virtual double & GetSecondDerivativeInertialParameter(double &rParameter)
Definition: time_integration_method.hpp:642
MethodPointer mpAssign
Definition: time_integration_method.hpp:423
TimeIntegrationMethod(TimeIntegrationMethod &rOther)
Copy Constructor.
Definition: time_integration_method.hpp:138
virtual double & GetSecondDerivativeInertialFactor(double &rParameter)
Definition: time_integration_method.hpp:330
virtual void UpdateFromFirstDerivative(NodeType &rNode)
Definition: time_integration_method.hpp:579
MethodFactorPointer mpFirstDerivativeInertialFactor
Definition: time_integration_method.hpp:434
VariablePointer mpFirstDerivative
Definition: time_integration_method.hpp:407
virtual void UpdateFromVariable(NodeType &rNode)
Definition: time_integration_method.hpp:574
double &(TimeIntegrationMethod::* MethodFactorPointer)(double &rParameter)
Definition: time_integration_method.hpp:71
virtual void AssignFromVariable(NodeType &rNode)
Definition: time_integration_method.hpp:514
VariablePointer mpPrimaryVariable
Definition: time_integration_method.hpp:413
virtual void PredictFromFirstDerivative(NodeType &rNode)
Definition: time_integration_method.hpp:549
virtual double & GetFirstDerivativeKineticFactor(double &rParameter)
Definition: time_integration_method.hpp:307
virtual void Update(NodeType &rNode)
Definition: time_integration_method.hpp:259
TimeIntegrationMethod::Pointer TimeIntegrationMethodPointer
Definition: time_integration_method.hpp:75
VariablePointer mpSecondDerivative
Definition: time_integration_method.hpp:409
virtual void UpdateVariable(NodeType &rNode)
Definition: time_integration_method.hpp:589
virtual void PredictSecondDerivative(NodeType &rNode)
Definition: time_integration_method.hpp:569
virtual void UpdateSecondDerivative(NodeType &rNode)
Definition: time_integration_method.hpp:599
std::string Info() const override
Turn back information as a string.
Definition: time_integration_method.hpp:366
virtual void UpdateFromSecondDerivative(NodeType &rNode)
Definition: time_integration_method.hpp:584
virtual void SetParameters(const ProcessInfo &rCurrentProcessInfo)
Definition: time_integration_method.hpp:172
virtual double & GetSecondDerivativeKineticFactor(double &rParameter)
Definition: time_integration_method.hpp:314
Node NodeType
NodeType.
Definition: time_integration_method.hpp:62
MethodFactorPointer mpSecondDerivativeKineticFactor
Definition: time_integration_method.hpp:432
virtual void PredictFromSecondDerivative(NodeType &rNode)
Definition: time_integration_method.hpp:554
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: time_integration_method.hpp:374
#define KRATOS_SERIALIZE_SAVE_BASE_CLASS(Serializer, BaseType)
Definition: define.h:812
#define KRATOS_CATCH(MoreInfo)
Definition: define.h:110
#define KRATOS_TRY
Definition: define.h:109
#define KRATOS_SERIALIZE_LOAD_BASE_CLASS(Serializer, BaseType)
Definition: define.h:815
#define KRATOS_ERROR
Definition: exception.h:161
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
std::istream & operator>>(std::istream &rIStream, LinearMasterSlaveConstraint &rThis)
input stream function
std::ostream & operator<<(std::ostream &rOStream, const LinearMasterSlaveConstraint &rThis)
output stream function
Definition: linear_master_slave_constraint.h:432
def load(f)
Definition: ode_solve.py:307