diff --git a/FunctionSpace/FunctionSpace.cpp b/FunctionSpace/FunctionSpace.cpp index f7109a9242d9a4a5b1d74e437c02d68a178ba11a..77aa2757f81c22eec853cebbbbc0f7d7f6864daf 100644 --- a/FunctionSpace/FunctionSpace.cpp +++ b/FunctionSpace/FunctionSpace.cpp @@ -15,64 +15,9 @@ FunctionSpace::FunctionSpace(void){ } FunctionSpace::~FunctionSpace(void){ - if(self) - for(size_t i = 0; i < nGeoType; i++) - if(basis[i]) - delete basis[i]; -} - -void FunctionSpace::build(GroupOfElement& goe, - const Basis& basis){ - - // Save GroupOfElement & Mesh // - this->goe = &goe; - this->mesh = &(goe.getMesh()); - - // Check if homogene GoE and get geo type // - const vector<size_t>& gType = goe.getTypeStats(); - const size_t nGType = gType.size(); - size_t eType = (size_t)(-1); - - for(size_t i = 0; i < nGType; i++) - if((eType == (size_t)(-1)) && (gType[i] != 0)) - eType = i; - else if((eType != (size_t)(-1)) && (gType[i] != 0)) - throw Exception("FunctionSpace needs a uniform mesh"); - - // Check if basis is matching type // - if(eType != basis.getType()) - throw Exception("FunctionSpace: Basis is not matching type"); - - // Alloc Bases and save given Basis // - this->self = false; - this->basis.resize(nGeoType, NULL); - this->basis[eType] = &basis; - - // Get Number of Function per Entity // - // Same for all basis since we have a uniform order - MElement& myElement = const_cast<MElement&>(goe.get(0)); - - int nVertex = myElement.getNumPrimaryVertices(); - int nEdge = myElement.getNumEdges(); - int nFace = myElement.getNumFaces(); - - // Number of *Per* Entity functions // - fPerVertex = this->basis[eType]->getNVertexBased() / nVertex; - - if(nEdge) - fPerEdge = this->basis[eType]->getNEdgeBased() / nEdge; - else - fPerEdge = 0; - - if(nFace) - fPerFace = this->basis[eType]->getNFaceBased() / nFace; - else - fPerFace = 0; - - fPerCell = this->basis[eType]->getNCellBased(); - - // Build Dof // - buildDof(); + for(size_t i = 0; i < nGeoType; i++) + if(basis[i]) + delete basis[i]; } void FunctionSpace::build(GroupOfElement& goe, @@ -83,7 +28,6 @@ void FunctionSpace::build(GroupOfElement& goe, this->mesh = &(goe.getMesh()); // Alloc Basis Vector for all possible geomtrical types // - self = true; basis.resize(nGeoType, NULL); // Generate Bases // diff --git a/FunctionSpace/FunctionSpace.h b/FunctionSpace/FunctionSpace.h index 0fb748d7ca109fb73f9e932f8c75886cf9afabcd..72a3da11afe1890d22e3a9ecef94ed9855a448fb 100644 --- a/FunctionSpace/FunctionSpace.h +++ b/FunctionSpace/FunctionSpace.h @@ -39,7 +39,6 @@ class FunctionSpace{ GroupOfElement* goe; // Basis // - bool self; std::vector<const Basis*> basis; size_t fPerVertex; @@ -73,8 +72,6 @@ class FunctionSpace{ protected: FunctionSpace(void); - - void build(GroupOfElement& goe, const Basis& basis); void build(GroupOfElement& goe, size_t order, size_t form, std::string family); void buildDof(void); diff --git a/FunctionSpace/FunctionSpaceScalar.cpp b/FunctionSpace/FunctionSpaceScalar.cpp index 1e4f3a9c4ce5a1d11c717770c94182a46c03ccb9..a3c18c54b86e5166267f7ee43e9889288d20e092 100644 --- a/FunctionSpace/FunctionSpaceScalar.cpp +++ b/FunctionSpace/FunctionSpaceScalar.cpp @@ -1,15 +1,15 @@ #include "Mapper.h" #include "FunctionSpaceScalar.h" -FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe, - const Basis& basis){ +FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe, size_t order){ scalar = true; - build(goe, basis); + build(goe, order, 0, "hierarchical"); } -FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe, size_t order){ +FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe, size_t order, + std::string family){ scalar = true; - build(goe, order, 0, "hierarchical"); + build(goe, order, 0, family); } FunctionSpaceScalar::~FunctionSpaceScalar(void){ diff --git a/FunctionSpace/FunctionSpaceScalar.h b/FunctionSpace/FunctionSpaceScalar.h index dec1f3938ff5ffa799f72a2ed32f0dbeb1725061..ee9b12035ae3efe83ca1f6d23c2575bf062263a5 100644 --- a/FunctionSpace/FunctionSpaceScalar.h +++ b/FunctionSpace/FunctionSpaceScalar.h @@ -16,8 +16,8 @@ class FunctionSpaceScalar : public FunctionSpace{ public: - FunctionSpaceScalar(GroupOfElement& goe, const Basis& basis); FunctionSpaceScalar(GroupOfElement& goe, size_t order); + FunctionSpaceScalar(GroupOfElement& goe, size_t order, std::string family); virtual ~FunctionSpaceScalar(void); diff --git a/FunctionSpace/FunctionSpaceVector.cpp b/FunctionSpace/FunctionSpaceVector.cpp index a1ffd51518acfc7a5d9a708e90722863716c770a..b5f6e0043098c4ce3945c2257eb1e563e7053d8e 100644 --- a/FunctionSpace/FunctionSpaceVector.cpp +++ b/FunctionSpace/FunctionSpaceVector.cpp @@ -1,10 +1,15 @@ #include "Mapper.h" #include "FunctionSpaceVector.h" -FunctionSpaceVector::FunctionSpaceVector(GroupOfElement& goe, - const Basis& basis){ +FunctionSpaceVector::FunctionSpaceVector(GroupOfElement& goe, size_t order){ scalar = false; - build(goe, basis); + build(goe, order, 1, "hierarchical"); +} + +FunctionSpaceVector::FunctionSpaceVector(GroupOfElement& goe, size_t order, + std::string family){ + scalar = false; + build(goe, order, 1, family); } FunctionSpaceVector::~FunctionSpaceVector(void){ diff --git a/FunctionSpace/FunctionSpaceVector.h b/FunctionSpace/FunctionSpaceVector.h index d230a37a47a8aaf4f8ad92b727b0aa81678ee77b..4914e888c15b67e7ef5ac0a3eb16ec9c7517304e 100644 --- a/FunctionSpace/FunctionSpaceVector.h +++ b/FunctionSpace/FunctionSpaceVector.h @@ -17,7 +17,9 @@ class FunctionSpaceVector : public FunctionSpace{ public: - FunctionSpaceVector(GroupOfElement& goe, const Basis& basis); + FunctionSpaceVector(GroupOfElement& goe, size_t order); + FunctionSpaceVector(GroupOfElement& goe, size_t order, std::string family); + virtual ~FunctionSpaceVector(void); fullVector<double>