diff --git a/FunctionSpace/FunctionSpace.cpp b/FunctionSpace/FunctionSpace.cpp index b3e0d44b8c84e8cdd9ebae48c4a612f8860ff4b1..7276586ba7e79a13dc0940ca7481b3169b2d38b1 100644 --- a/FunctionSpace/FunctionSpace.cpp +++ b/FunctionSpace/FunctionSpace.cpp @@ -5,14 +5,15 @@ using namespace std; FunctionSpace::FunctionSpace(const GroupOfElement& goe, int basisType, int order){ // Save GroupOfElement // - this->goe = &goe; + this->goe = &goe; // Look for 1st element to get element type // // (We suppose only one type of Mesh !!) // int elementType = goe.get(0).getType(); - // Create Basis // - basis = BasisGenerator::generate(elementType, basisType, order); + // Init Struct // + basis = BasisGenerator::generate(elementType, basisType, order); + eToGoD = new map<const MElement*, const GroupOfDof*, ElementComparator>; // Count Function per Entity // int nVertex = goe.get(0).getNumVertices(); @@ -37,5 +38,6 @@ FunctionSpace::FunctionSpace(const GroupOfElement& goe, int basisType, int order FunctionSpace::~FunctionSpace(void){ delete basis; + delete eToGoD; } diff --git a/FunctionSpace/FunctionSpace.h b/FunctionSpace/FunctionSpace.h index df53bd51b2abf8933f23791cdcf9ffde98f69bd3..29592212428a6bff44fa50a339108f2e3c99b794 100644 --- a/FunctionSpace/FunctionSpace.h +++ b/FunctionSpace/FunctionSpace.h @@ -1,6 +1,11 @@ #ifndef _FUNCTIONSPACE_H_ #define _FUNCTIONSPACE_H_ +#include <map> + +#include "Dof.h" +#include "GroupOfDof.h" + #include "Basis.h" #include "GroupOfElement.h" #include "MElement.h" @@ -13,14 +18,19 @@ @todo Hybrid Mesh@n - Put DofManager::dofFromElement here ?? */ +class ElementComparator; + class FunctionSpace{ private: + friend class DofManager; + const Basis* basis; const GroupOfElement* goe; + std::map<const MElement*, const GroupOfDof*, ElementComparator>* eToGoD; + int fPerVertex; int fPerEdge; int fPerFace; @@ -39,6 +49,14 @@ class FunctionSpace{ int getNFunctionPerEdge(MElement& element) const; int getNFunctionPerFace(MElement& element) const; int getNFunctionPerCell(MElement& element) const; + + private: + void associate(const MElement& element, const GroupOfDof& god); +}; + +class ElementComparator{ + public: + bool operator()(const MElement* a, const MElement* b) const; }; ////////////////////// @@ -69,4 +87,12 @@ inline int FunctionSpace::getNFunctionPerCell(MElement& element) const{ return fPerCell; } +inline void FunctionSpace::associate(const MElement& element, const GroupOfDof& god){ + //return fPerCell; +} + +inline bool ElementComparator::operator()(const MElement* a, const MElement* b) const{ + return a->getNum() < b->getNum(); +} + #endif