GemaCoreLib
The GeMA Core library
gmDiscontinuitySet.h
Go to the documentation of this file.
1 /************************************************************************
2 **
3 ** Copyright (C) 2023 by Carlos Augusto Teixeira Mendes
4 ** All rights reserved.
5 **
6 ** This file is part of the "GeMA" software. It's use should respect
7 ** the terms in the license agreement that can be found together
8 ** with this source code.
9 ** It is provided AS IS, with NO WARRANTY OF ANY KIND,
10 ** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
11 ** A PARTICULAR PURPOSE.
12 **
13 ************************************************************************/
14 
24 #ifndef _GEMA_DISCONTINUITY_SET_H_
25 #define _GEMA_DISCONTINUITY_SET_H_
26 
27 #include "gmLog.h"
28 
29 #include <QVector>
30 #include <unit.h>
31 
32 class GmDiscontinuity;
37 class GmCell;
38 class GmCellMesh;
39 class GmValueSet;
40 class GmPropertySet;
41 class GmValueInfo;
42 class GmSimulationData;
43 class GmSpatialIndex;
44 class LuaTable;
45 
46 
49 {
50 public:
53  {
58  // -- If changes are made to this enum, please remember to adjust
59  // discontinuityTypeToStr()
60  };
61 
68 
70 
72  QString id() const { return _id; }
73 
75  QString description() const { return _description; }
76 
78  DiscontinuityType type() const { return _type; }
79 
81  GmCellMesh* mesh() const { return _mesh; }
82 
84  GmSpatialIndex* spatialIndex() const { return _index; }
85 
87  bool autoAddElements() const { return _addElements; }
88 
90  bool extraDofsInAddedElements() const { return _addedInterfElemHaveExtraDofs; }
91 
93  double snapTolerance() const { return _snapTol; }
94 
96  bool noInternalNodes() const { return _noInternalNodes; }
97 
99  bool internalIntersections() const { return _internalIntersections; }
100 
102  bool discardOriginalGeometry() const { return _discardOriginalGeometry; }
103 
105  int numDiscontinuities() const { return _data.size(); }
106 
108  const QVector<GmDiscontinuity*>& discontinuities() const { return _data; }
109 
110  int discontinuityIndex(QString id) const;
111 
113  GmDiscontinuity* discontinuity(int index) { return _data[index]; }
114 
116  const GmDiscontinuity* discontinuity(int index) const { return _data[index]; }
117 
118  QStringList attributeIds() const;
119  GmValueInfo* attributeInfo (QString id) const;
120  GmDiscontinuityAccessor* attributeAccessor (QString id, Unit desiredUnit, const GmLogCategory& logger) const;
121  GmDiscontinuityAccessor* attributeAccessor (QString id, int snum, bool locked, Unit desiredUnit, const GmLogCategory& logger) const;
122  int numAttributeStates(QString id) const;
123 
125  int numPropertySets() const { return _propertySets.size(); }
126 
134  const QVector<GmPropertySet*>& propertySets() const { return _propertySets; }
135 
136  int propertySetIndex(QString id) const;
137 
138  GmValueInfo* propertyInfo (QString id) const;
139  GmDiscontinuityAccessor* propertyAccessor(QString id, Unit desiredUnit, const GmLogCategory& logger) const;
140 
141  bool buildIntersectionMaps(const GmLogCategory& logger);
142 
143  const SegmentCell2DIntersectionList& cell2DPolylineIntersections(const GmCell* c) const;
144  GmSegmentCell2DIntersectionCoordAccessor* cell2DPolylineCoordAccessor(Unit desiredUnit, const GmLogCategory& logger) const;
145 
146  static GmDiscontinuitySet* loadFromTable(LuaTable& tab, GmSimulationData* data, const GmLogCategory& logger);
147 
148  void printParameters(const GmLogCategory& logger, GmLogLevel level) const;
149  void print (const GmLogCategory& logger, GmLogLevel level) const;
150 
151  size_t printMemoryStatistics(const GmLogCategory& logger, GmLogLevel level) const;
152  size_t usedMemory() const;
153 
154  static QString discontinuityTypeToStr(DiscontinuityType type);
155 
156 private:
157  GmDiscontinuitySet(QString id, QString description, DiscontinuityType type, GmCellMesh* mesh,
158  GmSpatialIndex* index, bool addElements, bool extraDofs, double snapTol,
159  bool noInternalNodes, bool internalIntersections, bool discardOriginalGeometry);
160 
161  bool add2DSegmentCellIntersectionsToMesh(const GmLogCategory& logger);
162  bool break2DPolylinesAtIntersections(const GmLogCategory& logger);
163 
164  bool loadGeometry(GmDiscontinuity* d, LuaTable& tab, DiscontinuityType type, const GmCellMesh* mesh, const GmLogCategory& logger);
165  template <class T, class V> T* loadIntoVector(LuaTable& tab, V validator, int n, QString discontinuityId, const char* msg, const GmLogCategory& logger);
166 
167  size_t usedElementMapMemory() const;
168 
169  Q_DISABLE_COPY(GmDiscontinuitySet);
170 
178  double _snapTol;
182 
188 
191 };
192 
193 
194 #endif // _GEMA_DISCONTINUITY_SET_H_
QString id() const
Returns the discontinuity set name.
Definition: gmDiscontinuitySet.h:72
Auxiliar class used to store the definition of a value. It can be used to store informations about st...
Definition: gmValueInfo.h:126
Interface storing property descriptions and values.
Definition: gmPropertySet.h:37
GmCellMesh * _mesh
The mesh that this discontinuity set is tied to.
Definition: gmDiscontinuitySet.h:174
A simple accessor used to access 2d segment cell intersection data with possible unit conversion from...
Definition: gmDiscontinuityAccessor.h:151
QString description() const
Returns the discontinuity set description.
Definition: gmDiscontinuitySet.h:75
Basic class used to store sets of values, bound to a common definition, on behalf of another object (...
Definition: gmValueSet.h:53
Representation for the intersection between a polyline segment and a mesh cell. Can be used both in 2...
Definition: gmSegmentCellIntersection.h:58
bool _addedInterfElemHaveExtraDofs
Should added interface elements for EDGELIST/FACELIST have extra dof nodes?
Definition: gmDiscontinuitySet.h:177
QVector< GmDiscontinuity * > _data
The list with discontinuity data.
Definition: gmDiscontinuitySet.h:185
Base interface for mesh cells.
Definition: gmCell.h:81
double snapTolerance() const
Returns the percentual tolerance used for snapping intersection points to nodes, edges or faces.
Definition: gmDiscontinuitySet.h:93
GmDiscontinuity * discontinuity(int index)
Returns the given discontinuity. Index shoulde be between 0 and numDiscontinuities() - 1.
Definition: gmDiscontinuitySet.h:113
bool noInternalNodes() const
Return true if internal intersections between segments are "broken".
Definition: gmDiscontinuitySet.h:96
QVarLengthArray< GmCompact2DSegmentCellIntersection *, 1 > SegmentCell2DIntersectionList
Type for storing the set of 2D polyline-element intersections We use a QVarLengthArray since it has a...
Definition: gmDiscontinuitySet.h:67
QMap< QString, int > _attributesMap
Maps attribute ids to their indices in _attributes.
Definition: gmDiscontinuitySet.h:186
DiscontinuityType
Discontinuity type (defining how the disc. geometry is defined)
Definition: gmDiscontinuitySet.h:52
Auxiliar class used to store the complete set of simulation data.
Definition: gmSimulationData.h:51
QString _id
The discontinuity set id (name)
Definition: gmDiscontinuitySet.h:171
bool _discardOriginalGeometry
Flag controlling if the original geometry should be discarded after intersection handling for memory ...
Definition: gmDiscontinuitySet.h:181
GmSpatialIndex * _index
The optional spatial index used to speedup queries.
Definition: gmDiscontinuitySet.h:175
double _snapTol
The percentual snap tolerance for atracting intersection points to nodes, edges or faces.
Definition: gmDiscontinuitySet.h:178
The geometric representation for a single discontinuity from the Discontinuity set....
Definition: gmDiscontinuity.h:35
The disc. geometry is given by a polyline. Inserted elements are bars.
Definition: gmDiscontinuitySet.h:54
Base interface class for CellMesh type plugins.
Definition: gmCellMesh.h:39
Base interface class for Spatial Index type plugins.
Definition: gmSpatialIndex.h:37
The disc. geometry is given by a trinagulated surface. Inserted elements are triangles or quads.
Definition: gmDiscontinuitySet.h:55
int numPropertySets() const
Returns the number of property sets attached to this discontinuity set.
Definition: gmDiscontinuitySet.h:125
QString _description
A description of the discontinuity set.
Definition: gmDiscontinuitySet.h:172
const GmDiscontinuity * discontinuity(int index) const
Returns the given discontinuity as a const object. Index shoulde be between 0 and numDiscontinuities(...
Definition: gmDiscontinuitySet.h:116
The disc. geometry is given by a face list. Inserted elements are 3d interface elements.
Definition: gmDiscontinuitySet.h:57
bool discardOriginalGeometry() const
Returns true if the original intersection geometry data will be discarded after intersection handling...
Definition: gmDiscontinuitySet.h:102
bool _noInternalNodes
Flag controlling if internal nodes are allowed (false) or not (true) in the intersection segments.
Definition: gmDiscontinuitySet.h:179
bool autoAddElements() const
Returns true if the dicontinuity-cell intersections are added as new elements to the mesh.
Definition: gmDiscontinuitySet.h:87
QVector< GmValueSet * > _attributes
List with the set of defined attribute values.
Definition: gmDiscontinuitySet.h:183
void print(const GmMatrix &m, const GmLogCategory &logger, GmLogLevel level, int fieldWidth, char format, int precision)
Prints the matrix using the specified logger, level and precision fields.
Definition: gmMatrixUtils.cpp:34
DiscontinuityType type() const
Returns the discontinuity geometry definition type.
Definition: gmDiscontinuitySet.h:78
#define GMC_API_EXPORT
Macro for controling if the class is being exported (GEMA_CORE_LIB defined) or imported (GEMA_CORE_LI...
Definition: gmCoreConfig.h:35
A (much more) compact version of GmSegmentCellIntersection for 2d intersections only....
Definition: gmSegmentCellIntersection.h:105
QMap< int, SegmentCell2DIntersectionList > _elementPolylineIntersectionsMap
The map with per element intersections with polyline discontinuities.
Definition: gmDiscontinuitySet.h:190
GmLogLevel
Available log levels list.
Definition: gmLog.h:36
int numDiscontinuities() const
Returns the number of discontinuities (lines) stored in the object.
Definition: gmDiscontinuitySet.h:105
Class representing a category with multiple logging levels.
Definition: gmLog.h:58
The GmDiscontinuityAccessor class is a proxy object to a value accesor implementing a more convenient...
Definition: gmDiscontinuityAccessor.h:47
The disc. geometry is given by an edge list. Inserted elements are 2d interface elements.
Definition: gmDiscontinuitySet.h:56
Base interface for providing discontinuity geometry information for spatial indices.
Definition: gmDiscontinuitySet.h:48
bool extraDofsInAddedElements() const
Returns true if added interface elements for type() == EDGELIST or FACELIST should have extra dof nod...
Definition: gmDiscontinuitySet.h:90
QMap< QString, int > _dataMap
Maps discontinuity names to their indices in _data.
Definition: gmDiscontinuitySet.h:187
GmSpatialIndex * spatialIndex() const
Returns the mesh spatial index that this discontinuity set is tied to.
Definition: gmDiscontinuitySet.h:84
GmCellMesh * mesh() const
Returns the mesh that this discontinuity set is tied to.
Definition: gmDiscontinuitySet.h:81
bool _addElements
Should we automatically add the discontinuity geometry - cell intersections as elements to the mesh?
Definition: gmDiscontinuitySet.h:176
const QVector< GmDiscontinuity * > & discontinuities() const
Returns the stored list of discontinuities.
Definition: gmDiscontinuitySet.h:108
bool _internalIntersections
Flag controlling if internal intersections should be handled or not.
Definition: gmDiscontinuitySet.h:180
QVector< GmPropertySet * > _propertySets
List with the associated property sets.
Definition: gmDiscontinuitySet.h:184
DiscontinuityType _type
The type of the discontinuities geometric data.
Definition: gmDiscontinuitySet.h:173
const QVector< GmPropertySet * > & propertySets() const
Returns a reference to the list of property sets associated to this set.
Definition: gmDiscontinuitySet.h:134
Declaration of support functions and macros for information logging.