GemaCoreLib
The GeMA Core library
gmElementMesh.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_ELEMENT_MESH_H_
25 #define _GEMA_ELEMENT_MESH_H_
26 
27 #include "gmCell.h"
28 #include "gmCellMesh.h"
29 #include "gmIntegrationRule.h"
30 
32 class GmGaussValueSet;
33 class GmGaussAccessor;
34 class GmMeshGaussIndex;
35 
41 {
42 public:
43  GmElementMesh(GmSimulationData* simulation, QString id, QString description, const GmLogCategory& logger);
44  virtual ~GmElementMesh();
45 
46  const GmIntegrationRule* elementIntegrationRule(GmCellType type, int ruleSet) const;
47  const GmBorderIntegrationRule* borderIntegrationRule (GmCellType type, int ruleSet, int borderIndex) const;
48  const GmBorderIntegrationRule* faceIntegrationRule (GmCellType type, int ruleSet, int faceIndex) const;
49  const GmBorderIntegrationRule* edgeIntegrationRule (GmCellType type, int ruleSet) const;
50 
51  int maxNumIntPoints(int ruleSet) const;
52  void addIntegrationRuleSet();
53  int numIntegrationRuleSets() const;
54  bool setElementIntegrationRule(GmCellType type, GmIntegrationRule* rule, int ruleSet);
55  bool setFaceIntegrationRule (GmCellType type, GmBorderIntegrationRule* rule, int ruleSet, int faceType);
56  bool setEdgeIntegrationRule (GmCellType type, GmBorderIntegrationRule* rule, int ruleSet);
57 
58  GmMeshGaussIndex* gaussIndex (int ruleSet) const;
59  bool usesGaussIndex(int ruleSet) const;
60 
61  virtual QStringList gaussAttributeIds () const;
62  virtual GmValueInfo* gaussAttributeInfo (QString id) const;
63  virtual GmGaussAccessor* gaussAttributeAccessor(QString id, Unit desiredUnit, const GmLogCategory& logger) const;
64  virtual GmGaussAccessor* gaussAttributeAccessor(QString id, int snum, bool locked, Unit desiredUnit, const GmLogCategory& logger) const;
65 
66  virtual bool addGaussAttributeSet(GmValueInfo* info);
67  virtual void removeGaussAttributeSet(QString id);
68  virtual void clearGaussAttributeSets();
69  virtual void clearGaussAttributeSetsData();
70 
71  virtual bool saveState(GmValueSet::SaveStateMode mode, const GmLogCategory& logger);
72  virtual bool saveGaussAttributeState (QString id, GmValueSet::SaveStateMode mode, const GmLogCategory& logger);
73  virtual int numGaussAttributeStates (QString id) const;
74  virtual QString gaussAttributeStateTag (QString id, int snum) const;
75  virtual double gaussAttributeStateTime (QString id, int snum) const;
76  virtual void setGaussAttributeStateTag (QString id, int snum, QString tag);
77  virtual void setGaussAttributeStateTime(QString id, int snum, double time);
78 
80  virtual int hPOrder() const { return 0; }
81 
83  virtual int hQOrder() const { return 0; }
84 
85  virtual void printParameters(const GmLogCategory& logger);
86  virtual void printValues (const GmLogCategory& logger, int options = GM_PRINT_DEFAULT);
87 
91  const QList<GmGaussValueSet*>& gaussValueSets() const { return _gaussAttributesData; }
92 
93  virtual size_t gaussIndicesMemory() const;
94 
95 protected:
96  virtual GmGaussValueSet* createGaussValueSet(GmValueInfo* info);
97 
98  template <class T> T* getIntegrationRuleWithDCL(QList<QAtomicPointer<T>*>& list, QMutex* mutex,
99  T* (*instance)(GmCellType, int, int, int, GmIntegrationRuleType),
100  GmCellType type, int ruleSet, int faceType) const;
101 
104 
105  virtual bool addStateAccessorData (GmStateDump* state, int groupId);
106  virtual bool fillDumpControlMapData (QVariantMap* map, const GmLogCategory& logger);
107  virtual bool dumpControlMapDataLoaded(QVariantMap* map, const GmLogCategory& logger);
108 
109 private:
110  QString toRuleStr (GmIntegrationRule* ir) const;
111  bool fromRuleStr(QString r, int* key, GmIntegrationRuleType* type, int* rule1, int* rule2, int* rule3);
112  void clearRuleSetRules(int rule);
113 
117 
121 
124 };
125 
127 #define GmForeachActiveElement(variable, mesh) GmForeachCellHelper(variable, mesh, GmElementMesh, GmElement, true)
128 
130 #define GmForeachElement(variable, mesh, activeOnly) GmForeachCellHelper(variable, mesh, GmElementMesh, GmElement, activeOnly)
131 
132 #endif
133 
GmIntegrationRuleType
The type of desired integration rule (Gauss quadrature, Lobatto quadrature, etc)
Definition: gmIntegrationRule.h:67
Auxiliar class used to store the definition of a value. It can be used to store informations about st...
Definition: gmValueInfo.h:126
QList< GmGaussValueSet * > _gaussAttributesData
List with set of values for element Gauss attributes.
Definition: gmElementMesh.h:103
The GmStateDump class presents a higher level of abstraction over GmMemoryDump, storing accessor data...
Definition: gmStateDump.h:52
QList< QAtomicPointer< GmBorderIntegrationRule > * > _edgeIntegrationRulesList
List with sets of per element type edge integration rules.
Definition: gmElementMesh.h:116
The GmGaussAccessor class is a proxy object to a value accesor implementing a more convenient interfa...
Definition: gmGaussAccessor.h:38
Inheriting from GmValueSet, this class adds the peculiarities needed for saving values in Gauss point...
Definition: gmGaussValueSet.h:34
virtual void printValues(const GmLogCategory &logger, int options=GM_PRINT_DEFAULT)
Reimplements the standard Mesh::printValues() method to add information about cells.
Definition: gmCellMesh.cpp:726
QMutex _faceIntegrationRulesMutex
The mutex protecting _faceIntegrationRulesList.
Definition: gmElementMesh.h:119
virtual bool dumpControlMapDataLoaded(QVariantMap *map, const GmLogCategory &logger)
Sanity checks + processing of the dump control data map after a load operation.
Definition: gmCellMesh.cpp:934
Auxiliar class used to store the complete set of simulation data.
Definition: gmSimulationData.h:51
A Gauss index interface always indexing ALL the elements of a mesh, with support for mesh growing.
Definition: gmGaussIndex.h:274
Declaration of the GmIntegrationRule class and its helper decendants.
Integration rule base classe.
Definition: gmIntegrationRule.h:88
QList< QAtomicPointer< GmBorderIntegrationRule > * > _faceIntegrationRulesList
List with sets of per element type face integration rules.
Definition: gmElementMesh.h:115
QMutex _edgeIntegrationRulesMutex
The mutex protecting _edgeIntegrationRulesList.
Definition: gmElementMesh.h:120
QMutex _elemIntegrationRulesMutex
The mutex protecting _elemIntegrationRulesList.
Definition: gmElementMesh.h:118
Base interface class for CellMesh type plugins.
Definition: gmCellMesh.h:39
Border integration rule base classe.
Definition: gmBorderIntegrationRule.h:37
virtual int hQOrder() const
Returns the elements Q order for hierarchical meshes, 0 for meshes with conventional elements.
Definition: gmElementMesh.h:83
QList< QAtomicPointer< GmIntegrationRule > * > _elemIntegrationRulesList
List with sets of per element type integration rules.
Definition: gmElementMesh.h:114
QList< QAtomicPointer< GmMeshGaussIndex > > _gaussIndexList
List of per integration rule Gauss index.
Definition: gmElementMesh.h:122
Declaration of the GmCellMesh interface class.
const QList< GmGaussValueSet * > & gaussValueSets() const
Returns a list with the mesh Gauss value sets. This is a very specialized function....
Definition: gmElementMesh.h:91
QMap< QString, int > _gaussAttributesMap
Map translating ids from attributes into their position in _gaussAttributesData.
Definition: gmElementMesh.h:102
#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
virtual void printParameters(const GmLogCategory &logger)
Reimplements the standard Mesh::printParameters() method to add information about cells.
Definition: gmCellMesh.cpp:669
QMutex _gaussIndexMutex
The mutex protecting _gaussIndexList.
Definition: gmElementMesh.h:123
GmCellType
Mesh Cell types. Don't change type orders or add types without reading comments below.
Definition: gmCellType.h:30
Class representing a category with multiple logging levels.
Definition: gmLog.h:58
SaveStateMode
Initialization mode for calls to saveState()
Definition: gmValueSet.h:59
Base interface for FEM (finite element) meshes.
Definition: gmElementMesh.h:40
virtual bool fillDumpControlMapData(QVariantMap *map, const GmLogCategory &logger)
Fills the dump control data map with mesh data prior to a save operation On errors,...
Definition: gmCellMesh.cpp:917
Declaration of the GmCell class.
virtual bool saveState(GmValueSet::SaveStateMode mode, const GmLogCategory &logger)
Simmilar to saveNodeValueState() / saveCellAttributeState(), saves the current state of all nodal and...
Definition: gmCellMesh.cpp:566
virtual int hPOrder() const
Returns the elements P order for hierarchical meshes, 0 for meshes with conventional elements.
Definition: gmElementMesh.h:80
A tag to request that the options should be filled with the default.
Definition: gmPrintUtils.h:68
virtual bool addStateAccessorData(GmStateDump *state, int groupId)
Adds to 'state' accessors for all the cell attributes associated with this mesh. This includes all hi...
Definition: gmCellMesh.cpp:871