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.
exact_mortar_segmentation_utility.h
Go to the documentation of this file.
1 //
2 // | / |
3 // ' / __| _` | __| _ \ __|
4 // . \ | ( | | ( |\__ `
5 // _|\_\_| \__,_|\__|\___/ ____/
6 // Multi-Physics
7 //
8 // License: BSD License
9 // Kratos default license: kratos/license.txt
10 //
11 // Main authors: Vicente Mataix Ferrandiz
12 //
13 #if !defined(KRATOS_EXACT_MORTAR_INTEGRATION_UTILITY_H_INCLUDED)
14 #define KRATOS_EXACT_MORTAR_INTEGRATION_UTILITY_H_INCLUDED
15 
16 // System includes
17 #include <iostream>
18 #include <iomanip>
19 #include <cmath>
20 
21 // External includes
22 
23 // Project includes
25 
26 // The geometry of the triangle for the "tessellation"
27 /* LINES */
28 #include "geometries/line_2d_2.h"
29 /* TRIANGLES */
31 /* QUADRILATERALS */
33 
34 // /* The integration points (we clip triangles in 3D, so with line and triangle is enough)*/
35 // #include "integration/line_gauss_legendre_integration_points.h"
37 
38 /* Utilities */
39 #include "utilities/math_utils.h"
41 
42 namespace Kratos {
45 
49 
51  typedef Point PointType;
52  typedef Node NodeType;
53  typedef Geometry<NodeType> GeometryType;
55 
60 
62  typedef std::size_t SizeType;
63 
67 
71 
75 
87 template <SizeType TDim, SizeType TNumNodes, bool TBelong = false, SizeType TNumNodesMaster = TNumNodes>
88 class KRATOS_API(KRATOS_CORE) ExactMortarIntegrationUtility
89 {
90 public:
93 
96 
99 
101  typedef std::vector<array_1d<PointBelongType, TDim>> VectorArrayPointsBelong;
102 
104  typedef std::vector<array_1d<PointType, TDim>> VectorArrayPoints;
105 
108 
110  typedef std::vector<PointBelongType> VectorPointsBelong;
111 
113  typedef std::vector<PointType> VectorPoints;
114 
117 
120 
123 
126 
129 
132 
135 
137  typedef std::size_t IndexType;
138 
140  static constexpr double ZeroTolerance = std::numeric_limits<double>::epsilon();
141 
144 
148 
155  const SizeType IntegrationOrder = 0,
156  const double DistanceThreshold = std::numeric_limits<double>::max(),
157  const SizeType EchoLevel = 0,
158  const double ZeroToleranceFactor = 1.0,
159  const bool ConsiderDelaunator = false
160  ) :mIntegrationOrder(IntegrationOrder),
161  mDistanceThreshold(DistanceThreshold),
162  mEchoLevel(EchoLevel),
163  mZeroToleranceFactor(ZeroToleranceFactor),
164  mConsiderDelaunator(ConsiderDelaunator)
165  {
166  GetIntegrationMethod();
167  }
168 
170  virtual ~ExactMortarIntegrationUtility() = default;
171 
175 
179 
190  const GeometryType& rOriginalSlaveGeometry,
191  const array_1d<double, 3>& rSlaveNormal,
192  const GeometryType& rOriginalMasterGeometry,
193  const array_1d<double, 3>& rMasterNormal,
194  ConditionArrayListType& rConditionsPointsSlave
195  );
196 
206  bool GetExactIntegration(
207  const GeometryType& rOriginalSlaveGeometry,
208  const array_1d<double, 3>& rSlaveNormal,
209  const GeometryType& rOriginalMasterGeometry,
210  const array_1d<double, 3>& rMasterNormal,
211  IntegrationPointsType& rIntegrationPointsSlave
212  );
213 
223  bool GetExactAreaIntegration(
224  const GeometryType& rOriginalSlaveGeometry,
225  const array_1d<double, 3>& rSlaveNormal,
226  const GeometryType& rOriginalMasterGeometry,
227  const array_1d<double, 3>& rMasterNormal,
228  double& rArea
229  );
230 
237  void GetTotalArea(
238  const GeometryType& rOriginalSlaveGeometry,
239  ConditionArrayListType& rConditionsPointsSlave,
240  double& rArea
241  );
242 
250  bool TestGetExactIntegration(
251  Condition::Pointer pSlaveCond,
252  Condition::Pointer pMasterCond,
253  Matrix& rCustomSolution
254  );
255 
256 
263  double TestGetExactAreaIntegration(
264  Condition::Pointer pSlaveCond,
265  Condition::Pointer pMasterCond
266  );
267 
268 
275  double TestGetExactAreaIntegration(
276  ModelPart& rMainModelPart,
277  Condition::Pointer pSlaveCond
278  );
279 
285  void TestIODebug(
286  ModelPart& rMainModelPart,
287  const std::string IOConsidered = "GiD"
288  );
289 
293 
299  {
300  return mIntegrationOrder;
301  }
302 
307  void SetIntegrationOrder(const SizeType IntegrationOrder)
308  {
309  mIntegrationOrder = IntegrationOrder;
310  GetIntegrationMethod();
311  }
312 
318  {
319  return mDistanceThreshold;
320  }
321 
326  void SetDistanceThreshold(const double DistanceThreshold)
327  {
328  mDistanceThreshold = DistanceThreshold;
329  }
330 
336  {
337  return mEchoLevel;
338  }
339 
345  {
346  mEchoLevel = EchoLevel;
347  }
348 
354  {
355  return mZeroToleranceFactor;
356  }
357 
362  void SetZeroToleranceFactor(const double ZeroToleranceFactor)
363  {
364  mZeroToleranceFactor = ZeroToleranceFactor;
365  }
366 
372  {
373  return mConsiderDelaunator;
374  }
375 
380  void SetConsiderDelaunator(const bool ConsiderDelaunator)
381  {
382  mConsiderDelaunator = ConsiderDelaunator;
383  }
384 
386 protected:
389 
393 
397 
401 
405  void GetIntegrationMethod();
406 
410  GeometryType::IntegrationPointsArrayType GetIntegrationTriangle();
411 
417  template<SizeType TSizeCheck = TNumNodes>
418  static inline bool CheckAllInside(const array_1d<bool, TSizeCheck>& rAllInside)
419  {
420  for (IndexType i_node = 0; i_node < TSizeCheck; ++i_node)
421  if (!rAllInside[i_node])
422  return false;
423 
424  return true;
425  }
426 
436  static inline bool Clipping2D(
437  PointType& rPointIntersection,
438  const PointType& rPointOrig1,
439  const PointType& rPointOrig2,
440  const PointType& rPointDest1,
441  const PointType& rPointDest2
442  )
443  {
444  const array_1d<double, 3>& r_coord_point_orig1 = rPointOrig1.Coordinates();
445  const array_1d<double, 3>& r_coord_point_orig2 = rPointOrig2.Coordinates();
446  const array_1d<double, 3>& r_coord_point_dest1 = rPointDest1.Coordinates();
447  const array_1d<double, 3>& r_coord_point_dest2 = rPointDest2.Coordinates();
448 
449  const double s_orig1_orig2_x = r_coord_point_orig2[0] - r_coord_point_orig1[0];
450  const double s_orig1_orig2_y = r_coord_point_orig2[1] - r_coord_point_orig1[1];
451  const double s_dest1_dest2_x = r_coord_point_dest2[0] - r_coord_point_dest1[0];
452  const double s_dest1_dest2_y = r_coord_point_dest2[1] - r_coord_point_dest1[1];
453 
454  const double denom = s_orig1_orig2_x * s_dest1_dest2_y -
455  s_dest1_dest2_x * s_orig1_orig2_y;
456 
457  const double tolerance = 1.0e-15;
458 // const double tolerance = std::numeric_limits<double>::epsilon();
459 
460  if (std::abs(denom) < tolerance) // NOTE: Collinear
461  return false;
462 
463  const double s_orig1_dest1_x = r_coord_point_orig1[0] - r_coord_point_dest1[0];
464  const double s_orig1_dest1_y = r_coord_point_orig1[1] - r_coord_point_dest1[1];
465 
466  const double s = (s_orig1_orig2_x * s_orig1_dest1_y - s_orig1_orig2_y * s_orig1_dest1_x)/denom;
467 
468  const double t = (s_dest1_dest2_x * s_orig1_dest1_y - s_dest1_dest2_y * s_orig1_dest1_x)/denom;
469 
470  if (s >= -tolerance && s <= (1.0 + tolerance) && t >= -tolerance && t <= (1.0 + tolerance)) {
471  rPointIntersection.Coordinates()[0] = r_coord_point_orig1[0] + t * s_orig1_orig2_x;
472  rPointIntersection.Coordinates()[1] = r_coord_point_orig1[1] + t * s_orig1_orig2_y;
473 
474  return true;
475  } else
476  return false;
477  }
478 
485  {
486  array_1d<double, 3> normal;
487 
488  normal[0] = -rVector[1];
489  normal[1] = rVector[0];
490  normal[2] = 0.0;
491 
492  return normal;
493  }
494 
503  static inline double AnglePoints(
504  const PointType& rPointOrig1,
505  const PointType& rPointOrig2,
506  const array_1d<double, 3>& rAxis1,
507  const array_1d<double, 3>& rAxis2
508  )
509  {
510  array_1d<double, 3> local_edge = rPointOrig2.Coordinates() - rPointOrig1.Coordinates();
511  if (norm_2(local_edge) > 0.0)
512  local_edge /= norm_2(local_edge);
513 
514  const double xi = inner_prod(rAxis1, local_edge);
515  const double eta = inner_prod(rAxis2, local_edge);
516 
517  return (std::atan2(eta, xi));
518  }
519 
526  static inline bool CheckPoints(
527  const PointType& rPointOrig,
528  const PointType& rPointDest
529  )
530  {
531 // const double tolerance = std::numeric_limits<double>::epsilon(); // NOTE: Giving some problems, too tight
532  const double tolerance = 1.0e-15;
533  return rPointDest.Distance(rPointOrig) < tolerance;
534  }
535 
543  static inline double FastTriagleCheck2D(
544  const PointType& rPointOrig1,
545  const PointType& rPointOrig2,
546  const PointType& rPointOrig3
547  )
548  {
549  const double x10 = rPointOrig2.X() - rPointOrig1.X();
550  const double y10 = rPointOrig2.Y() - rPointOrig1.Y();
551 
552  const double x20 = rPointOrig3.X() - rPointOrig1.X();
553  const double y20 = rPointOrig3.Y() - rPointOrig1.Y();
554 
555  //Jacobian is calculated:
556  // |dx/dxi dx/deta| |x1-x0 x2-x0|
557  //J=| |= | |
558  // |dy/dxi dy/deta| |y1-y0 y2-y0|
559 
560  return x10 * y20 - y10 * x20;
561  }
562 
569  template<SizeType TSizeCheck = TNumNodes>
570  inline void PushBackPoints(
571  VectorPoints& rPointList,
572  const array_1d<bool, TSizeCheck>& rAllInside,
573  GeometryPointType& rThisGeometry
574  )
575  {
576  for (IndexType i_node = 0; i_node < TSizeCheck; ++i_node) {
577  if (rAllInside[i_node]) {
578  // We check if the node already exists
579  bool add_point = true;
580  for (IndexType iter = 0; iter < rPointList.size(); ++iter)
581  if (CheckPoints(rThisGeometry[i_node], rPointList[iter])) add_point = false;
582 
583  if (add_point)
584  rPointList.push_back(rThisGeometry[i_node]);
585  }
586  }
587  }
588 
596  template<SizeType TSizeCheck = TNumNodes>
597  inline void PushBackPoints(
598  VectorPointsBelong& rPointList,
599  const array_1d<bool, TSizeCheck>& rAllInside,
600  GeometryPointType& rThisGeometry,
601  const PointBelongs& rThisBelongs
602  )
603  {
604  for (IndexType i_node = 0; i_node < TSizeCheck; ++i_node) {
605  if (rAllInside[i_node]) {
606  // We check if the node already exists
607  bool add_point = true;
608  for (IndexType iter = 0; iter < rPointList.size(); ++iter) {
609  if (CheckPoints(rThisGeometry[i_node], rPointList[iter])) {
610  add_point = false;
611  }
612  }
613 
614  if (add_point) {
615  const IndexType initial_index = (rThisBelongs == PointBelongs::Master) ? TNumNodes : 0;
616  rPointList.push_back(PointBelong<TNumNodes, TNumNodesMaster>(rThisGeometry[i_node].Coordinates(), static_cast<BelongType>(initial_index + i_node)));
617  }
618  }
619  }
620  }
621 
628  template<SizeType TSizeCheck = TNumNodes>
629  inline void CheckInside(
630  array_1d<bool, TSizeCheck>& rAllInside,
631  GeometryPointType& rGeometry1,
632  GeometryPointType& rGeometry2,
633  const double Tolerance
634  )
635  {
636  for (IndexType i_node = 0; i_node < TSizeCheck; ++i_node) {
637  GeometryType::CoordinatesArrayType projected_gp_local;
638  rAllInside[i_node] = rGeometry1.IsInside( rGeometry2[i_node].Coordinates( ), projected_gp_local, Tolerance) ;
639  }
640  }
641 
647  inline std::vector<IndexType> ComputeAnglesIndexes(
648  PointListType& rPointList,
649  const array_1d<double, 3>& rNormal
650  ) const;
651 
659  inline void ComputeClippingIntersections(
660  PointListType& rPointList,
661  const GeometryPointType& rSlaveGeometry,
662  const GeometryPointType& rMasterGeometry,
663  const PointType& rRefCenter
664  );
665 
678  template <class TGeometryType = GeometryType>
679  inline bool TriangleIntersections(
680  ConditionArrayListType& rConditionsPointsSlave,
681  PointListType& rPointList,
682  const TGeometryType& rOriginalSlaveGeometry,
683  const GeometryPointType& rSlaveGeometry,
684  const GeometryPointType& rMasterGeometry,
685  const array_1d<double, 3>& rSlaveTangentXi,
686  const array_1d<double, 3>& rSlaveTangentEta,
687  const PointType& rRefCenter,
688  const bool IsAllInside = false
689  );
690 
697  static inline bool CheckCenterIsInside(
698  const array_1d<double, 2>& rAuxiliarCenterLocalCoordinates,
699  const SizeType NumNodes = TNumNodes
700  );
701 
705 
709 
714 private:
720 
721  SizeType mIntegrationOrder;
722  double mDistanceThreshold;
723  SizeType mEchoLevel;
724  double mZeroToleranceFactor;
725  IntegrationMethod mAuxIntegrationMethod;
726  bool mConsiderDelaunator;
727 
731 
735 
740 
744 
748 
752 }; // Class ExactMortarIntegrationUtility
753 }
754 #endif /* KRATOS_EXACT_MORTAR_INTEGRATION_UTILITY_H_INCLUDED defined */
This utility calculates the exact integration necessary for the Mortar Conditions.
Definition: exact_mortar_segmentation_utility.h:89
std::conditional< TNumNodes==2, PointBelongsLine2D2N, typename std::conditional< TNumNodes==3, typename std::conditional< TNumNodesMaster==3, PointBelongsTriangle3D3N, PointBelongsTriangle3D3NQuadrilateral3D4N >::type, typename std::conditional< TNumNodesMaster==3, PointBelongsQuadrilateral3D4NTriangle3D3N, PointBelongsQuadrilateral3D4N >::type >::type >::type BelongType
The type of points belongfs to be considered.
Definition: exact_mortar_segmentation_utility.h:95
void PushBackPoints(VectorPoints &rPointList, const array_1d< bool, TSizeCheck > &rAllInside, GeometryPointType &rThisGeometry)
This function push backs the points that are inside.
Definition: exact_mortar_segmentation_utility.h:570
std::conditional< TBelong, VectorArrayPointsBelong, VectorArrayPoints >::type ConditionArrayListType
The type of array of points to be considered depending if we are interested in derivatives or not.
Definition: exact_mortar_segmentation_utility.h:107
PointBelong< TNumNodes, TNumNodesMaster > PointBelongType
The definition of the point with belonging.
Definition: exact_mortar_segmentation_utility.h:98
void SetEchoLevel(const SizeType EchoLevel)
This method sets the current mEchoLevel.
Definition: exact_mortar_segmentation_utility.h:344
bool GetExactIntegration(const GeometryType &rOriginalSlaveGeometry, const array_1d< double, 3 > &rSlaveNormal, const GeometryType &rOriginalMasterGeometry, const array_1d< double, 3 > &rMasterNormal, ConditionArrayListType &rConditionsPointsSlave)
This utility computes the exact integration of the mortar condition (just the points,...
static array_1d< double, 3 > GetNormalVector2D(const array_1d< double, 3 > &rVector)
This function calculates in 2D the normal vector to a given one.
Definition: exact_mortar_segmentation_utility.h:484
std::conditional< TBelong, ArrayPointsBelong, ArrayPoints >::type ArrayTriangleType
The type of arrayt of points to be used depending if we are interested in derivatives or not.
Definition: exact_mortar_segmentation_utility.h:125
SizeType & GetIntegrationOrder()
This method gets the current mIntegrationOrder.
Definition: exact_mortar_segmentation_utility.h:298
double & GetZeroToleranceFactor()
This method gets the current mZeroToleranceFactor.
Definition: exact_mortar_segmentation_utility.h:353
std::vector< array_1d< PointBelongType, TDim > > VectorArrayPointsBelong
An array of points belong.
Definition: exact_mortar_segmentation_utility.h:101
void SetZeroToleranceFactor(const double ZeroToleranceFactor)
This method sets the current mZeroToleranceFactor.
Definition: exact_mortar_segmentation_utility.h:362
void CheckInside(array_1d< bool, TSizeCheck > &rAllInside, GeometryPointType &rGeometry1, GeometryPointType &rGeometry2, const double Tolerance)
This function checks if the points of Geometry2 are inside Geometry1.
Definition: exact_mortar_segmentation_utility.h:629
void PushBackPoints(VectorPointsBelong &rPointList, const array_1d< bool, TSizeCheck > &rAllInside, GeometryPointType &rThisGeometry, const PointBelongs &rThisBelongs)
This function push backs the points that are inside.
Definition: exact_mortar_segmentation_utility.h:597
double & GetDistanceThreshold()
This method gets the current mDistanceThreshold.
Definition: exact_mortar_segmentation_utility.h:317
void SetIntegrationOrder(const SizeType IntegrationOrder)
This method sets the current mIntegrationOrder.
Definition: exact_mortar_segmentation_utility.h:307
static bool CheckAllInside(const array_1d< bool, TSizeCheck > &rAllInside)
This method checks if the whole array is true.
Definition: exact_mortar_segmentation_utility.h:418
std::vector< PointBelongType > VectorPointsBelong
A vector of points for derivatives.
Definition: exact_mortar_segmentation_utility.h:110
static double FastTriagleCheck2D(const PointType &rPointOrig1, const PointType &rPointOrig2, const PointType &rPointOrig3)
This functions calculates the determinant of a 2D triangle (using points) to check if invert the orde...
Definition: exact_mortar_segmentation_utility.h:543
std::conditional< TDim==2, LineType, TriangleType >::type DecompositionType
The geometry that will be considered for decomposition.
Definition: exact_mortar_segmentation_utility.h:134
std::vector< array_1d< PointType, TDim > > VectorArrayPoints
A vector of points.
Definition: exact_mortar_segmentation_utility.h:104
static bool Clipping2D(PointType &rPointIntersection, const PointType &rPointOrig1, const PointType &rPointOrig2, const PointType &rPointDest1, const PointType &rPointDest2)
This function intersects two lines in a 2D plane.
Definition: exact_mortar_segmentation_utility.h:436
array_1d< PointBelongType, 3 > ArrayPointsBelong
An array of points belong.
Definition: exact_mortar_segmentation_utility.h:119
virtual ~ExactMortarIntegrationUtility()=default
Destructor.
Line2D2< Point > LineType
The points line geometry.
Definition: exact_mortar_segmentation_utility.h:128
ExactMortarIntegrationUtility(const SizeType IntegrationOrder=0, const double DistanceThreshold=std::numeric_limits< double >::max(), const SizeType EchoLevel=0, const double ZeroToleranceFactor=1.0, const bool ConsiderDelaunator=false)
This is the default constructor.
Definition: exact_mortar_segmentation_utility.h:154
static double AnglePoints(const PointType &rPointOrig1, const PointType &rPointOrig2, const array_1d< double, 3 > &rAxis1, const array_1d< double, 3 > &rAxis2)
This function calculates in 2D the angle between two points.
Definition: exact_mortar_segmentation_utility.h:503
std::size_t IndexType
The definition of the index type.
Definition: exact_mortar_segmentation_utility.h:137
SizeType & GetEchoLevel()
This method gets the current mEchoLevel.
Definition: exact_mortar_segmentation_utility.h:335
KRATOS_CLASS_POINTER_DEFINITION(ExactMortarIntegrationUtility)
Pointer definition of ExactMortarIntegrationUtility.
static bool CheckPoints(const PointType &rPointOrig, const PointType &rPointDest)
This function checks if two points are the same one.
Definition: exact_mortar_segmentation_utility.h:526
Triangle3D3< Point > TriangleType
The points triangle geometry.
Definition: exact_mortar_segmentation_utility.h:131
void SetConsiderDelaunator(const bool ConsiderDelaunator)
This method sets the current mConsiderDelaunator.
Definition: exact_mortar_segmentation_utility.h:380
bool & GetConsiderDelaunator()
This method gets the current mConsiderDelaunator.
Definition: exact_mortar_segmentation_utility.h:371
std::conditional< TBelong, VectorPointsBelong, VectorPoints >::type PointListType
The type of vector of points to be considered depending if we are interested in define derivatives or...
Definition: exact_mortar_segmentation_utility.h:116
std::vector< PointType > VectorPoints
A vector of normal points.
Definition: exact_mortar_segmentation_utility.h:113
array_1d< PointType, 3 > ArrayPoints
An array of normal points.
Definition: exact_mortar_segmentation_utility.h:122
void SetDistanceThreshold(const double DistanceThreshold)
This method sets the current mDistanceThreshold.
Definition: exact_mortar_segmentation_utility.h:326
IntegrationMethod
Definition: geometry_data.h:76
Geometry base class.
Definition: geometry.h:71
std::vector< IntegrationPointType > IntegrationPointsArrayType
Definition: geometry.h:161
virtual bool IsInside(const CoordinatesArrayType &rPointGlobalCoordinates, CoordinatesArrayType &rResult, const double Tolerance=std::numeric_limits< double >::epsilon()) const
Checks if given point in global space coordinates is inside the geometry boundaries....
Definition: geometry.h:1918
Short class definition.
Definition: integration_point.h:52
An two node 2D line geometry with linear shape functions.
Definition: line_2d_2.h:65
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
Custom Point container to be used by the mapper.
Definition: mortar_classes.h:1952
Point class.
Definition: point.h:59
CoordinatesArrayType const & Coordinates() const
Definition: point.h:215
double Distance(const Point &rOtherPoint) const
This method computes the distance between this point and another one.
Definition: point.h:166
double Y() const
Definition: point.h:187
double X() const
Definition: point.h:181
A three node 3D triangle geometry with linear shape functions.
Definition: triangle_3d_3.h:77
Short class definition.
Definition: array_1d.h:61
static int EchoLevel
Definition: co_sim_EMPIRE_API.h:42
static double max(double a, double b)
Definition: GeometryFunctions.h:79
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
TExpressionType::data_type norm_2(AMatrix::MatrixExpression< TExpressionType, TCategory > const &TheExpression)
Definition: amatrix_interface.h:625
GeometryData::IntegrationMethod IntegrationMethod
Type definition for integration methods.
Definition: exact_mortar_segmentation_utility.h:57
Geometry< PointType > GeometryPointType
Definition: exact_mortar_segmentation_utility.h:54
Node NodeType
The definition of the node.
Definition: tetrahedral_mesh_orientation_check.h:34
TExpression1Type::data_type inner_prod(AMatrix::MatrixExpression< TExpression1Type, TCategory1 > const &First, AMatrix::MatrixExpression< TExpression2Type, TCategory2 > const &Second)
Definition: amatrix_interface.h:592
Geometry< Node > GeometryType
The definition of the geometry.
Definition: mortar_classes.h:37
PointBelongs
This enum defines a "hash" used to identify in which combination of cuts the point is found when the ...
Definition: mortar_classes.h:56
std::size_t SizeType
The definition of the size type.
Definition: mortar_classes.h:43
typename GeometryType::IntegrationPointsArrayType IntegrationPointsType
Definition: mortar_classes.h:40
Point PointType
Geometric definitions.
Definition: mortar_classes.h:36
IntegrationPoint< 2 > IntegrationPointType
Definition: exact_mortar_segmentation_utility.h:58
type
Definition: generate_gid_list_file.py:35
int t
Definition: ode_solve.py:392