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.
wall_condition.h
Go to the documentation of this file.
1 /*
2 ==============================================================================
3 Kratos Fluid Dynamics Application
4 Kratos
5 A General Purpose Software for Multi-Physics Finite Element Analysis
6 Version 1.0 (Released on march 05, 2007).
7 
8 Copyright 2007
9 Pooyan Dadvand, Riccardo Rossi
10 pooyan@cimne.upc.edu
11 rrossi@cimne.upc.edu
12 CIMNE (International Center for Numerical Methods in Engineering),
13 Gran Capita' s/n, 08034 Barcelona, Spain
14 
15 Permission is hereby granted, free of charge, to any person obtaining
16 a copy of this software and associated documentation files (the
17 "Software"), to deal in the Software without restriction, including
18 without limitation the rights to use, copy, modify, merge, publish,
19 distribute, sublicense and/or sell copies of the Software, and to
20 permit persons to whom the Software is furnished to do so, subject to
21 the following condition:
22 
23 Distribution of this code for any commercial purpose is permissible
24 ONLY BY DIRECT ARRANGEMENT WITH THE COPYRIGHT OWNER.
25 
26 The above copyright notice and this permission notice shall be
27 included in all copies or substantial portions of the Software.
28 
29 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
30 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
31 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
32 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
33 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
34 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
35 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
36 
37 ==============================================================================
38  */
39 
40 #ifndef KRATOS_WALL_CONDITION_H
41 #define KRATOS_WALL_CONDITION_H
42 
43 // System includes
44 #include <string>
45 #include <iostream>
46 
47 #include "includes/kratos_flags.h"
49 
50 // External includes
51 
52 
53 // Project includes
54 #include "includes/define.h"
55 #include "includes/serializer.h"
56 #include "includes/condition.h"
57 #include "includes/process_info.h"
58 #include "includes/cfd_variables.h"
59 
60 // Application includes
62 
63 namespace Kratos
64 {
67 
70 
74 
78 
82 
86 
88 
96  template< unsigned int TDim, unsigned int TNumNodes = TDim >
97  class WallCondition : public Condition
98  {
99  public:
102 
105 
106  typedef Node NodeType;
107 
109 
111 
113 
115 
117 
118  typedef std::size_t IndexType;
119 
120  typedef std::size_t SizeType;
121 
122  typedef std::vector<std::size_t> EquationIdVectorType;
123 
124  typedef std::vector< Dof<double>::Pointer > DofsVectorType;
125 
127 
131 
133 
137  Condition(NewId)
138  {
139  }
140 
142 
147  const NodesArrayType& ThisNodes):
148  Condition(NewId,ThisNodes)
149  {
150  }
151 
153 
158  GeometryType::Pointer pGeometry):
159  Condition(NewId,pGeometry)
160  {
161  }
162 
164 
170  GeometryType::Pointer pGeometry,
171  PropertiesType::Pointer pProperties):
172  Condition(NewId,pGeometry,pProperties)
173  {
174  }
175 
177  WallCondition(WallCondition const& rOther):
178  Condition(rOther)
179  {
180  }
181 
183  ~WallCondition() override{}
184 
185 
189 
192  {
193  Condition::operator=(rOther);
194 
195  return *this;
196  }
197 
201 
203 
208  Condition::Pointer Create(IndexType NewId, NodesArrayType const& ThisNodes, PropertiesType::Pointer pProperties) const override
209  {
210  return Kratos::make_intrusive<WallCondition>(NewId, GetGeometry().Create(ThisNodes), pProperties);
211  }
212 
213 
214  Condition::Pointer Create(IndexType NewId, Condition::GeometryType::Pointer pGeom, PropertiesType::Pointer pProperties) const override
215  {
216  return Kratos::make_intrusive<WallCondition>(NewId, pGeom, pProperties);
217  }
218 
227  Condition::Pointer Clone(IndexType NewId, NodesArrayType const& rThisNodes) const override
228  {
229  Condition::Pointer pNewCondition = Create(NewId, GetGeometry().Create( rThisNodes ), pGetProperties() );
230 
231  pNewCondition->SetData(this->GetData());
232  pNewCondition->SetFlags(this->GetFlags());
233 
234  return pNewCondition;
235  }
236 
237 
238  void CalculateLeftHandSide(MatrixType& rLeftHandSideMatrix,
239  const ProcessInfo& rCurrentProcessInfo) override
240  {
241  VectorType RHS;
242  this->CalculateLocalSystem(rLeftHandSideMatrix,RHS,rCurrentProcessInfo);
243  }
244 
245 
246 
248 
253  void CalculateLocalSystem(MatrixType& rLeftHandSideMatrix,
254  VectorType& rRightHandSideVector,
255  const ProcessInfo& rCurrentProcessInfo) override
256  {
257  const ProcessInfo& r_process_info = rCurrentProcessInfo;
258  unsigned int step = r_process_info[FRACTIONAL_STEP];
259  if ( step == 1)
260  {
261  // Initialize local contributions
262  const SizeType LocalSize = TDim * TNumNodes;
263 
264  if (rLeftHandSideMatrix.size1() != LocalSize)
265  rLeftHandSideMatrix.resize(LocalSize,LocalSize,false);
266  if (rRightHandSideVector.size() != LocalSize)
267  rRightHandSideVector.resize(LocalSize,false);
268 
269  noalias(rLeftHandSideMatrix) = ZeroMatrix(LocalSize,LocalSize);
270  noalias(rRightHandSideVector) = ZeroVector(LocalSize);
271 
272  this->ApplyNeumannCondition(rLeftHandSideMatrix,rRightHandSideVector);
273 
274  this->ApplyWallLaw(rLeftHandSideMatrix,rRightHandSideVector);
275  }
276  else
277  {
278  if(this->Is(INTERFACE) && step==5 )
279  {
280  //add here a mass matrix in the form Dt/rho_equivalent_structure to the lhs alone
281  const double N = 1.0 / static_cast<double>(TNumNodes);
282  array_1d<double,3> rNormal;
283  this->CalculateNormal(rNormal); //this already contains the area
284  const double Area = norm_2(rNormal);
285 
286  if (rLeftHandSideMatrix.size1() != TNumNodes)
287  rLeftHandSideMatrix.resize(TNumNodes,TNumNodes,false);
288  if (rRightHandSideVector.size() != TNumNodes)
289  rRightHandSideVector.resize(TNumNodes,false);
290 
291  noalias(rLeftHandSideMatrix) = ZeroMatrix(TNumNodes,TNumNodes);
292  noalias(rRightHandSideVector) = ZeroVector(TNumNodes);
293 
294  const double dt = r_process_info[DELTA_TIME];
295  const double equivalent_structural_density = r_process_info[DENSITY];
296  const double diag_term = dt*Area*N/( equivalent_structural_density );
297 
298  for (unsigned int iNode = 0; iNode < TNumNodes; ++iNode)
299  {
300  rLeftHandSideMatrix(iNode,iNode) = diag_term;
301  }
302  }
303  else
304  {
305  if (rLeftHandSideMatrix.size1() != 0)
306  rLeftHandSideMatrix.resize(0,0,false);
307 
308  if (rRightHandSideVector.size() != 0)
309  rRightHandSideVector.resize(0,false);
310  }
311  }
312  }
313 
314 
316  int Check(const ProcessInfo& rCurrentProcessInfo) const override
317  {
318  KRATOS_TRY;
319 
320  int Check = Condition::Check(rCurrentProcessInfo); // Checks id > 0 and area > 0
321 
322  if (Check != 0)
323  {
324  return Check;
325  }
326  else
327  {
328  // Checks on nodes
329  // Check that the element's nodes contain all required SolutionStepData and Degrees of freedom
330  for(unsigned int i=0; i<this->GetGeometry().size(); ++i)
331  {
332 
333  if(this->GetGeometry()[i].SolutionStepsDataHas(VELOCITY) == false)
334  KRATOS_THROW_ERROR(std::invalid_argument,"missing VELOCITY variable on solution step data for node ",this->GetGeometry()[i].Id());
335  if(this->GetGeometry()[i].SolutionStepsDataHas(MESH_VELOCITY) == false)
336  KRATOS_THROW_ERROR(std::invalid_argument,"missing MESH_VELOCITY variable on solution step data for node ",this->GetGeometry()[i].Id());
337  if(this->GetGeometry()[i].SolutionStepsDataHas(NORMAL) == false)
338  KRATOS_THROW_ERROR(std::invalid_argument,"missing NORMAL variable on solution step data for node ",this->GetGeometry()[i].Id());
339  if(this->GetGeometry()[i].HasDofFor(VELOCITY_X) == false ||
340  this->GetGeometry()[i].HasDofFor(VELOCITY_Y) == false ||
341  this->GetGeometry()[i].HasDofFor(VELOCITY_Z) == false)
342  KRATOS_THROW_ERROR(std::invalid_argument,"missing VELOCITY component degree of freedom on node ",this->GetGeometry()[i].Id());
343  }
344 
345  return Check;
346  }
347 
348  KRATOS_CATCH("");
349  }
350 
351 
353 
357  void EquationIdVector(EquationIdVectorType& rResult,
358  const ProcessInfo& rCurrentProcessInfo) const override;
359 
360 
362 
366  void GetDofList(DofsVectorType& ConditionDofList,
367  const ProcessInfo& CurrentProcessInfo) const override;
368 
369 
371 
375  void GetValuesVector(Vector& Values,
376  int Step = 0) const override
377  {
378  const SizeType LocalSize = TDim * TNumNodes;
379  unsigned int LocalIndex = 0;
380 
381  if (Values.size() != LocalSize)
382  Values.resize(LocalSize, false);
383 
384  for (unsigned int iNode = 0; iNode < TNumNodes; ++iNode)
385  {
386  const array_1d<double,3>& rVelocity = this->GetGeometry()[iNode].FastGetSolutionStepValue(VELOCITY, Step);
387  for (unsigned int d = 0; d < TDim; ++d)
388  Values[LocalIndex++] = rVelocity[d];
389  }
390  }
391 
392 
393 // /// Returns ACCELERATION_X, ACCELERATION_Y, (ACCELERATION_Z,) 0 for each node
394 // /**
395 // * @param Values Vector of nodal second derivatives
396 // * @param Step Get result from 'Step' steps back, 0 is current step. (Must be smaller than buffer size)
397 // */
398 // virtual void GetSecondDerivativesVector(Vector& Values,
399 // int Step = 0)
400 // {
401 // const SizeType LocalSize = (TDim + 1) * TNumNodes;
402 // unsigned int LocalIndex = 0;
403 
404 // if (Values.size() != LocalSize)
405 // Values.resize(LocalSize, false);
406 
407 // for (unsigned int iNode = 0; iNode < TNumNodes; ++iNode)
408 // {
409 // array_1d<double,3>& rVelocity = this->GetGeometry()[iNode].FastGetSolutionStepValue(ACCELERATION, Step);
410 // for (unsigned int d = 0; d < TDim; ++d)
411 // Values[LocalIndex++] = rVelocity[d];
412 // }
413 // }
414 
415 
417  const Variable<array_1d<double, 3 > >& rVariable,
418  std::vector<array_1d<double, 3 > >& rValues,
419  const ProcessInfo& rCurrentProcessInfo) override
420  {
421  rValues.resize(1);
422  if (rVariable == NORMAL)
423  {
424  this->CalculateNormal(rValues[0]);
425  }
426  else
427  {
428  /*
429  The cast is done to avoid modification of the element's data. Data modification
430  would happen if rVariable is not stored now (would initialize a pointer to &rVariable
431  with associated value of 0.0). This is catastrophic if the variable referenced
432  goes out of scope.
433  */
434  const WallCondition* const_this = static_cast< const WallCondition* >(this);
435  rValues[0] = const_this->GetValue(rVariable);
436  }
437  }
438 
439 
440 
442  const Variable<double>& rVariable,
443  std::vector<double>& rValues,
444  const ProcessInfo& rCurrentProcessInfo) override
445  {
446  rValues.resize(1);
447  /*
448  The cast is done to avoid modification of the element's data. Data modification
449  would happen if rVariable is not stored now (would initialize a pointer to &rVariable
450  with associated value of 0.0). This is catastrophic if the variable referenced
451  goes out of scope.
452  */
453  const WallCondition* const_this = static_cast< const WallCondition* >(this);
454  rValues[0] = const_this->GetValue(rVariable);
455  }
456 
457 
459  const Variable<array_1d<double, 6 > >& rVariable,
460  std::vector<array_1d<double, 6 > >& rValues,
461  const ProcessInfo& rCurrentProcessInfo) override
462  {
463  rValues.resize(1);
464  const WallCondition* const_this = static_cast< const WallCondition* >(this);
465  rValues[0] = const_this->GetValue(rVariable);
466  }
467 
468 
470  const Variable<Vector>& rVariable,
471  std::vector<Vector>& rValues,
472  const ProcessInfo& rCurrentProcessInfo) override
473  {
474  rValues.resize(1);
475  const WallCondition* const_this = static_cast< const WallCondition* >(this);
476  rValues[0] = const_this->GetValue(rVariable);
477  }
478 
479 
481  const Variable<Matrix>& rVariable,
482  std::vector<Matrix>& rValues,
483  const ProcessInfo& rCurrentProcessInfo) override
484  {
485  rValues.resize(1);
486  const WallCondition* const_this = static_cast< const WallCondition* >(this);
487  rValues[0] = const_this->GetValue(rVariable);
488  }
489 
490 
491 
495 
496 
500 
501 
505 
507  std::string Info() const override
508  {
509  std::stringstream buffer;
510  this->PrintInfo(buffer);
511  return buffer.str();
512  }
513 
515  void PrintInfo(std::ostream& rOStream) const override
516  {
517  rOStream << "WallCondition" << TDim << "D #" << this->Id();
518  }
519 
521  void PrintData(std::ostream& rOStream) const override
522  {
523  this->pGetGeometry()->PrintData(rOStream);
524  }
525 
526 
530 
531 
533 
534  protected:
537 
538 
542 
543 
547 
548 
552 
553 
555 
557 
561  void ApplyWallLaw(MatrixType& rLocalMatrix,
562  VectorType& rLocalVector)
563  {
564  GeometryType& rGeometry = this->GetGeometry();
565  const unsigned int BlockSize = TDim;
566  const double NodalFactor = 1.0 / double(TDim);
567 
568  double area = NodalFactor * rGeometry.DomainSize();
569  // DomainSize() is the way to ask the geometry's length/area/volume (whatever is relevant for its dimension) without asking for the number of spatial dimensions first
570 
571  for(unsigned int itNode = 0; itNode < rGeometry.PointsNumber(); ++itNode)
572  {
573  const NodeType& rConstNode = rGeometry[itNode];
574  const double y = rConstNode.GetValue(Y_WALL); // wall distance to use in stress calculation
575  if( y > 0.0 && rConstNode.Is(SLIP) )
576  {
577  array_1d<double,3> Vel = rGeometry[itNode].FastGetSolutionStepValue(VELOCITY);
578  const array_1d<double,3>& VelMesh = rGeometry[itNode].FastGetSolutionStepValue(MESH_VELOCITY);
579  Vel -= VelMesh;
580 
581  const double Ikappa = 1.0/0.41; // inverse of Von Karman's kappa
582  const double B = 5.2;
583  const double limit_yplus = 10.9931899; // limit between linear and log regions
584 
585  const double rho = rGeometry[itNode].FastGetSolutionStepValue(DENSITY);
586  const double nu = rGeometry[itNode].FastGetSolutionStepValue(VISCOSITY);
587 
588  double wall_vel = 0.0;
589  for (size_t d = 0; d < TDim; d++)
590  {
591  wall_vel += Vel[d]*Vel[d];
592  }
593  wall_vel = sqrt(wall_vel);
594 
595  if (wall_vel > 1e-12) // do not bother if velocity is zero
596  {
597 
598  // linear region
599  double utau = sqrt(wall_vel * nu / y);
600  double yplus = y * utau / nu;
601 
602  // log region
603  if (yplus > limit_yplus)
604  {
605  // wall_vel / utau = 1/kappa * log(yplus) + B
606  // this requires solving a nonlinear problem:
607  // f(utau) = utau*(1/kappa * log(y*utau/nu) + B) - wall_vel = 0
608  // note that f'(utau) = 1/kappa * log(y*utau/nu) + B + 1/kappa
609 
610  unsigned int iter = 0;
611  double dx = 1e10;
612  const double tol = 1e-6;
613  double uplus = Ikappa * log(yplus) + B;
614 
615  while(iter < 100 && fabs(dx) > tol * utau)
616  {
617  // Newton-Raphson iteration
618  double f = utau * uplus - wall_vel;
619  double df = uplus + Ikappa;
620  dx = f/df;
621 
622  // Update variables
623  utau -= dx;
624  yplus = y * utau / nu;
625  uplus = Ikappa * log(yplus) + B;
626  ++iter;
627  }
628  if (iter == 100)
629  {
630  std::cout << "WARNING: wall condition Newton-Raphson did not converge. Residual is " << dx << std::endl;
631  }
632  }
633 
634  const double Tmp = area * utau * utau * rho / wall_vel;
635  for (unsigned int d = 0; d < TDim; d++)
636  {
637  unsigned int k = itNode*BlockSize+d;
638  rLocalVector[k] -= Vel[d] * Tmp;
639  rLocalMatrix(k,k) += Tmp;
640  }
641  }
642  }
643  }
644  }
645 
646 
648 
653  void ApplyNeumannCondition(MatrixType& rLocalMatrix,
654  VectorType& rLocalVector);
655 
656 
657 
661 
662 
666 
667 
671 
672 
674 
675  private:
678 
679 
683 
684 
688 
689  friend class Serializer;
690 
691  void save(Serializer& rSerializer) const override
692  {
694  }
695 
696  void load(Serializer& rSerializer) override
697  {
699  }
700 
704 
705 
709 
710 
714 
715 
719 
720 
724 
725 
727 
728  }; // Class WallCondition
729 
730 
732 
735 
736 
740 
741 
743  template< unsigned int TDim, unsigned int TNumNodes >
744  inline std::istream& operator >> (std::istream& rIStream,
746  {
747  return rIStream;
748  }
749 
751  template< unsigned int TDim, unsigned int TNumNodes >
752  inline std::ostream& operator << (std::ostream& rOStream,
753  const WallCondition<TDim,TNumNodes>& rThis)
754  {
755  rThis.PrintInfo(rOStream);
756  rOStream << std::endl;
757  rThis.PrintData(rOStream);
758 
759  return rOStream;
760  }
761 
763 
765 
766 
767 } // namespace Kratos.
768 
769 #endif // KRATOS_WALL_CONDITION_H
Base class for all Conditions.
Definition: condition.h:59
std::size_t SizeType
Definition: condition.h:94
std::vector< DofType::Pointer > DofsVectorType
Definition: condition.h:100
virtual int Check(const ProcessInfo &rCurrentProcessInfo) const
Definition: condition.h:854
Condition & operator=(Condition const &rOther)
Assignment operator.
Definition: condition.h:181
PropertiesType::Pointer pGetProperties()
returns the pointer to the property of the condition. Does not throw an error, to allow copying of co...
Definition: condition.h:964
std::size_t IndexType
Definition: flags.h:74
bool Is(Flags const &rOther) const
Definition: flags.h:274
GeometryType::Pointer pGetGeometry()
Returns the pointer to the geometry.
Definition: geometrical_object.h:140
TVariableType::Type & GetValue(const TVariableType &rThisVariable)
Definition: geometrical_object.h:248
Flags & GetFlags()
Returns the flags of the object.
Definition: geometrical_object.h:176
GeometryType & GetGeometry()
Returns the reference of the geometry.
Definition: geometrical_object.h:158
DataValueContainer & GetData()
Definition: geometrical_object.h:212
Geometry base class.
Definition: geometry.h:71
SizeType PointsNumber() const
Definition: geometry.h:528
SizeType size() const
Definition: geometry.h:518
IndexType const & Id() const
Id of this Geometry.
Definition: geometry.h:964
virtual double DomainSize() const
This method calculate and return length, area or volume of this geometry depending to it's dimension.
Definition: geometry.h:1371
This object defines an indexed object.
Definition: indexed_object.h:54
IndexType Id() const
Definition: indexed_object.h:107
void resize(std::size_t NewSize1, std::size_t NewSize2, bool preserve=0)
Definition: amatrix_interface.h:224
This class defines the node.
Definition: node.h:65
TVariableType::Type & GetValue(const TVariableType &rThisVariable)
Definition: node.h:466
PointerVector is a container like stl vector but using a vector to store pointers to its data.
Definition: pointer_vector.h:72
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
Properties encapsulates data shared by different Elements or Conditions. It can store any type of dat...
Definition: properties.h:69
The serialization consists in storing the state of an object into a storage format like data file or ...
Definition: serializer.h:123
Variable class contains all information needed to store and retrive data from a data container.
Definition: variable.h:63
Implements a wall condition for the monolithic formulation.
Definition: wall_condition.h:98
int Check(const ProcessInfo &rCurrentProcessInfo) const override
Check that all data required by this condition is available and reasonable.
Definition: wall_condition.h:316
std::vector< std::size_t > EquationIdVectorType
Definition: wall_condition.h:122
void CalculateLeftHandSide(MatrixType &rLeftHandSideMatrix, const ProcessInfo &rCurrentProcessInfo) override
Definition: wall_condition.h:238
KRATOS_CLASS_INTRUSIVE_POINTER_DEFINITION(WallCondition)
Pointer definition of WallCondition.
void PrintData(std::ostream &rOStream) const override
Print object's data.
Definition: wall_condition.h:521
void ApplyWallLaw(MatrixType &rLocalMatrix, VectorType &rLocalVector)
Commpute the wall stress and add corresponding terms to the system contributions.
Definition: wall_condition.h:561
void CalculateOnIntegrationPoints(const Variable< array_1d< double, 6 > > &rVariable, std::vector< array_1d< double, 6 > > &rValues, const ProcessInfo &rCurrentProcessInfo) override
Definition: wall_condition.h:458
void GetValuesVector(Vector &Values, int Step=0) const override
Returns VELOCITY_X, VELOCITY_Y, (VELOCITY_Z,) for each node.
Definition: wall_condition.h:375
void PrintInfo(std::ostream &rOStream) const override
Print information about this object.
Definition: wall_condition.h:515
WallCondition(IndexType NewId, GeometryType::Pointer pGeometry)
Constructor using Geometry.
Definition: wall_condition.h:157
std::size_t IndexType
Definition: wall_condition.h:118
void CalculateOnIntegrationPoints(const Variable< Matrix > &rVariable, std::vector< Matrix > &rValues, const ProcessInfo &rCurrentProcessInfo) override
Definition: wall_condition.h:480
Geometry< NodeType > GeometryType
Definition: wall_condition.h:110
void EquationIdVector(EquationIdVectorType &rResult, const ProcessInfo &rCurrentProcessInfo) const override
Provides the global indices for each one of this element's local rows.
Vector VectorType
Definition: wall_condition.h:114
void CalculateNormal(array_1d< double, 3 > &An)
std::vector< Dof< double >::Pointer > DofsVectorType
Definition: wall_condition.h:124
WallCondition(IndexType NewId=0)
Default constructor.
Definition: wall_condition.h:136
std::size_t SizeType
Definition: wall_condition.h:120
WallCondition & operator=(WallCondition const &rOther)
Copy constructor.
Definition: wall_condition.h:191
void CalculateOnIntegrationPoints(const Variable< double > &rVariable, std::vector< double > &rValues, const ProcessInfo &rCurrentProcessInfo) override
Definition: wall_condition.h:441
WallCondition(IndexType NewId, const NodesArrayType &ThisNodes)
Constructor using an array of nodes.
Definition: wall_condition.h:146
PointerVectorSet< Dof< double >, IndexedObject > DofsArrayType
Definition: wall_condition.h:126
Geometry< NodeType >::PointsArrayType NodesArrayType
Definition: wall_condition.h:112
Condition::Pointer Create(IndexType NewId, NodesArrayType const &ThisNodes, PropertiesType::Pointer pProperties) const override
Create a new WallCondition object.
Definition: wall_condition.h:208
Matrix MatrixType
Definition: wall_condition.h:116
WallCondition(IndexType NewId, GeometryType::Pointer pGeometry, PropertiesType::Pointer pProperties)
Constructor using Properties.
Definition: wall_condition.h:169
Condition::Pointer Clone(IndexType NewId, NodesArrayType const &rThisNodes) const override
Definition: wall_condition.h:227
Properties PropertiesType
Definition: wall_condition.h:108
Node NodeType
Definition: wall_condition.h:106
WallCondition(WallCondition const &rOther)
Copy constructor.
Definition: wall_condition.h:177
~WallCondition() override
Destructor.
Definition: wall_condition.h:183
std::string Info() const override
Turn back information as a string.
Definition: wall_condition.h:507
void CalculateOnIntegrationPoints(const Variable< Vector > &rVariable, std::vector< Vector > &rValues, const ProcessInfo &rCurrentProcessInfo) override
Definition: wall_condition.h:469
Condition::Pointer Create(IndexType NewId, Condition::GeometryType::Pointer pGeom, PropertiesType::Pointer pProperties) const override
Definition: wall_condition.h:214
void CalculateLocalSystem(MatrixType &rLeftHandSideMatrix, VectorType &rRightHandSideVector, const ProcessInfo &rCurrentProcessInfo) override
Calculate wall stress term for all nodes with SLIP set.
Definition: wall_condition.h:253
void CalculateOnIntegrationPoints(const Variable< array_1d< double, 3 > > &rVariable, std::vector< array_1d< double, 3 > > &rValues, const ProcessInfo &rCurrentProcessInfo) override
Definition: wall_condition.h:416
void ApplyNeumannCondition(MatrixType &rLocalMatrix, VectorType &rLocalVector)
Apply boundary terms to allow imposing a pressure (normal stress), with a correction to prevent inflo...
Definition: wall_condition.cpp:227
void GetDofList(DofsVectorType &ConditionDofList, const ProcessInfo &CurrentProcessInfo) const override
Returns a list of the element's Dofs.
#define KRATOS_THROW_ERROR(ExceptionType, ErrorMessage, MoreInfo)
Definition: define.h:77
#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
dt
Definition: DEM_benchmarks.py:173
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
KratosZeroMatrix< double > ZeroMatrix
Definition: amatrix_interface.h:559
std::istream & operator>>(std::istream &rIStream, LinearMasterSlaveConstraint &rThis)
input stream function
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
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
y
Other simbols definition.
Definition: generate_axisymmetric_navier_stokes_element.py:54
f
Definition: generate_convection_diffusion_explicit_element.py:112
rho
Definition: generate_droplet_dynamics.py:86
int tol
Definition: hinsberg_optimization.py:138
nu
Definition: isotropic_damage_automatic_differentiation.py:135
def load(f)
Definition: ode_solve.py:307
int d
Definition: ode_solve.py:397
int k
Definition: quadrature.py:595
N
Definition: sensitivityMatrix.py:29
B
Definition: sensitivityMatrix.py:76
integer i
Definition: TensorModule.f:17
e
Definition: run_cpp_mpi_tests.py:31