GemaCoreLib
The GeMA Core library
Loading...
Searching...
No Matches
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"
31
33class GmGaussValueSet;
34class GmGaussAccessor;
36
42{
43public:
44 GmElementMesh(GmSimulationData* simulation, QString id, QString description, const GmLogCategory& logger);
45 virtual ~GmElementMesh();
46
47 const GmIntegrationRule* elementIntegrationRule(GmCellType type, int ruleSet) const;
48 const GmBorderIntegrationRule* borderIntegrationRule (GmCellType type, int ruleSet, int borderIndex) const;
49 const GmBorderIntegrationRule* faceIntegrationRule (GmCellType type, int ruleSet, int faceIndex) const;
50 const GmBorderIntegrationRule* edgeIntegrationRule (GmCellType type, int ruleSet) const;
51
52 int maxNumIntPoints(int ruleSet) const;
53 void addIntegrationRuleSet();
54 int numIntegrationRuleSets() const;
55 bool setElementIntegrationRule(GmCellType type, GmIntegrationRule* rule, int ruleSet);
56 bool setFaceIntegrationRule (GmCellType type, GmBorderIntegrationRule* rule, int ruleSet, int faceType);
57 bool setEdgeIntegrationRule (GmCellType type, GmBorderIntegrationRule* rule, int ruleSet);
58
59 GmMeshGaussIndex* gaussIndex (int ruleSet) const;
60 bool usesGaussIndex(int ruleSet) const;
61
66 GmGaussValueSetGroup* gaussValueSetGroup(int ruleSet) const { return _gaussAttributesGroupList[ruleSet]; }
67
70 {
71 int rs = _gaussAttributesMap.value(id, -1);
72 return (rs == -1) ? NULL : _gaussAttributesGroupList[rs]->gaussValueSet(id);
73 }
74
75 virtual QStringList gaussAttributeIds () const;
76 virtual GmValueInfo* gaussAttributeInfo (QString id) const;
77 virtual GmGaussAccessor* gaussAttributeAccessor(QString id, Unit desiredUnit, const GmLogCategory& logger) const;
78 virtual GmGaussAccessor* gaussAttributeAccessor(QString id, int snum, bool locked, Unit desiredUnit, const GmLogCategory& logger) const;
79
80 virtual bool addGaussAttributeSet(GmValueInfo* info);
81 virtual void removeGaussAttributeSet(QString id);
82
83 virtual bool initGaussAttributeSets();
84 virtual void beginAddingGaussAttributeSets();
85 virtual bool endAddingGaussAttributeSets();
86 virtual void clearGaussAttributeSets();
87 virtual void clearGaussAttributeSetsData();
88
89 virtual bool saveState(GmValueSet::SaveStateMode mode, const GmLogCategory& logger);
90 virtual bool saveGaussAttributeState (QString id, GmValueSet::SaveStateMode mode, const GmLogCategory& logger);
91 virtual int numGaussAttributeStates (QString id) const;
92 virtual QString gaussAttributeStateTag (QString id, int snum) const;
93 virtual double gaussAttributeStateTime (QString id, int snum) const;
94 virtual void setGaussAttributeStateTag (QString id, int snum, QString tag);
95 virtual void setGaussAttributeStateTime(QString id, int snum, double time);
96
98 virtual int hPOrder() const { return 0; }
99
101 virtual int hQOrder() const { return 0; }
102
103 virtual void printParameters(const GmLogCategory& logger);
104 virtual void printValues (const GmLogCategory& logger, int options = GM_PRINT_DEFAULT);
105
106 virtual size_t gaussIndicesMemory() const;
107
108protected:
114 {
115 return new GmGaussValueSetGroup(simulation, mesh);
116 }
117
118 template <class T> T* getIntegrationRuleWithDCL(QList<QAtomicPointer<T>*>& list, QMutex* mutex,
119 T* (*instance)(GmCellType, int, int, int, GmIntegrationRuleType),
120 GmCellType type, int ruleSet, int faceType) const;
121
124
125 virtual bool addStateAccessorData (GmStateDump* state, int groupId);
126 virtual bool fillDumpControlMapData (QVariantMap* map, const GmLogCategory& logger);
127 virtual bool dumpControlMapDataLoaded(QVariantMap* map, const GmLogCategory& logger);
128
129private:
130 QString toRuleStr (GmIntegrationRule* ir) const;
131 bool fromRuleStr(QString r, int* key, GmIntegrationRuleType* type, int* rule1, int* rule2, int* rule3);
132 void clearRuleSetRules(int rule);
133
137
141
144};
145
147#define GmForeachActiveElement(variable, mesh) GmForeachCellHelper(variable, mesh, GmElementMesh, GmElement, true)
148
150#define GmForeachElement(variable, mesh, activeOnly) GmForeachCellHelper(variable, mesh, GmElementMesh, GmElement, activeOnly)
151
155#define GmForeachOrderedElement(variable, mesh, activeOnly, modelOrder) \
156GmForeachOrderedCellHelper(variable, mesh, GmElementMesh, GmElement, activeOnly, modelOrder ? (mesh)->pcrObject() : NULL)
157
158
159#endif
160
Border integration rule base classe.
Definition gmBorderIntegrationRule.h:38
Base interface class for CellMesh type plugins.
Definition gmCellMesh.h:40
virtual bool saveState(GmValueSet::SaveStateMode mode, const GmLogCategory &logger)
Simmilar to saveNodeValueState() / saveCellValueState(), saves the current state of all nodal and cel...
Definition gmCellMesh.cpp:733
virtual void printParameters(const GmLogCategory &logger)
Reimplements the standard Mesh::printParameters() method to add information about cells.
Definition gmCellMesh.cpp:826
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:886
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:1081
virtual bool dumpControlMapDataLoaded(QVariantMap *map, const GmLogCategory &logger)
Sanity checks + processing of the dump control data map after a load operation.
Definition gmCellMesh.cpp:1098
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:1033
Base interface for FEM (finite element) meshes.
Definition gmElementMesh.h:42
QVector< QAtomicPointer< GmMeshGaussIndex > > _gaussIndexList
List of per integration rule set Gauss index.
Definition gmElementMesh.h:142
QList< QAtomicPointer< GmBorderIntegrationRule > * > _edgeIntegrationRulesList
List with sets of per element type edge integration rules.
Definition gmElementMesh.h:136
QList< QAtomicPointer< GmIntegrationRule > * > _elemIntegrationRulesList
List with sets of per element type integration rules.
Definition gmElementMesh.h:134
virtual int hQOrder() const
Returns the elements Q order for hierarchical meshes, 0 for meshes with conventional elements.
Definition gmElementMesh.h:101
virtual GmGaussValueSetGroup * createGaussValueSetGroup(GmSimulationData *simulation, GmElementMesh *mesh)
Virtual function responsible for creating a new GmGaussValueSetGroup that will store data for the att...
Definition gmElementMesh.h:113
QMap< QString, int > _gaussAttributesMap
For each attribute id, stores the result set that this attribute is associated with.
Definition gmElementMesh.h:123
GmGaussValueSet * gaussValueSet(QString id) const
Returns the value set associated with the given Gauss attribute, NULL if not found....
Definition gmElementMesh.h:69
QMutex _edgeIntegrationRulesMutex
The mutex protecting _edgeIntegrationRulesList.
Definition gmElementMesh.h:140
virtual int hPOrder() const
Returns the elements P order for hierarchical meshes, 0 for meshes with conventional elements.
Definition gmElementMesh.h:98
GmGaussValueSetGroup * gaussValueSetGroup(int ruleSet) const
Returns the ValueSetGroup object used to store the set of mesh Gauss value sets for attributes tied t...
Definition gmElementMesh.h:66
QMutex _gaussIndexMutex
The mutex protecting _gaussIndexList.
Definition gmElementMesh.h:143
QMutex _faceIntegrationRulesMutex
The mutex protecting _faceIntegrationRulesList.
Definition gmElementMesh.h:139
QList< QAtomicPointer< GmBorderIntegrationRule > * > _faceIntegrationRulesList
List with sets of per element type face integration rules.
Definition gmElementMesh.h:135
QVector< GmGaussValueSetGroup * > _gaussAttributesGroupList
The per rule set value set group list, storing Gauss attributes data tied to each rule set.
Definition gmElementMesh.h:122
QMutex _elemIntegrationRulesMutex
The mutex protecting _elemIntegrationRulesList.
Definition gmElementMesh.h:138
The GmGaussAccessor class is a proxy object to a value accessor implementing a more convenient interf...
Definition gmGaussAccessor.h:39
A derived class from GmValueSetGroup storing GmGaussValueSet objects.
Definition gmGaussValueSetGroup.h:32
Inheriting from GmValueSet, this class adds the peculiarities needed for saving values in Gauss point...
Definition gmGaussValueSet.h:35
Integration rule base classe.
Definition gmIntegrationRule.h:89
Class representing a category with multiple logging levels.
Definition gmLog.h:58
A Gauss index interface always indexing ALL the elements of a mesh, with support for mesh growing.
Definition gmGaussIndex.h:275
Auxiliar class used to store the complete set of simulation data.
Definition gmSimulationData.h:55
The GmStateDump class presents a higher level of abstraction over GmMemoryDump, storing accessor data...
Definition gmStateDump.h:54
Auxiliar class used to store the definition of a value. It can be used to store informations about st...
Definition gmValueInfo.h:132
SaveStateMode
Initialization mode for calls to saveState()
Definition gmValueSet.h:60
Declaration of the GmCell class.
Declaration of the GmCellMesh interface class.
GmCellType
Mesh Cell types. Don't change type orders or add types without reading comments below.
Definition gmCellType.h:31
#define GMC_API_EXPORT
Macro for controlling if the class is being exported (GEMA_CORE_LIB defined) or imported (GEMA_CORE_L...
Definition gmCoreConfig.h:35
Declaration of the GmGaussValueSetGroup class.
Declaration of the GmIntegrationRule class and its helper decendants.
GmIntegrationRuleType
The type of desired integration rule (Gauss quadrature, Lobatto quadrature, etc)
Definition gmIntegrationRule.h:68
@ GM_PRINT_DEFAULT
A tag to request that the options should be filled with the default.
Definition gmPrintUtils.h:72