GemaPCR
The GeMA PCR (Partition-Color-Renumber) Plugin
Loading...
Searching...
No Matches
gmpGemaCR.h
Go to the documentation of this file.
1/************************************************************************
2**
3** Copyright (C) 2014 by Carlos Augusto Teixera 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_PLUGIN_GEMA_CR_H_
25#define _GEMA_PLUGIN_GEMA_CR_H_
26
27#include <gmPCR.h>
28#include <gmCellMesh.h>
29
30#include "gmpGemaPCRConfig.h"
31
32
48
51{
52public:
53
62
63 GmpColoringMethod(GmPCR::ColorType colorType, bool partition, HaloColoring haloOption, const QVariantMap& options)
64 : _colorType(colorType), _partition(partition), _haloOption(haloOption), _options(options) {}
65
70 virtual bool checkOptions(const GmLogCategory& logger) = 0;
71
73 virtual void printParameters(const GmLogCategory& logger) const = 0;
74
84 virtual void color(GmpColorData* colorData, const GmLogCategory& logger) const = 0;
85
86protected:
90 const QVariantMap& _options;
91};
92
97template <class IntVector>
99{
100public:
101 GmpNodeRenumberingMethod(const QVariantMap& options) : _options(options) {}
102
107 virtual bool checkOptions(const GmLogCategory& logger) = 0;
108
110 virtual void printParameters(const GmLogCategory& logger) const = 0;
111
117 virtual bool renumber(GmValueAccessor* ac, IntVector& sortedToOriginal, const GmLogCategory& logger) const = 0;
118
119protected:
120 const QVariantMap& _options;
121};
122
127template <class IntVector>
129{
130public:
131 GmpCellRenumberingMethod(const QVariantMap& options) : _options(options) {}
132
137 virtual bool checkOptions(const GmLogCategory& logger) = 0;
138
140 virtual void printParameters(const GmLogCategory& logger) const = 0;
141
147
154 virtual bool renumber(GmPCR* pcr, IntVector& sortedToOriginal, const GmLogCategory& logger) const = 0;
155
162 virtual bool usesSequentialColoring() const = 0;
163
164protected:
165 const QVariantMap& _options;
166};
167
168// A macro to define th SR version of a "original to local" function
169// The first parameter is the original function name. The second and third
170// should be either, nodeClass + REMOTE_NODE or cellClass + REMOTE_HALO_CELL,
171// depending on the original function being a node or cell function.
172#define MAKE_SR_FUNCTION(mainFunctionName, classFunction, classValue) \
173 virtual int mainFunctionName##SR(int id) const \
174 { \
175 if constexpr(Partition) \
176 { \
177 if(!_skipRemote) \
178 return mainFunctionName(id); \
179 int localId = mainFunctionName##Impl(id); \
180 if(localId >= 0 && classFunction(localId) == classValue) \
181 return -1; \
182 return localId; \
183 } \
184 else \
185 return mainFunctionName(id); \
186 }
187
208template <template <class> class Vector, bool Partition>
209class GMP_GEMA_PCR_API_EXPORT GmpGemaCRBase : public GmPCR
210{
211public:
212
214 GmpGemaCRBase(GmSimulationData* simulation, QString id, QString description, const GmLogCategory& logger)
215 : GmPCR(simulation, id, description, logger), _mesh(NULL),
216 _coloringType(NO_COLORING), _nodeRenumberRequested(true), _cellRenumberRequested(true),
217 _isNodeRenumbered(false), _isCellRenumbered(false), _skipRemote(false), _noColorData(NULL), _colorMethod(NULL),
218 _nodeRenumberMethod(NULL), _cellRenumberMethod(NULL), _numGeomNodes(0), _numOriginalGeomNodes(0)
219 {
220 if constexpr(Partition)
221 {
222 _part._partitioned = false; // Can't be initialized above since this field only exists if Partition is true
223 _part._nodesRenumbered = false;
224 _part._cellsRenumbered = false;
225 }
226 }
227
228 virtual ~GmpGemaCRBase();
229
230 // Comments on the base class
231 virtual const char* pluginName() const { return "GemaPCR"; }
232
233 // Comments on the base class
234 virtual const char* pluginType() const { if constexpr(std::is_same<Vector<int>, GmSingleVector<int>>::value) return "cr"; else return "crd"; }
235
236 virtual bool loadPrivateData(LuaTable& table);
237
238 virtual void printParameters(const GmLogCategory& logger);
239
240 // Comments on the base class
241 virtual bool hasCapability(QString capabilityName) const { return capabilityName == "femColoring" || capabilityName == "fvmColoring" || capabilityName == "renumbering"; }
242
243 // Comments on the base class
244 virtual GmMesh* mesh() const { return _mesh; }
245
246 virtual bool setMesh(GmMesh* mesh);
247
248 virtual size_t printMemoryStatistics(const GmLogCategory& logger, GmLogLevel level) const;
249
251 virtual size_t usedMemory() const { return nodeRenumberMemory() + cellRenumberMemory() + colorMemory() + partitionMemory(); }
252
253 // --------------------------------------
254 // -- Partition (identity) --------------
255 // --------------------------------------
256
257 // See comments on the base class
258 virtual int numPartitions() const { return 1; }
259 virtual int partition() const { return 0; }
260 virtual int numGlobalNodes() const { assert(_mesh); return _mesh->numNodes(); }
261 virtual int numGlobalGhostNodes() const { assert(_mesh); return _mesh->numGhostNodes(); }
262 virtual int numGlobalCells() const { assert(_mesh); GmCellMesh* cmesh = dynamic_cast<GmCellMesh*>(_mesh); return cmesh ? cmesh->numCells() : 0; }
263
264 virtual CellClass cellClass (int cellId) const { Q_UNUSED(cellId); return MY_CELL; }
265 virtual int cellClassData (int cellId) const { Q_UNUSED(cellId); return 0; }
266 virtual int numCellsInClass(CellClass cellClass) const { Q_UNUSED(cellClass); return 0; }
267 virtual NodeClass nodeClass (int nodeId) const { Q_UNUSED(nodeId); return MY_NODE; }
268 virtual int nodeClassData (int nodeId) const { Q_UNUSED(nodeId); return 0; }
269 virtual int numNodesInClass(NodeClass nodeClass, GmCellFillMode mode = GM_CELL_NODES) const { Q_UNUSED(nodeClass); Q_UNUSED(mode); return 0; }
270 virtual int numRemoteRanks (int templateIndex) const { Q_UNUSED(templateIndex); return 0; }
271 virtual const int* remoteRanks (int templateIndex) const { Q_UNUSED(templateIndex); return NULL; }
272 virtual bool skipRemote () const { return _skipRemote; }
273 virtual bool addPartitionInfoAsMeshAttributes (QString cellAttrPrefix, QString nodeAttrPrefix) { Q_UNUSED(cellAttrPrefix); Q_UNUSED(nodeAttrPrefix); return false; }
274 virtual bool addDebugPartitionInfoAsMeshAttributes(QString cellAttrPrefix, QString nodeAttrPrefix) { Q_UNUSED(cellAttrPrefix); Q_UNUSED(nodeAttrPrefix); return false; }
275 virtual void printPartitionRankTemplateData (const GmLogCategory& logger) const { Q_UNUSED(logger); }
276 virtual void printPartitionClassStatistics (const GmLogCategory& logger) const { Q_UNUSED(logger); }
277
278 // --------------------------------------
279 // -- Coloring --------------------------
280 // --------------------------------------
281
282 // See comments on the base class
283 virtual ColorType coloringType() const { return _coloringType; }
284
285 // See comments on the base class
286 virtual ColorState coloringState(const GmCellGroupSet* gs) { return colorData(gs)->_state; }
287
288 // See comments on the base class
289 virtual const QVector<GmCellGroupSet*>& coloredSets(const GmCellGroupSet* gs) { return colorData(gs)->_coloredSets; }
290
291 // See comments on the base class
292 virtual const GmCellGroupSet* sequentialSet(const GmCellGroupSet* gs)
293 {
294 const GmpColorData* cd = colorData(gs);
295 return cd->_state == NOT_COLORED ? gs : cd->_seqSet;
296 }
297
298 // See comments on the base class
299 virtual const QVector<GmCellGroupSet*>& coloredHaloSets(const GmCellGroupSet* gs) { return colorData(gs)->_coloredHaloSets; }
300
301 // See comments on the base class
302 virtual const GmCellGroupSet* sequentialHaloSet(const GmCellGroupSet* gs) { return colorData(gs)->_seqHaloSet; }
303
304 // See comments on the base class
305 virtual bool addColoringAsMeshAttribute(const GmCellGroupSet* gs, QString attrName) { return addColoringAsMeshAttribute(QVector{gs}, attrName); }
306
307 virtual bool addColoringAsMeshAttribute(const QVector<const GmCellGroupSet*>& gsets, QString attrName);
308
309 virtual void printColoringStatistics(const GmLogCategory& logger) const;
310
311 // --------------------------------------
312 // -- Renumbering -----------------------
313 // --------------------------------------
314
315 virtual bool nodesRenumbered() const { return _isNodeRenumbered; }
316 virtual bool cellsRenumbered() const { return _isCellRenumbered; }
317
318 virtual int originalToLocalOrderNode (int originalNodeId) const { return _isNodeRenumbered ? originalToLocalOrderNodeImpl(originalNodeId) : originalNodeId; }
319 virtual int originalToLocalOrderGeomNode (int originalNodeId) const { return _isNodeRenumbered ? originalToLocalOrderGeomNodeImpl(originalNodeId) : originalNodeId; }
320 virtual int originalToLocalOrderGhostNodeHighSet (int originalNodeId) const { return _isNodeRenumbered ? originalToLocalOrderGhostNodeHighSetImpl(originalNodeId) : originalNodeId; }
321 virtual int originalToLocalOrderGhostNodeHighClear(int originalNodeId) const { return _isNodeRenumbered ? originalToLocalOrderGhostNodeHighClearImpl(originalNodeId) : originalNodeId; }
322
323 virtual int localOrderToOriginalNode (int nodeId) const { return _isNodeRenumbered ? localOrderToOriginalNodeImpl(nodeId) : nodeId; }
324 virtual int localOrderToOriginalGeomNode (int nodeId) const { return _isNodeRenumbered ? localOrderToOriginalGeomNodeImpl(nodeId) : nodeId; }
325 virtual int localOrderToOriginalGhostNodeHighSet (int nodeId) const { return _isNodeRenumbered ? localOrderToOriginalGhostNodeHighSetImpl(nodeId) : nodeId; }
326 virtual int localOrderToOriginalGhostNodeHighClear(int nodeId) const { return _isNodeRenumbered ? localOrderToOriginalGhostNodeHighClearImpl(nodeId) : nodeId; }
327
328 virtual int originalToLocalOrderCell(int originalCellId) const { return _isCellRenumbered ? originalToLocalOrderCellImpl(originalCellId) : originalCellId; }
329 virtual int localOrderToOriginalCell(int cellId) const { return _isCellRenumbered ? localOrderToOriginalCellImpl(cellId) : cellId; }
330
331 // Automatically creates SR versions for the originalToLocal methods above. See the macro definition above
332 MAKE_SR_FUNCTION(originalToLocalOrderNode, nodeClass, REMOTE_NODE);
333 MAKE_SR_FUNCTION(originalToLocalOrderGeomNode, nodeClass, REMOTE_NODE);
334 MAKE_SR_FUNCTION(originalToLocalOrderGhostNodeHighSet, nodeClass, REMOTE_NODE);
335 MAKE_SR_FUNCTION(originalToLocalOrderGhostNodeHighClear, nodeClass, REMOTE_NODE);
336 MAKE_SR_FUNCTION(originalToLocalOrderCell, cellClass, REMOTE_HALO_CELL);
337
338 virtual int originalNodeTraversalOrder(int i) const { return _isNodeRenumbered ? originalNodeTraversalOrderImpl(i) : i; }
339 virtual int originalCellTraversalOrder(int i) const { return _isCellRenumbered ? originalCellTraversalOrderImpl(i) : i; }
340
341 // -------------------------------------------------
342 // Initialization, control and dump API used by the mesh
343 // -------------------------------------------------
344 virtual bool initPartitions(int numPartitions, int partition) { Q_UNUSED(numPartitions); Q_UNUSED(partition); return false; }
345
346 virtual bool initNodeMapping(GmValueAccessor* ac, bool ghost, bool* renumbered,
347 QMap<int, int>& partOrigToLocOrder);
348 virtual bool initCellMapping(bool* renumbered, QMap<int, int>& partOrigToLocOrder,
349 QVector<int>& partLocToOrigOrder);
350
351 // See comments on the base class
352 virtual QStringList cellMappingRequiredGroups() { return _cellRenumberMethod ? _cellRenumberMethod->cellMappingRequiredGroups() : QStringList(); }
353
354 virtual bool addNodes(int numNodes);
355 virtual bool addGhostNodes(int numGhostNodes);
356 virtual bool addCells(int numCells);
357
358 virtual void clear();
359
360 virtual bool addStateGeometryData(GmStateDump* state, int groupId);
361 virtual bool fillDumpControlMapData(QVariantMap* map, const GmLogCategory& logger);
362 virtual bool dumpControlMapDataLoaded(QVariantMap* map, const GmLogCategory& logger);
363
364protected:
366 using IntVector = Vector<int>;
367
369 using IntVectorOrMap = std::conditional_t<Partition, QMap<int, int>, Vector<int>>;
370
371 bool initMappingFromPartition(const IntVector& cells, const IntVector& geomNodes, const IntVector& ghostNodes);
372
373 virtual size_t nodeRenumberMemory() const;
374 virtual size_t cellRenumberMemory() const;
375 virtual size_t colorMemory() const;
376 virtual size_t partitionMemory() const { return 0; }
377
383 {
384 return addAttributeToMesh<GmValueAccessor, GM_NODE_ATTRIBUTE>(name, description, type);
385 }
386
389 {
390 return addAttributeToMesh<GmCellAccessor, GM_CELL_ATTRIBUTE>(name, description, type);
391 }
392
393private:
394 const GmpColorData* colorData(const GmCellGroupSet* gs);
395 void renumberColoredGroupSets(const QVector<int>& partLocToOrigOrder);
396
397 inline int originalToLocalOrderNodeImpl (int originalNodeId) const;
398 inline int originalToLocalOrderGeomNodeImpl (int originalNodeId) const;
399 inline int originalToLocalOrderGhostNodeHighSetImpl (int originalNodeId) const;
400 inline int originalToLocalOrderGhostNodeHighClearImpl(int originalNodeId) const;
401 inline int originalToLocalOrderCellImpl (int originalCellId) const;
402
403 inline int localOrderToOriginalNodeImpl (int nodeId) const;
404 inline int localOrderToOriginalGeomNodeImpl (int nodeId) const;
405 inline int localOrderToOriginalGhostNodeHighSetImpl (int nodeId) const;
406 inline int localOrderToOriginalGhostNodeHighClearImpl(int nodeId) const;
407 inline int localOrderToOriginalCellImpl (int cellId) const;
408
409 inline int originalNodeTraversalOrderImpl(int i) const;
410 inline int originalCellTraversalOrderImpl(int i) const;
411
412 bool initGeomNodeMapping (GmValueAccessor* ac, bool* renumbered);
413 bool initGhostNodeMapping(GmValueAccessor* ac, bool* renumbered);
414
415 void initReverseMapping(const IntVector& localToOriginal, IntVectorOrMap& originalToLocal);
416 void initOrdering (const IntVectorOrMap& originalToLocal, IntVector& orderVec);
417
418 bool addVectors (size_t numAddedEntries, IntVector* localToOriginal, IntVectorOrMap* originalToLocal, IntVector* orderVec);
419 bool addAndInitVectors(size_t numAddedEntries, IntVector* localToOriginal, IntVectorOrMap* originalToLocal, IntVector* orderVec,
420 int localToOriginalInit, int originalToLocalInit, int orderVecInit);
421
422 template <class Ac, GmValueSetKind SetKind>
423 Ac* addAttributeToMesh(QString name, QString description, GmStorageType type);
424
425protected:
426 QVariantMap _options;
439
442
449
456
465
470
479
480
486 struct PartitionFalse { };
487
531
532 using PartitionT = std::conditional_t<Partition, PartitionTrue, PartitionFalse>;
533
535 PartitionT _part;
536};
537
540
543
544
545#endif
virtual int numCells() const=0
virtual void printPartitionClassStatistics(const GmLogCategory &logger) const=0
virtual int originalToLocalOrderCell(int originalCellId) const=0
virtual int partition() const=0
virtual int nodeClassData(int nodeId) const=0
virtual bool addPartitionInfoAsMeshAttributes(QString cellAttrPrefix, QString nodeAttrPrefix)=0
virtual const int * remoteRanks(int templateIndex) const=0
virtual int originalToLocalOrderNode(int originalNodeId) const=0
virtual int originalNodeTraversalOrder(int i) const=0
virtual int numGlobalCells() const=0
virtual int numGlobalGhostNodes() const=0
virtual const QVector< GmCellGroupSet * > & coloredHaloSets(const GmCellGroupSet *gs)=0
virtual bool addNodes(int numNodes)=0
virtual QStringList cellMappingRequiredGroups()=0
virtual int localOrderToOriginalGeomNode(int nodeId) const=0
virtual bool setMesh(GmMesh *mesh)=0
virtual bool initCellMapping(bool *renumbered, QMap< int, int > &partOrigToLocOrder, QVector< int > &partLocToOrigOrder)=0
virtual bool cellsRenumbered() const=0
virtual ColorState coloringState(const GmCellGroupSet *gs)=0
virtual bool addCells(int numCells)=0
virtual const QVector< GmCellGroupSet * > & coloredSets(const GmCellGroupSet *gs)=0
virtual bool initPartitions(int numPartitions, int partition)=0
virtual void printPartitionRankTemplateData(const GmLogCategory &logger) const=0
virtual int originalToLocalOrderGhostNodeHighSet(int originalNodeId) const=0
virtual int originalToLocalOrderGhostNodeHighClear(int originalNodeId) const=0
virtual bool hasCapability(QString capabilityName) const=0
virtual const GmCellGroupSet * sequentialSet(const GmCellGroupSet *gs)=0
virtual bool skipRemote() const=0
virtual GmMesh * mesh() const=0
virtual int cellClassData(int cellId) const=0
virtual void clear()=0
virtual int originalToLocalOrderGeomNode(int originalNodeId) const=0
virtual CellClass cellClass(int cellId) const=0
virtual size_t printMemoryStatistics(const GmLogCategory &logger, GmLogLevel level) const=0
virtual int localOrderToOriginalGhostNodeHighClear(int nodeId) const=0
virtual bool nodesRenumbered() const=0
virtual void printColoringStatistics(const GmLogCategory &logger) const=0
virtual int numRemoteRanks(int templateIndex) const=0
virtual bool addDebugPartitionInfoAsMeshAttributes(QString cellAttrPrefix, QString nodeAttrPrefix)=0
virtual int originalCellTraversalOrder(int i) const=0
virtual int localOrderToOriginalNode(int nodeId) const=0
virtual const GmCellGroupSet * sequentialHaloSet(const GmCellGroupSet *gs)=0
virtual bool addGhostNodes(int numGhostNodes)=0
virtual ColorType coloringType() const=0
virtual int localOrderToOriginalCell(int cellId) const=0
virtual NodeClass nodeClass(int nodeId) const=0
virtual int numPartitions() const=0
virtual bool addColoringAsMeshAttribute(const GmCellGroupSet *gs, QString attrName)=0
virtual int numNodesInClass(NodeClass nodeClass, GmCellFillMode mode=GM_CELL_NODES) const=0
virtual int localOrderToOriginalGhostNodeHighSet(int nodeId) const=0
virtual int numGlobalNodes() const=0
virtual int numCellsInClass(CellClass cellClass) const=0
virtual bool initNodeMapping(GmValueAccessor *ac, bool ghost, bool *renumbered, QMap< int, int > &partOrigToLocOrder)=0
virtual void printParameters(const GmLogCategory &logger)
virtual const char * pluginType() const=0
virtual bool loadPrivateData(LuaTable &table)=0
virtual const char * pluginName() const=0
The abstract interface for a cell renumbering method implementation. Template parameter is the type f...
Definition gmpGemaCR.h:129
const QVariantMap & _options
The user provided options.
Definition gmpGemaCR.h:165
virtual bool checkOptions(const GmLogCategory &logger)=0
Virtual method responsible for validating the parameters supplied on the class constructor....
virtual bool renumber(GmPCR *pcr, IntVector &sortedToOriginal, const GmLogCategory &logger) const =0
The cell renumbering function. It gets as input parameter a pointer to the PCR object so that it can ...
virtual void printParameters(const GmLogCategory &logger) const =0
Virtual method responsible for printing the renumbering method description.
virtual QStringList cellMappingRequiredGroups() const =0
Returns the list of cell group names required for the cell renumbering, if that is the case....
virtual bool usesSequentialColoring() const =0
Virtual method that should return true if the renumbering is based on sequentially numbering the cell...
The abstract interface for a coloring method implementation.
Definition gmpGemaCR.h:51
HaloColoring _haloOption
How do we color halo cells if the mesh was partitioned?
Definition gmpGemaCR.h:89
HaloColoring
How to color halo cells for partitioned meshes.
Definition gmpGemaCR.h:56
@ HC_TOGETHER
Regular and halo cells are colored together. Remote cells are ignored.
Definition gmpGemaCR.h:57
@ HC_SPLIT_REMOTE
Regular cells are colored in a group, halo and remote in another.
Definition gmpGemaCR.h:60
@ HC_SPLIT
Regular and halo cells are colored separately. Remote cells are ignored.
Definition gmpGemaCR.h:59
@ HC_TOGETHER_REMOTE
All cells are colored together, including remote cells.
Definition gmpGemaCR.h:58
virtual void printParameters(const GmLogCategory &logger) const =0
Virtual method responsible for printing the coloring method description.
virtual void color(GmpColorData *colorData, const GmLogCategory &logger) const =0
The coloring function. It gets as parameters a GmpColorData object with the _srcGroup filled and _sta...
GmPCR::ColorType _colorType
The requested coloring type.
Definition gmpGemaCR.h:87
const QVariantMap & _options
The user provided options.
Definition gmpGemaCR.h:90
bool _partition
Was the mesh partitioned?
Definition gmpGemaCR.h:88
virtual bool checkOptions(const GmLogCategory &logger)=0
Virtual method responsible for validating the parameters supplied on the class constructor....
An implementation of the CR (color and renumbering) object interface. The partition interface does no...
Definition gmpGemaCR.h:210
GmValueAccessor * addNodeAttributeToMesh(QString name, QString description, GmStorageType type)
Adds to the mesh a new node attribute, with default value equal to -1 and the given name,...
Definition gmpGemaCR.h:382
GmpNodeRenumberingMethod< IntVector > * _nodeRenumberMethod
The configured node reordering object.
Definition gmpGemaCR.h:437
GmpGemaCRBase(GmSimulationData *simulation, QString id, QString description, const GmLogCategory &logger)
Default plugin object constructor.
Definition gmpGemaCR.h:214
GmCellAccessor * addCellAttributeToMesh(QString name, QString description, GmStorageType type)
Like addNodeAttributeToMesh() but adding a cell attribute.
Definition gmpGemaCR.h:388
bool _nodeRenumberRequested
Is node renumbering requested by the user? Can be false even if Partition is true.
Definition gmpGemaCR.h:429
GmMesh * _mesh
The associated cell mesh.
Definition gmpGemaCR.h:427
GmpColorData * _noColorData
The GmpColorData object if coloring is disabled.
Definition gmpGemaCR.h:435
QMap< const GmCellGroupSet *, GmpColorData * > _gsColorMap
Map storing coloring data for each registered group set.
Definition gmpGemaCR.h:434
QVariantMap _options
The set of user options.
Definition gmpGemaCR.h:426
PartitionT _part
Structure storing extra vectors needed when Partition is true, empty otherwise.
Definition gmpGemaCR.h:535
bool _skipRemote
A flag set to true by GmpGemaPCR if the mesh was partitioned, includes remote halo cells AND the keep...
Definition gmpGemaCR.h:433
ColorType _coloringType
The type of coloring produced by this object.
Definition gmpGemaCR.h:428
IntVectorOrMap _originalToLocalCell
If Partition is false, stores a vector indexed by original cell numbers, storing their local cell num...
Definition gmpGemaCR.h:478
bool _isNodeRenumbered
Have we renumbered the set of nodes? Always true if the mesh was partitioned.
Definition gmpGemaCR.h:431
virtual size_t usedMemory() const
Returns an estimate of the used memory by the PCR object. This does not includes fixed (small) sizes.
Definition gmpGemaCR.h:251
int _numGeomNodes
Cached value for _mesh->numNodes(). Updated whenever new geometry nodes are added to the mesh.
Definition gmpGemaCR.h:441
IntVector _localToOriginalCell
A vector mapping local cell numbers to original cell numbers. Size equal to _mesh->numCells()....
Definition gmpGemaCR.h:469
IntVectorOrMap _originalToLocalGeomNode
If Partition is false, stores a vector indexed by original geometry node numbers, storing their local...
Definition gmpGemaCR.h:464
int _numOriginalGeomNodes
Cached value for _mesh->numGlobalNodes(). If Partition is false, this is effectively equal to _numGeo...
Definition gmpGemaCR.h:448
bool _isCellRenumbered
Have we renumbered the set of cell? Always true if the mesh was partitioned.
Definition gmpGemaCR.h:432
IntVector _localToOriginalGeomNode
A vector mapping local geometry node numbers to original node numbers. Size equal to _mesh->numNodes(...
Definition gmpGemaCR.h:455
bool _cellRenumberRequested
Is cell renumbering requested by the user? Can be false even if Partition is true.
Definition gmpGemaCR.h:430
GmpColoringMethod * _colorMethod
The configured coloring object.
Definition gmpGemaCR.h:436
GmpCellRenumberingMethod< IntVector > * _cellRenumberMethod
The configured cell reordering object.
Definition gmpGemaCR.h:438
std::conditional_t< Partition, QMap< int, int >, Vector< int > > IntVectorOrMap
A Vector<int> for Partition = false and a QMap<int, int> for Partition = true.
Definition gmpGemaCR.h:369
Vector< int > IntVector
A Vector<int>
Definition gmpGemaCR.h:366
The abstract interface for a node renumbering method implementation. Template parameters is the type ...
Definition gmpGemaCR.h:99
const QVariantMap & _options
The user provided options.
Definition gmpGemaCR.h:120
virtual void printParameters(const GmLogCategory &logger) const =0
Virtual method responsible for printing the renumbering method description.
virtual bool renumber(GmValueAccessor *ac, IntVector &sortedToOriginal, const GmLogCategory &logger) const =0
The node renumbering function. It gets as input parameter an accessor to the mesh coordinates....
virtual bool checkOptions(const GmLogCategory &logger)=0
Virtual method responsible for validating the parameters supplied on the class constructor....
GmCellFillMode
GmLogLevel
GmStorageType
GmpGemaCRBase< GmSingleVector, false > GmpGemaCR
Typedef for the CR implementation with single vector.
Definition gmpGemaCR.h:539
GmpGemaCRBase< GmDualVector, false > GmpGemaCRD
Typedef for the CR implementation with dual vector.
Definition gmpGemaCR.h:542
Declaration of useful configuration definitions for the plugin library.
Helper struct grouping coloring data together.
Definition gmpGemaCR.h:35
GmCellGroupSet * _seqHaloSet
The sequential set of halo elements when state is COLORED_WITH_HALO.
Definition gmpGemaCR.h:39
GmPCR::ColorState _state
Coloring state.
Definition gmpGemaCR.h:37
size_t usedMemory() const
Returns an estimate of the used memory by this color data object, taking into account the size of the...
Definition gmpGemaCR.cpp:60
GmCellGroupSet * _seqSet
The sequential set of elements.
Definition gmpGemaCR.h:38
const GmCellGroupSet * _srcGroup
The source group that originated the coloring.
Definition gmpGemaCR.h:36
QVector< GmCellGroupSet * > _coloredHaloSets
The colored set of halo elements when state is COLORED_WITH_HALO.
Definition gmpGemaCR.h:41
QVector< GmCellGroupSet * > _coloredSets
The colored set of elements.
Definition gmpGemaCR.h:40
~GmpColorData()
Virtual destructor for the GmpColorData auxiliar structure.
Definition gmpGemaCR.cpp:47
Empty structure for use when Partition is false. If we where using C++ 20, we could mark this as [[no...
Definition gmpGemaCR.h:486
Additional partition info when Partition is true. Stores the vectors needed for ghost node reordering...
Definition gmpGemaCR.h:493
bool _cellsRenumbered
Were the cells renumbered again after the partition renumbering?
Definition gmpGemaCR.h:498
bool _nodesRenumbered
Were the nodes renumbered again after the partition renumbering?
Definition gmpGemaCR.h:497
IntVector _originalCellTraversalOrder
Same as _originalNodeTraversalOrder, but for cells. Only filled if _cellsRenumbered is true.
Definition gmpGemaCR.h:529
IntVector _localToOriginalGhostNode
Stores a vector indexed by local ghost numbers WITH the high bit CLEARED, storing their global ghost ...
Definition gmpGemaCR.h:507
IntVector _originalNodeTraversalOrder
A vector storing the order in which local geometric nodes should be traversed to produce the original...
Definition gmpGemaCR.h:526
bool _partitioned
Was the mesh effectively partitioned? Can be false when GmpGemaPCR is used in debug mode.
Definition gmpGemaCR.h:495
IntVectorOrMap _originalToLocalGhostNode
Stores a map keyed by original ghost numbers WITH the high bit CLEARED, storing their local ghost nod...
Definition gmpGemaCR.h:516