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.
cartesian_mesh_generator_modeler.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 Dalmau
11 //
12 //
13 
14 #if !defined(KRATOS_CARTESIAN_MESH_GENERATOR_H_INCLUDED )
15 #define KRATOS_CARTESIAN_MESH_GENERATOR_H_INCLUDED
16 
17 // System includes
18 #include <string>
19 #include <iostream>
20 
21 // External includes
22 
23 // Project includes
24 #include "includes/define.h"
25 #include "modeler/modeler.h"
27 
28 namespace Kratos
29 {
32 
36 
40 
44 
48 
50 
53 {
54 public:
57 
60 
61  typedef Modeler BaseType;
62 
63  typedef Point PointType;
64 
65  typedef Node NodeType;
66 
68 
70 
71  typedef std::size_t SizeType;
72 
76 
78  CartesianMeshGeneratorModeler(ModelPart& rSourceModelPart, double ElementSize) :
79  mrModelPart(rSourceModelPart), mElementSize(ElementSize)
80  {
81  }
82 
85 
86 
90 
91 
95 
96  void GenerateMesh(ModelPart& rThisModelPart, Element const& rReferenceElement)
97  {
98  const unsigned int dimension = rReferenceElement.GetGeometry().Dimension();
99 
101 
102  Timer::Start("Generating Mesh");
103 
104  CalculateBoundingBox(mrModelPart, mMinPoint, mMaxPoint);
106 
107  unsigned int start_node_id = mrModelPart.NumberOfNodes() + 1;
108  unsigned int start_element_id = 1;
109  //unsigned int segment_number_1 = mSegmentsNumber[0] + 1;
110  //unsigned int segment_number_2 = mSegmentsNumber[1] + 1;
111  //unsigned int segment_number_3 = mSegmentsNumber[2] + 1;
112 
113 
114 
115  const unsigned int number_of_nodes = mDivisionsNumber[0] * mDivisionsNumber[1] * mDivisionsNumber[2];
116  //const unsigned int number_of_nodes = segment_number_1 * segment_number_2 * segment_number_3;
117 
118  const unsigned int number_of_elements = mSegmentsNumber[0] * mSegmentsNumber[1] * mSegmentsNumber[2];
119 
120  KRATOS_WATCH(number_of_nodes);
121 
122  KRATOS_WATCH(number_of_elements);
123 
124  CalculateBoundaryIntersections(mrModelPart);
125 
126  CalculateIsInside(mrModelPart);
127 
129 
130  Timer::Start("Generating Nodes");
131 
132  double x0 = mMinPoint.X();
133  double y0 = mMinPoint.Y();
134  double z0 = mMinPoint.Z();
135 
136  ModelPart::NodesContainerType::ContainerType& nodes_array = rThisModelPart.NodesArray();
137  ModelPart::NodesContainerType::ContainerType temp_nodes_array(number_of_nodes);
138 
139  ModelPart::ElementsContainerType::ContainerType& elements_array = rThisModelPart.ElementsArray();
140  ModelPart::ElementsContainerType::ContainerType temp_elements_array(number_of_elements);
141 
142  for(unsigned int k = 0 ; k < mDivisionsNumber[2] ; k++)
143  for(unsigned int j = 0 ; j < mDivisionsNumber[1] ; j++)
144  for(unsigned int i = 0 ; i < mDivisionsNumber[0] ; i++)
145  temp_nodes_array[NodeIndex(i,j,k)] = NodeType::Pointer(new NodeType(start_node_id++, x0 + i * mElementSize, y0 + j * mElementSize, z0 + k * mElementSize));
146 
147  unsigned int number_of_active_nodes = 0;
148 
149  for(unsigned int i = 0 ; i < number_of_nodes ; i++)
150  if(mIsInside[i])
151  number_of_active_nodes++;
152 
153  nodes_array.resize(number_of_active_nodes);
154 
155  unsigned int index = 0;
156 
157  for(unsigned int i = 0 ; i < number_of_nodes ; i++)
158  if(mIsInside[i])
159  nodes_array[index++]=temp_nodes_array[i];
160 
161  Timer::Stop("Generating Nodes");
162 
163  Timer::Start("Generating Elements");
164 
165  Element::NodesArrayType element_nodes(4);
166 
167  if(dimension == 2)
168  {
169  unsigned int number_of_active_elements = 0;
170  for(unsigned int j = 0 ; j < mSegmentsNumber[1] ; j++)
171  for(unsigned int i = 0 ; i < mSegmentsNumber[0] ; i++)
172  {
173  if(mIsInside[NodeIndex(i,j,0)] & mIsInside[NodeIndex(i+1,j,0)] & mIsInside[NodeIndex(i+1,j+1,0)] & mIsInside[NodeIndex(i,j+1,0)])
174  number_of_active_elements++;
175  }
176 
177  elements_array.resize(number_of_active_elements);
178 
179  unsigned int counter = 0;
180 
181  for(unsigned int j = 0 ; j < mSegmentsNumber[1] ; j++)
182  for(unsigned int i = 0 ; i < mSegmentsNumber[0] ; i++)
183  {
184  if(mIsInside[NodeIndex(i,j,0)] & mIsInside[NodeIndex(i+1,j,0)] & mIsInside[NodeIndex(i+1,j+1,0)] & mIsInside[NodeIndex(i,j+1,0)])
185  {
186  element_nodes(0) = temp_nodes_array[NodeIndex(i,j,0)];
187  element_nodes(1) = temp_nodes_array[NodeIndex(i+1,j,0)];
188  element_nodes(2) = temp_nodes_array[NodeIndex(i+1,j+1,0)];
189  element_nodes(3) = temp_nodes_array[NodeIndex(i,j+1,0)];
190 
191  elements_array[counter++] = rReferenceElement.Create(start_element_id++, element_nodes, rReferenceElement.pGetProperties());
192  //elements_array[ElementIndex(i,j,0)] = rReferenceElement.Create(start_element_id++, element_nodes, rReferenceElement.pGetProperties());
193  }
194  }
195  for(ModelPart::ElementIterator i_element = mrModelPart.ElementsBegin() ; i_element != mrModelPart.ElementsEnd() ; i_element++)
196  {
197  Element::GeometryType& r_geometry = i_element->GetGeometry();
198 
199  PointType point1 = r_geometry[0] + mNormals[r_geometry[0].Id()-1];
200  PointType point2 = r_geometry[1] + mNormals[r_geometry[1].Id()-1];
201 
202  unsigned int index1 = FindNearestNodeIndex(point1,mNormals[r_geometry[0].Id()-1]);
203  unsigned int index2 = FindNearestNodeIndex(point2,mNormals[r_geometry[1].Id()-1]);
204 
205  element_nodes(0) = r_geometry(0);
206  element_nodes(1) = r_geometry(1);
207  element_nodes(2) = temp_nodes_array[index2];
208  element_nodes(3) = temp_nodes_array[index1];
209 
210  elements_array.push_back(rReferenceElement.Create(start_element_id++, element_nodes, rReferenceElement.pGetProperties()));
211  }
212  }
213 
214  // TODO: assigning nodes and elements to the modelpart
215  // TODO: adding source boundary mesh nods to modelpart
216 
217  Timer::Stop("Generating Elements");
218 
219 
220 
221  Timer::Stop("Generating Mesh");
222  }
223 
224 
226  {
228 
229  if(mNormals.size() != mrModelPart.NumberOfNodes())
230  mNormals.resize(mrModelPart.NumberOfNodes(), zero);
231  else
232  std::fill(mNormals.begin(), mNormals.end(), zero);
233 
234  double coefficient = mElementSize / 2.00;
235 
236  for(ModelPart::ElementIterator i_element = mrModelPart.ElementsBegin() ; i_element != mrModelPart.ElementsEnd() ; i_element++)
237  {
238  Element::GeometryType& r_geometry = i_element->GetGeometry();
239  array_1d<double,3> normal;
240 
241  normal[0] = r_geometry[1].Y() - r_geometry[0].Y();
242  normal[1] = - (r_geometry[1].X() - r_geometry[0].X());
243 
244  normal *= coefficient / r_geometry.Length();
245 
246 
247  mNormals[r_geometry[0].Id()-1] += normal ;
248  mNormals[r_geometry[1].Id()-1] += normal ;
249  }
250  for(ModelPart::NodeIterator i_node = mrModelPart.NodesBegin() ; i_node != mrModelPart.NodesEnd() ; i_node++)
251  noalias(i_node->FastGetSolutionStepValue(NORMAL)) = mNormals[i_node->Id()-1] ;
252  }
253 
254  unsigned int FindNearestNodeIndex(PointType& rThisPoint, array_1d<double,3>& rNormal)
255  {
256  double x = (rThisPoint.X() - mMinPoint.X()) / mElementSize;
257  double y = (rThisPoint.Y() - mMinPoint.Y()) / mElementSize;
258 
259  unsigned int i = static_cast<unsigned int>(x);
260  unsigned int j = static_cast<unsigned int>(y);
261 
262  if(mIsInside[NodeIndex(i,j,0)])
263  return NodeIndex(i,j,0);
264 
265 
266  if(rNormal[0] >= 0.00)
267  {
268  if(rNormal[1] >= 0.00)
269  {
270  if(rNormal[0] > rNormal[1])
271  i++;
272  else
273  j++;
274  }
275  else
276  {
277  if(rNormal[0] > -rNormal[1])
278  i++;
279  else
280  j--;
281  }
282  }
283  else
284  {
285  if(rNormal[1] >= 0.00)
286  {
287  if(-rNormal[0] > rNormal[1])
288  i--;
289  else
290  j++;
291  }
292  else
293  {
294  if(-rNormal[0] > -rNormal[1])
295  i--;
296  else
297  j--;
298  }
299  }
300 
301 
302  return NodeIndex(i,j,0);
303 
304  }
305 
306  void CalculateIsInside(ModelPart& rThisModelPart)
307  {
308  const unsigned int number_of_nodes = mDivisionsNumber[0] * mDivisionsNumber[1] * mDivisionsNumber[2];
309 
310  if(mIsInside.size() != number_of_nodes)
311  {
312  mIsInside.resize(number_of_nodes, 0);
313  }
314  else
315  std::fill(mIsInside.begin(),mIsInside.end(), 0);
316 
317  int size = mSegmentsNumber[1] + 1;
318 
319  for(int j = 0 ; j < size ; j++)
320  {
321 // bool is_inside = false;
322  std::vector<double>& j_intersections = mIntersections[j];
323 
324  for(std::vector<double>::iterator j_x = j_intersections.begin() ; j_x != j_intersections.end() ; j_x++)
325  {
326  std::vector<double>::iterator start = j_x++;
327 
328  unsigned int i_start = static_cast<unsigned int>(*start / mElementSize);
329  unsigned int i_end = static_cast<unsigned int>(*j_x / mElementSize);
330 
331  for(unsigned int i = i_start + 1 ; i < i_end ; i++)
332  mIsInside[NodeIndex(i,j,0)]=true;
333  }
334  }
335  }
336 
338  {
339  std::vector<int> number_of_intersections(mSegmentsNumber[1] + 1, 0); // number of intersections per row for mSegmentsNumber[1] + 1 rows in x direction
340  if(mIntersections.size() != mSegmentsNumber[1] + 1)
341  mIntersections.resize(mSegmentsNumber[1] + 1); // intersection points x coordinate per row for mSegmentsNumber[1] + 1 rows
342 
343  for(ModelPart::ElementIterator i_element = rThisModelPart.ElementsBegin() ; i_element != rThisModelPart.ElementsEnd() ; i_element++)
344  {
345  Element::GeometryType& r_geometry = i_element->GetGeometry();
346 
347  double x1;
348  double x2;
349  double y1;
350  double y2;
351  if(r_geometry[0].Y() < r_geometry[1].Y())
352  {
353  x1 = (r_geometry[0].X() - mMinPoint.X());
354  x2 = (r_geometry[1].X() - mMinPoint.X());
355  y1 = (r_geometry[0].Y() - mMinPoint.Y());
356  y2 = (r_geometry[1].Y() - mMinPoint.Y());
357  }
358  else
359  {
360  x1 = (r_geometry[1].X() - mMinPoint.X());
361  x2 = (r_geometry[0].X() - mMinPoint.X());
362  y1 = (r_geometry[1].Y() - mMinPoint.Y());
363  y2 = (r_geometry[0].Y() - mMinPoint.Y());
364  }
365 
366  unsigned int i_start = static_cast<unsigned int>(y1 / mElementSize);
367  unsigned int i_end = static_cast<unsigned int>(y2 / mElementSize);
368 
369  if (i_start*mElementSize < y1)
370  i_start++;
371 
372  double m = 0.00;
373  if(y1 != y2)
374  m = (x2 - x1) / (y2 - y1);
375 
376  double delta_x = m*mElementSize;
377  double x = x1 + (i_start * mElementSize - y1) * m ;
378  for(unsigned int i = i_start ; i <= i_end ; i++)
379  {
380  number_of_intersections[i]++;
381  mIntersections[i].push_back(x);
382  x += delta_x;
383  }
384  }
385 
386  for(int i = 0 ; i < mIntersections.size() ; i++)
387  std::sort(mIntersections[i].begin(), mIntersections[i].end());
388  }
389 
390  void CalculateBoundingBox(ModelPart& rThisModelPart, Point& rMinPoint, Point& rMaxPoint)
391  {
392  if(rThisModelPart.NumberOfElements() == 0)
393  {
394  rMinPoint = PointType();
395  rMaxPoint = PointType();
396  return;
397  }
398 
399  if(rThisModelPart.ElementsBegin()->GetGeometry().empty())
400  {
401  rMinPoint = PointType();
402  rMaxPoint = PointType();
403  return;
404  }
405 
406 
407  rMinPoint = rThisModelPart.ElementsBegin()->GetGeometry()[0];
408  rMaxPoint = rMinPoint;
409 
410  for(ModelPart::ElementIterator i_element = rThisModelPart.ElementsBegin() ;
411  i_element != rThisModelPart.ElementsEnd() ; i_element++)
412  for(Element::GeometryType::iterator i_point = i_element->GetGeometry().begin() ; i_point != i_element->GetGeometry().end() ; i_point++)
413  for(unsigned int i = 0 ; i < PointType::Dimension() ; i++)
414  {
415  if(rMinPoint[i] > (*i_point)[i])
416  rMinPoint[i] = (*i_point)[i];
417 
418  if(rMaxPoint[i] < (*i_point)[i])
419  rMaxPoint[i] = (*i_point)[i];
420  }
421  }
422 
423 
425  {
426  if(mElementSize == 0.00)
427  return;
428 
429  for(unsigned int i = 0 ; i < PointType::Dimension() ; i++)
430  {
431  double delta = mMaxPoint[i] - mMinPoint[i];
432  int segments_number = static_cast<int>(delta / mElementSize);
433 
434  if (((segments_number * mElementSize) < delta))
435  segments_number++;
436 
437  mSegmentsNumber[i] = segments_number;
438  KRATOS_WATCH(mSegmentsNumber[i]);
439 
440  mDivisionsNumber[i] = segments_number + 1;
441 
442  if(mSegmentsNumber[i] == 0)
443  mSegmentsNumber[i]++;
444  }
445 
446  }
447 
448  virtual void GenerateNodes(ModelPart& ThisModelPart)
449  {
450  //std::vector<PointType>
451  }
452 
453 
454  unsigned int ElementIndex(unsigned int i, unsigned int j, unsigned int k)
455  {
456  return i + mDivisionsNumber[0] * j + mDivisionsNumber[0] * mDivisionsNumber[1] * k;
457  }
458 
459  unsigned int NodeIndex(unsigned int i, unsigned int j, unsigned int k)
460  {
461  return i + mSegmentsNumber[0] * j + mSegmentsNumber[0] * mSegmentsNumber[1] * k;
462  }
463 
464 
465 
466 
467 
471 
472 
476 
477 
481 
483  virtual std::string Info() const
484  {
485  return "CartesianMeshGeneratorModeler";
486  }
487 
489  virtual void PrintInfo(std::ostream& rOStream) const
490  {
491  rOStream << Info();
492  }
493 
495  virtual void PrintData(std::ostream& rOStream) const
496  {
497  }
498 
499 
503 
504 
506 
507 protected:
510 
511 
515 
516 
520 
521 
525 
526 
530 
531 
535 
536 
540 
541 
543 
544 private:
547 
548 
552 
553  ModelPart& mrModelPart;
554 
555  double mElementSize;
556  PointType mMinPoint;
557  PointType mMaxPoint;
558 
559  unsigned int mSegmentsNumber[3];
560 
561  unsigned int mDivisionsNumber[3];
562 
563  std::vector<std::vector<double> > mIntersections;
564  std::vector<int> mIsInside;
565 
566  std::vector<array_1d<double,3> > mNormals;
567 
571 
572 
576 
577 
578  void GenerateNodes(ModelPart& ThisModelPart, GeometryType& rGeometry, SizeType NumberOfSegments, SizeType StartNodeId)
579  {
580  double x1 = rGeometry[0][0];
581  double y1 = rGeometry[0][1];
582  double z1 = rGeometry[0][2];
583  double x2 = rGeometry[1][0];
584  double y2 = rGeometry[1][1];
585  double z2 = rGeometry[1][2];
586 
587  double dx = (x2 - x1) / NumberOfSegments;
588  double dy = (y2 - y1) / NumberOfSegments;
589  double dz = (z2 - z1) / NumberOfSegments;
590 
591  for(SizeType i = 1 ; i < NumberOfSegments - 1 ; i++)
592  {
593  ThisModelPart.CreateNewNode(StartNodeId++, x1 + i * dx, y1 + i * dy, z1 + i * dz);
594  }
595  }
596 
600 
601 
605 
606 
610 
613 
616 
617 
619 
620 }; // Class CartesianMeshGeneratorModeler
621 
623 
626 
627 
631 
632 
634 inline std::istream& operator >> (std::istream& rIStream,
636 
638 inline std::ostream& operator << (std::ostream& rOStream,
639  const CartesianMeshGeneratorModeler& rThis)
640 {
641  rThis.PrintInfo(rOStream);
642  rOStream << std::endl;
643  rThis.PrintData(rOStream);
644 
645  return rOStream;
646 }
648 
649 
650 } // namespace Kratos.
651 
652 #endif // KRATOS_CARTESIAN_MESH_GENERATOR_H_INCLUDED defined
653 
654 
Short class definition.
Definition: cartesian_mesh_generator_modeler.h:53
PointerVector< NodeType > NodesVectorType
Definition: cartesian_mesh_generator_modeler.h:69
virtual void GenerateNodes(ModelPart &ThisModelPart)
Definition: cartesian_mesh_generator_modeler.h:448
unsigned int ElementIndex(unsigned int i, unsigned int j, unsigned int k)
Definition: cartesian_mesh_generator_modeler.h:454
Modeler BaseType
Definition: cartesian_mesh_generator_modeler.h:61
unsigned int FindNearestNodeIndex(PointType &rThisPoint, array_1d< double, 3 > &rNormal)
Definition: cartesian_mesh_generator_modeler.h:254
virtual void PrintInfo(std::ostream &rOStream) const
Print information about this object.
Definition: cartesian_mesh_generator_modeler.h:489
unsigned int NodeIndex(unsigned int i, unsigned int j, unsigned int k)
Definition: cartesian_mesh_generator_modeler.h:459
std::size_t SizeType
Definition: cartesian_mesh_generator_modeler.h:71
virtual ~CartesianMeshGeneratorModeler()
Destructor.
Definition: cartesian_mesh_generator_modeler.h:84
virtual std::string Info() const
Turn back information as a string.
Definition: cartesian_mesh_generator_modeler.h:483
virtual void PrintData(std::ostream &rOStream) const
Print object's data.
Definition: cartesian_mesh_generator_modeler.h:495
void CalculateIsInside(ModelPart &rThisModelPart)
Definition: cartesian_mesh_generator_modeler.h:306
void CalculateDivisionNumbers()
Definition: cartesian_mesh_generator_modeler.h:424
void GenerateMesh(ModelPart &rThisModelPart, Element const &rReferenceElement)
Definition: cartesian_mesh_generator_modeler.h:96
void CalculateBoundingBox(ModelPart &rThisModelPart, Point &rMinPoint, Point &rMaxPoint)
Definition: cartesian_mesh_generator_modeler.h:390
Geometry< NodeType > GeometryType
Definition: cartesian_mesh_generator_modeler.h:67
KRATOS_CLASS_POINTER_DEFINITION(CartesianMeshGeneratorModeler)
Pointer definition of CartesianMeshGeneratorModeler.
Point PointType
Definition: cartesian_mesh_generator_modeler.h:63
void CalculateBoundaryIntersections(ModelPart &rThisModelPart)
Definition: cartesian_mesh_generator_modeler.h:337
void CalculateNormals()
Definition: cartesian_mesh_generator_modeler.h:225
CartesianMeshGeneratorModeler(ModelPart &rSourceModelPart, double ElementSize)
constructor.
Definition: cartesian_mesh_generator_modeler.h:78
Node NodeType
Definition: cartesian_mesh_generator_modeler.h:65
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
PropertiesType::Pointer pGetProperties()
returns the pointer to the property of the element. Does not throw an error, to allow copying of elem...
Definition: element.h:1014
GeometryType & GetGeometry()
Returns the reference of the geometry.
Definition: geometrical_object.h:158
Geometry base class.
Definition: geometry.h:71
virtual double Length() const
Definition: geometry.h:1332
PointsArrayType::iterator iterator
PointsArrayType typedefs.
Definition: geometry.h:213
IndexType const & Id() const
Id of this Geometry.
Definition: geometry.h:964
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
NodeType::Pointer CreateNewNode(int Id, double x, double y, double z, VariablesList::Pointer pNewVariablesList, IndexType ThisIndex=0)
Definition: model_part.cpp:270
NodeIterator NodesBegin(IndexType ThisIndex=0)
Definition: model_part.h:487
SizeType NumberOfElements(IndexType ThisIndex=0) const
Definition: model_part.h:1027
NodesContainerType::ContainerType & NodesArray(IndexType ThisIndex=0)
Definition: model_part.h:527
MeshType::NodeIterator NodeIterator
Definition: model_part.h:134
ElementIterator ElementsEnd(IndexType ThisIndex=0)
Definition: model_part.h:1179
MeshType::ElementIterator ElementIterator
Definition: model_part.h:174
SizeType NumberOfNodes(IndexType ThisIndex=0) const
Definition: model_part.h:341
NodeIterator NodesEnd(IndexType ThisIndex=0)
Definition: model_part.h:497
ElementsContainerType::ContainerType & ElementsArray(IndexType ThisIndex=0)
Definition: model_part.h:1209
Modeler to interact with ModelParts.
Definition: modeler.h:39
This class defines the node.
Definition: node.h:65
Point class.
Definition: point.h:59
static constexpr IndexType Dimension()
Definition: point.h:175
double Y() const
Definition: point.h:187
double Z() const
Definition: point.h:193
double X() const
Definition: point.h:181
PointerVector is a container like stl vector but using a vector to store pointers to its data.
Definition: pointer_vector.h:72
void push_back(const TPointerType &x)
Definition: pointer_vector.h:270
static void Start(std::string const &rIntervalName)
This method starts the timer meassures.
Definition: timer.cpp:109
static void Stop(std::string const &rIntervalName)
This method stops the timer meassures.
Definition: timer.cpp:125
#define KRATOS_WATCH(variable)
Definition: define.h:806
start
Definition: DEM_benchmarks.py:17
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
KratosZeroVector< double > ZeroVector
Definition: amatrix_interface.h:561
std::size_t SizeType
The definition of the size type.
Definition: mortar_classes.h:43
std::istream & operator>>(std::istream &rIStream, LinearMasterSlaveConstraint &rThis)
input stream function
T & noalias(T &TheMatrix)
Definition: amatrix_interface.h:484
std::ostream & operator<<(std::ostream &rOStream, const LinearMasterSlaveConstraint &rThis)
output stream function
Definition: linear_master_slave_constraint.h:432
y
Other simbols definition.
Definition: generate_axisymmetric_navier_stokes_element.py:54
x2
Definition: generate_frictional_mortar_condition.py:122
x1
Definition: generate_frictional_mortar_condition.py:121
int dimension
Definition: isotropic_damage_automatic_differentiation.py:123
int k
Definition: quadrature.py:595
int j
Definition: quadrature.py:648
int m
Definition: run_marine_rain_substepping.py:8
int counter
Definition: script_THERMAL_CORRECT.py:218
x
Definition: sensitivityMatrix.py:49
integer i
Definition: TensorModule.f:17
double precision, dimension(3, 3), public delta
Definition: TensorModule.f:16
zero
Definition: test_pureconvectionsolver_benchmarking.py:94
Configure::ContainerType ContainerType
Definition: transfer_utility.h:247