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.
spalart_allmaras_turbulence_model.h
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: Jordi Cotela
11 // Riccardo Rossi
12 //
13 
14 
15 #if !defined(KRATOS_SPALART_ALLMARAS_TURBULENCE_H_INCLUDED )
16 #define KRATOS_SPALART_ALLMARAS_TURBULENCE_H_INCLUDED
17 
18 
19 
20 // System includes
21 #include <string>
22 #include <iostream>
23 
24 
25 // External includes
26 
27 
28 // Project includes
29 #include "includes/define.h"
30 #include "containers/model.h"
31 #include "processes/process.h"
32 #include "includes/cfd_variables.h"
34 //#include "solving_strategies/strategies/residualbased_linear_strategy.h"
36 // #include "solving_strategies/schemes/residualbased_incrementalupdate_static_scheme.h"
40 
41 // Application includes
44 
45 namespace Kratos
46 {
49 
52 
56 
60 
64 
68 
70 
72 template<class TSparseSpace,
73  class TDenseSpace,
74  class TLinearSolver
75  >
77 {
78 public:
81 
84 
88 
90 
100  ModelPart& rModelPart,
101  typename TLinearSolver::Pointer pLinearSolver,
102  unsigned int DomainSize,
103  double NonLinearTol,
104  unsigned int MaxIter,
105  bool ReformDofSet,
106  unsigned int TimeOrder)
107  : mr_model_part(rModelPart),
108  mrSpalartModelPart(rModelPart.GetModel().CreateModelPart("SpalartModelPart")),
109  mdomain_size(DomainSize),
110  mtol(NonLinearTol),
111  mmax_it(MaxIter),
112  mtime_order(TimeOrder),
114  {
115  //************************************************************************************************
116  //check that the variables needed are in the model part
117  if (!(rModelPart.NodesBegin()->SolutionStepsDataHas(DISTANCE)))
118  KRATOS_THROW_ERROR(std::logic_error, "Variable is not in the model part:", DISTANCE);
119  if (!(rModelPart.NodesBegin()->SolutionStepsDataHas(VELOCITY)))
120  KRATOS_THROW_ERROR(std::logic_error, "Variable is not in the model part:", VELOCITY);
121  if (!(rModelPart.NodesBegin()->SolutionStepsDataHas(MOLECULAR_VISCOSITY)))
122  KRATOS_THROW_ERROR(std::logic_error, "Variable is not in the model part:", MOLECULAR_VISCOSITY);
123  if (!(rModelPart.NodesBegin()->SolutionStepsDataHas(TURBULENT_VISCOSITY)))
124  KRATOS_THROW_ERROR(std::logic_error, "Variable is not in the model part:", TURBULENT_VISCOSITY);
125  if (!(rModelPart.NodesBegin()->SolutionStepsDataHas(MESH_VELOCITY)))
126  KRATOS_THROW_ERROR(std::logic_error, "Variable is not in the model part:", MESH_VELOCITY);
127  if (!(rModelPart.NodesBegin()->SolutionStepsDataHas(VISCOSITY)))
128  KRATOS_THROW_ERROR(std::logic_error, "Variable is not in the model part:", VISCOSITY);
129  if (!(rModelPart.NodesBegin()->SolutionStepsDataHas(NODAL_AREA)))
130  KRATOS_THROW_ERROR(std::logic_error, "Variable is not in the model part:", NODAL_AREA);
131  if (!(rModelPart.NodesBegin()->SolutionStepsDataHas(TEMP_CONV_PROJ)))
132  KRATOS_THROW_ERROR(std::logic_error, "Variable is not in the model part:", TEMP_CONV_PROJ);
133 
134  if (mr_model_part.GetBufferSize() < 3)
135  KRATOS_THROW_ERROR(std::logic_error, "insufficient buffer size for BDF2, currently buffer size is ", mr_model_part.GetBufferSize());
136 
137  //************************************************************************************************
138  //construct a new auxiliary model part
144 
145  std::string ElementName;
146  if (DomainSize == 2)
147  ElementName = std::string("SpalartAllmaras2D");
148  else
149  ElementName = std::string("SpalartAllmaras3D");
150 
151  const Element& rReferenceElement = KratosComponents<Element>::Get(ElementName);
152 
153  //generating the elements
154  for (ModelPart::ElementsContainerType::iterator iii = mr_model_part.ElementsBegin(); iii != mr_model_part.ElementsEnd(); iii++)
155  {
156  Properties::Pointer properties = iii->pGetProperties();
157  Element::Pointer p_element = rReferenceElement.Create(iii->Id(), iii->GetGeometry(), properties);
158  mrSpalartModelPart.Elements().push_back(p_element);
159  }
160 
161  // pointer types for the solution strategy construcion
162  typedef typename Scheme< TSparseSpace, TDenseSpace >::Pointer SchemePointerType;
163  typedef typename ConvergenceCriteria< TSparseSpace, TDenseSpace >::Pointer ConvergenceCriteriaPointerType;
164  typedef typename BuilderAndSolver<TSparseSpace, TDenseSpace, TLinearSolver>::Pointer BuilderSolverTypePointer;
166 
167  // Solution scheme: Aitken iterations
168  const double DefaultAitkenOmega = 1.0;
169  SchemePointerType pScheme = SchemePointerType( new ResidualBasedIncrementalAitkenStaticScheme< TSparseSpace, TDenseSpace > (DefaultAitkenOmega) );
170 // SchemePointerType pScheme = SchemePointerType( new ResidualBasedIncrementalUpdateStaticScheme< TSparseSpace, TDenseSpace > () );
171 
172  // Convergence criteria
173  const double NearlyZero = 1.0e-20;
174  ConvergenceCriteriaPointerType pConvCriteria = ConvergenceCriteriaPointerType( new ResidualCriteria<TSparseSpace,TDenseSpace>(NonLinearTol,NearlyZero) );
175 
176  // Builder and solver
177  BuilderSolverTypePointer pBuildAndSolver = BuilderSolverTypePointer(new ResidualBasedEliminationBuilderAndSolverComponentwise<TSparseSpace, TDenseSpace, TLinearSolver, Variable<double> > (pLinearSolver, TURBULENT_VISCOSITY));
178 
179  // Strategy
180  bool CalculateReactions = false;
181  bool MoveMesh = false;
182 
183  mpSolutionStrategy = StrategyPointerType( new ResidualBasedNewtonRaphsonStrategy<TSparseSpace, TDenseSpace, TLinearSolver>(mrSpalartModelPart,pScheme,pConvCriteria,pBuildAndSolver,MaxIter,CalculateReactions,ReformDofSet,MoveMesh));
184  mpSolutionStrategy->SetEchoLevel(0);
185  mpSolutionStrategy->Check();
186  }
187 
189 
191  {
192  Model& r_model = mrSpalartModelPart.GetModel();
193  r_model.DeleteModelPart("SpalartModelPart");
194  }
195 
196 
200 
201 
205 
207  void Execute() override
208  {
209  KRATOS_TRY
210 
211  if(madapt_for_fractional_step == true)
212  {
213  if (!(mrSpalartModelPart.NodesBegin()->SolutionStepsDataHas(FRACT_VEL)))
214  KRATOS_THROW_ERROR(std::logic_error, "Variable is not in the model part:", FRACT_VEL);
215 
216  #pragma omp parallel for
217  for (int i = 0; i < static_cast<int>(mrSpalartModelPart.Nodes().size()); i++)
218  {
219  ModelPart::NodesContainerType::iterator it = mrSpalartModelPart.NodesBegin() + i;
220  it->FastGetSolutionStepValue(VELOCITY) = it->FastGetSolutionStepValue(FRACT_VEL);
221  }
222  }
223 
224  AuxSolve();
225 
226  //update viscosity on the nodes
228  i != mrSpalartModelPart.NodesEnd(); ++i)
229  {
230  double molecular_viscosity = i->FastGetSolutionStepValue(MOLECULAR_VISCOSITY);
231  double turbulent_viscosity = i->FastGetSolutionStepValue(TURBULENT_VISCOSITY);
232 
233  if(turbulent_viscosity < 0)
234  {
235  i->FastGetSolutionStepValue(TURBULENT_VISCOSITY) = 1e-9;
236  i->FastGetSolutionStepValue(VISCOSITY) = molecular_viscosity;
237  }
238  else
239  {
240  const double cv1_3 = 7.1*7.1*7.1;
241 
242  double xi = turbulent_viscosity / molecular_viscosity;
243  double xi_3 = xi*xi*xi;
244  double fv1 = xi_3 / (xi_3 + cv1_3);
245 
246  double viscosity = fv1 * turbulent_viscosity + molecular_viscosity;
247  i->FastGetSolutionStepValue(VISCOSITY) = viscosity;
248  }
249  }
250 
251  KRATOS_CATCH("");
252  }
253 
254  void SetMaxIterations(unsigned int max_it)
255  {
256  KRATOS_TRY
257 
258  mmax_it = max_it;
259 
260  KRATOS_CATCH("");
261  }
262 
264  {
265  KRATOS_TRY
266 
268 
269  KRATOS_CATCH("");
270  }
271 
272  void ActivateDES(double CDES)
273  {
274  KRATOS_TRY;
275 
276  mrSpalartModelPart.GetProcessInfo()[C_DES] = CDES;
277 /*
278  //update viscosity on the nodes
279  for (ModelPart::NodeIterator i = mrSpalartModelPart.NodesBegin();
280  i != mrSpalartModelPart.NodesEnd(); ++i)
281  {
282  double distance = i->FastGetSolutionStepValue(DISTANCE);
283  const array_1d<double,3>& xc = i->Coordinates();
284 
285  double h_max = 0.0;
286 
287  //compute nodal h (by max edge size)
288  GlobalPointersVector<Node >& neigbours = i->GetValue(NEIGHBOUR_NODES);
289  for(GlobalPointersVector<Node >::iterator ineighb=neigbours.begin(); ineighb!=neigbours.end(); ineighb++)
290  {
291  array_1d<double,3> aux = ineighb->Coordinates();
292  aux -= xc;
293 
294  double h = norm_2(aux);
295 
296  if(h > h_max) h_max=h;
297  }
298 
299  if(h_max == 0.0)
300  KRATOS_THROW_ERROR(std::logic_error,"unexpected isolated node. Wrong node has Id ",i->Id());
301 
302  if(distance > h_max*CDES)
303  i->FastGetSolutionStepValue(DISTANCE) = h_max*CDES;
304 
305  }*/
306 
307  KRATOS_CATCH("");
308  }
309 
310 
314 
315 
319 
320 
324 
326 
327  std::string Info() const override
328  {
329  std::stringstream buffer;
330  buffer << "SpalartAllmarasTurbulenceModel";
331  return buffer.str();
332  }
333 
335 
336  void PrintInfo(std::ostream& rOStream) const override
337  {
338  rOStream << "SpalartAllmarasTurbulenceModel";
339  }
340 
342 
343  void PrintData(std::ostream& rOStream) const override
344  {
345  }
346 
347 
351 
352 
354 
355 protected:
358 
359 
363 
366  unsigned int mdomain_size;
367  double mtol;
368  unsigned int mmax_it;
369  unsigned int mtime_order;
372 
376 
377 
381 
382 
386 
387 
391 
392 
396 
399  :
400  Process(),
401  mr_model_part(rModelPart),
402  mrSpalartModelPart(rModelPart.GetModel().CreateModelPart("SpalartModelPart"))
403  {}
404 
406 
407 private:
410 
411 
415 
416 
420 
424 
425  //*********************************************************************************
426  //**********************************************************************
427 
428  /*double*/
429  void AuxSolve()
430  {
431  KRATOS_TRY
432 
433  //calculate the BDF coefficients
434  ProcessInfo& rCurrentProcessInfo = mrSpalartModelPart.GetProcessInfo();
435  double Dt = rCurrentProcessInfo[DELTA_TIME];
436 
437  if (mtime_order == 2)
438  {
439  double dt_old = rCurrentProcessInfo.GetPreviousTimeStepInfo(1)[DELTA_TIME];
440 
441  double rho = dt_old / Dt;
442  double coeff = 1.0 / (Dt * rho * rho + Dt * rho);
443 
444  Vector& BDFcoeffs = rCurrentProcessInfo[BDF_COEFFICIENTS];
445  BDFcoeffs.resize(3);
446  BDFcoeffs[0] = coeff * (rho * rho + 2.0 * rho); //coefficient for step n+1
447  BDFcoeffs[1] = -coeff * (rho * rho + 2.0 * rho + 1.0); //coefficient for step n
448  BDFcoeffs[2] = coeff;
449  }
450  else
451  {
452  Vector& BDFcoeffs = rCurrentProcessInfo[BDF_COEFFICIENTS];
453  BDFcoeffs.resize(2);
454  BDFcoeffs[0] = 1.0 / Dt; //coefficient for step n+1
455  BDFcoeffs[1] = -1.0 / Dt; //coefficient for step n
456  }
457 
458 
459 
460 // unsigned int iter = 0;
461 // double ratio;
462 // bool is_converged = false;
463 // double dT_norm = 0.0;
464 // double T_norm = 0.0;
465 
466  int current_fract_step = rCurrentProcessInfo[FRACTIONAL_STEP];
467  rCurrentProcessInfo[FRACTIONAL_STEP] = 2;
468 
469  CalculateProjection();
470 
471  rCurrentProcessInfo[FRACTIONAL_STEP] = 1;
472  mpSolutionStrategy->Solve();
473 
474  rCurrentProcessInfo[FRACTIONAL_STEP] = current_fract_step;
475 
476 // while (iter++ < mmax_it && is_converged == false)
477 // {
478 // rCurrentProcessInfo[FRACTIONAL_STEP] = 1;
479 // dT_norm = mpSolutionStrategy->Solve();
480 // T_norm = CalculateVarNorm();
481 // CalculateProjection();
484 
485 // ratio = 1.00;
486 // if (T_norm != 0.00)
487 // ratio = dT_norm / T_norm;
488 // else
489 // {
490 // std::cout << "Nu norm = " << T_norm << " dNu_norm = " << dT_norm << std::endl;
491 // }
492 
493 // if (dT_norm < 1e-11)
494 // ratio = 0; //converged
495 
496 
497 // if (ratio < mtol)
498 // is_converged = true;
499 
500 // std::cout << " SA iter = " << iter << " ratio = " << ratio << std::endl;
501 
502 // }
503 
504 // return dT_norm;
505  KRATOS_CATCH("")
506  }
507 
508 
509  //******************************************************************************************************
510  //******************************************************************************************************
512 
513  double CalculateVarNorm()
514  {
515  KRATOS_TRY;
516 
517  double norm = 0.00;
518 
519 
520 
522  i != mrSpalartModelPart.NodesEnd(); ++i)
523  {
524  norm += pow(i->FastGetSolutionStepValue(TURBULENT_VISCOSITY), 2);
525  }
526 
527  return sqrt(norm);
528 
529  KRATOS_CATCH("")
530  }
531 
533 
534  void CalculateProjection()
535  {
536  KRATOS_TRY;
537 
538  const ProcessInfo& rCurrentProcessInfo = mrSpalartModelPart.GetProcessInfo();
539 
540  //first of all set to zero the nodal variables to be updated nodally
542  i != mrSpalartModelPart.NodesEnd(); ++i)
543  {
544  (i)->FastGetSolutionStepValue(TEMP_CONV_PROJ) = 0.00;
545  (i)->FastGetSolutionStepValue(NODAL_AREA) = 0.00;
546  }
547 
548  //add the elemental contributions for the calculation of the velocity
549  //and the determination of the nodal area
550 
551 
554  {
555  (i)->InitializeSolutionStep(rCurrentProcessInfo);
556  }
557 
558  Communicator& rComm = mrSpalartModelPart.GetCommunicator();
559 
560  rComm.AssembleCurrentData(NODAL_AREA);
561  rComm.AssembleCurrentData(TEMP_CONV_PROJ);
562 
563  // Obtain nodal projection of the residual
565  i != mrSpalartModelPart.NodesEnd(); ++i)
566  {
567  const double NodalArea = i->FastGetSolutionStepValue(NODAL_AREA);
568  if(NodalArea > 0.0)
569  {
570  double& rConvProj = i->FastGetSolutionStepValue(TEMP_CONV_PROJ);
571  rConvProj /= NodalArea;
572  }
573  }
574 
575  KRATOS_CATCH("")
576  }
577 
578 
582 
583 
587 
588 
592 
594 
596  {
597  return *this;
598  }
599 
601 
604  {
605  }
606 
607 
609 
610 }; // Class SpalartAllmarasTurbulenceModel
611 
613 
616 
617 
621 
622 
624 
625 template<class TSparseSpace,
626  class TDenseSpace,
627  class TLinearSolver
628  >
629 inline std::istream & operator >>(std::istream& rIStream,
631 {
632  return rIStream;
633 }
634 
636 
637 template<class TSparseSpace,
638  class TDenseSpace,
639  class TLinearSolver
640  >
641 inline std::ostream & operator <<(std::ostream& rOStream,
643 {
644  rThis.PrintInfo(rOStream);
645  rOStream << std::endl;
646  rThis.PrintData(rOStream);
647 
648  return rOStream;
649 }
651 
653 
654 } // namespace Kratos.
655 
656 #endif // KRATOS_SPALART_ALLMARAS_TURBULENCE_H_INCLUDED defined
657 
658 
Current class provides an implementation for the base builder and solving operations.
Definition: builder_and_solver.h:64
virtual bool AssembleCurrentData(Variable< int > const &ThisVariable)
Definition: communicator.cpp:502
This is the base class to define the different convergence criterion considered.
Definition: convergence_criteria.h:58
Base class for all Elements.
Definition: element.h:60
virtual Pointer Create(IndexType NewId, NodesArrayType const &ThisNodes, PropertiesType::Pointer pProperties) const
It creates a new element pointer.
Definition: element.h:202
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 resize(std::size_t NewSize1, std::size_t NewSize2, bool preserve=0)
Definition: amatrix_interface.h:224
static const TComponentType & Get(const std::string &rName)
Retrieves a component with the specified name.
Definition: kratos_components.h:114
This class aims to manage different model parts across multi-physics simulations.
Definition: model.h:60
void DeleteModelPart(const std::string &ModelPartName)
This method deletes a modelpart with a given name.
Definition: model.cpp:64
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
void SetProcessInfo(ProcessInfo::Pointer pNewProcessInfo)
Definition: model_part.h:1766
void SetProperties(PropertiesContainerType::Pointer pOtherProperties, IndexType ThisIndex=0)
Definition: model_part.h:1013
ProcessInfo::Pointer pGetProcessInfo()
Definition: model_part.h:1756
Communicator & GetCommunicator()
Definition: model_part.h:1821
void SetBufferSize(IndexType NewBufferSize)
This method sets the suffer size of the model part database.
Definition: model_part.cpp:2171
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
ProcessInfo & GetProcessInfo()
Definition: model_part.h:1746
MeshType::NodeIterator NodeIterator
Definition: model_part.h:134
ElementsContainerType & Elements(IndexType ThisIndex=0)
Definition: model_part.h:1189
PropertiesContainerType::Pointer pProperties(IndexType ThisIndex=0)
Definition: model_part.h:1008
ElementIterator ElementsEnd(IndexType ThisIndex=0)
Definition: model_part.h:1179
MeshType::ElementIterator ElementIterator
Definition: model_part.h:174
NodeIterator NodesEnd(IndexType ThisIndex=0)
Definition: model_part.h:497
NodesContainerType & Nodes(IndexType ThisIndex=0)
Definition: model_part.h:507
Model & GetModel()
Definition: model_part.h:323
VariablesList & GetNodalSolutionStepVariablesList()
Definition: model_part.h:549
The base class for all processes in Kratos.
Definition: process.h:49
ProcessInfo holds the current value of different solution parameters.
Definition: process_info.h:59
Definition: residualbased_elimination_builder_and_solver_componentwise.h:95
A scheme for the solution of a problem using Aitken iterations.
Definition: residualbased_incremental_aitken_static_scheme.h:55
This is the base Newton Raphson strategy.
Definition: residualbased_newton_raphson_strategy.h:66
This is a convergence criteria that considers the residual as criteria.
Definition: residual_criteria.h:60
This class provides the implementation of the basic tasks that are needed by the solution strategy.
Definition: scheme.h:56
An impelementation of the Spalart-Allmaras turbulence model for incompressible flows.
Definition: spalart_allmaras_turbulence_model.h:77
std::string Info() const override
Turn back information as a string.
Definition: spalart_allmaras_turbulence_model.h:327
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: spalart_allmaras_turbulence_model.h:336
unsigned int mdomain_size
Definition: spalart_allmaras_turbulence_model.h:366
double mtol
Definition: spalart_allmaras_turbulence_model.h:367
unsigned int mmax_it
Definition: spalart_allmaras_turbulence_model.h:368
SpalartAllmarasTurbulenceModel(ModelPart &rModelPart)
Protected constructor, initializing only the references (for derived classes)
Definition: spalart_allmaras_turbulence_model.h:398
void SetMaxIterations(unsigned int max_it)
Definition: spalart_allmaras_turbulence_model.h:254
void ActivateDES(double CDES)
Definition: spalart_allmaras_turbulence_model.h:272
void Execute() override
Solve an iteration of the turbulent viscosity.
Definition: spalart_allmaras_turbulence_model.h:207
SpalartAllmarasTurbulenceModel(ModelPart &rModelPart, typename TLinearSolver::Pointer pLinearSolver, unsigned int DomainSize, double NonLinearTol, unsigned int MaxIter, bool ReformDofSet, unsigned int TimeOrder)
Constructor for the Spalart-Allmaras turbulence model.
Definition: spalart_allmaras_turbulence_model.h:99
~SpalartAllmarasTurbulenceModel() override
Destructor.
Definition: spalart_allmaras_turbulence_model.h:190
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: spalart_allmaras_turbulence_model.h:343
void AdaptForFractionalStep()
Definition: spalart_allmaras_turbulence_model.h:263
bool madapt_for_fractional_step
Definition: spalart_allmaras_turbulence_model.h:370
ModelPart & mrSpalartModelPart
Definition: spalart_allmaras_turbulence_model.h:365
unsigned int mtime_order
Definition: spalart_allmaras_turbulence_model.h:369
KRATOS_CLASS_POINTER_DEFINITION(SpalartAllmarasTurbulenceModel)
Pointer definition of SpalartAllmarasTurbulenceModel.
ImplicitSolvingStrategy< TSparseSpace, TDenseSpace, TLinearSolver >::Pointer mpSolutionStrategy
Definition: spalart_allmaras_turbulence_model.h:371
ModelPart & mr_model_part
Definition: spalart_allmaras_turbulence_model.h:364
#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
void InitializeSolutionStep(ConstructionUtility &rThisUtil, std::string ThermalSubModelPartName, std::string MechanicalSubModelPartName, std::string HeatFluxSubModelPartName, std::string HydraulicPressureSubModelPartName, bool thermal_conditions, bool mechanical_conditions, int phase)
Definition: add_custom_utilities_to_python.cpp:45
void MoveMesh(Scheme< SparseSpaceType, LocalSpaceType > &dummy, ModelPart::NodesContainerType &rNodes)
Definition: add_strategies_to_python.cpp:175
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
Internals::Matrix< double, AMatrix::dynamic, 1 > Vector
Definition: amatrix_interface.h:472
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
list coeff
Definition: bombardelli_test.py:41
ProcessInfo
Definition: edgebased_PureConvection.py:116
float viscosity
Definition: edgebased_var.py:8
Dt
Definition: face_heat.py:78
rho
Definition: generate_droplet_dynamics.py:86
integer i
Definition: TensorModule.f:17
def CreateModelPart(model_part)
Definition: test_utilities.py:61
e
Definition: run_cpp_mpi_tests.py:31