From 40515ea6cbf854b4f97fe3e7c2ae66c3bb012566 Mon Sep 17 00:00:00 2001
From: Nicolas Marsic <nicolas.marsic@gmail.com>
Date: Fri, 31 Jan 2014 14:36:41 +0000
Subject: [PATCH] const GroupOfElement + GroupOfElement::isUniform +
 GroupOfElement::add() + Formulation::domain()

---
 FunctionSpace/FunctionSpace.cpp       | 10 +++++++++-
 FunctionSpace/FunctionSpace.h         |  9 +++++----
 FunctionSpace/FunctionSpaceScalar.cpp |  7 ++++---
 FunctionSpace/FunctionSpaceScalar.h   |  5 +++--
 FunctionSpace/FunctionSpaceVector.cpp |  7 ++++---
 FunctionSpace/FunctionSpaceVector.h   |  5 +++--
 6 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/FunctionSpace/FunctionSpace.cpp b/FunctionSpace/FunctionSpace.cpp
index 434fbce0ec..521aaf36e0 100644
--- a/FunctionSpace/FunctionSpace.cpp
+++ b/FunctionSpace/FunctionSpace.cpp
@@ -10,6 +10,7 @@
 using namespace std;
 
 const size_t FunctionSpace::nGeoType = 9;
+bool FunctionSpace::once = false;
 
 FunctionSpace::FunctionSpace(void){
 }
@@ -20,7 +21,14 @@ FunctionSpace::~FunctionSpace(void){
       delete basis[i];
 }
 
-void FunctionSpace::build(GroupOfElement& goe, string family){
+void FunctionSpace::build(const GroupOfElement& goe, string family){
+  /*
+  if(once)
+    throw Exception("FS Once");
+
+  else
+    once = true;
+  */
   // Save GroupOfElement & Mesh //
   this->goe  = &goe;
   this->mesh = &(goe.getMesh());
diff --git a/FunctionSpace/FunctionSpace.h b/FunctionSpace/FunctionSpace.h
index fc6867d3f5..decf948b1a 100644
--- a/FunctionSpace/FunctionSpace.h
+++ b/FunctionSpace/FunctionSpace.h
@@ -32,11 +32,12 @@ class FunctionSpace{
  protected:
   // Number of possible geomtrical topologies //
   static const size_t nGeoType;
+  static bool once;
 
  protected:
   // Geometry //
   const Mesh*     mesh;
-  GroupOfElement* goe;
+  const GroupOfElement* goe;
 
   // Basis //
   std::vector<const Basis*> basis;
@@ -61,7 +62,7 @@ class FunctionSpace{
   const Basis& getBasis(const MElement& element) const;
   const Basis& getBasis(size_t i) const;
 
-  GroupOfElement& getSupport(void) const;
+  const GroupOfElement& getSupport(void) const;
 
   bool   isScalar(void) const;
   size_t getForm(void)  const;
@@ -78,7 +79,7 @@ class FunctionSpace{
  protected:
   FunctionSpace(void);
 
-  void build(GroupOfElement& goe, std::string family);
+  void build(const GroupOfElement& goe, std::string family);
   void buildDof(void);
 };
 
@@ -148,7 +149,7 @@ inline const Basis& FunctionSpace::getBasis(size_t i) const{
   return *basis[i];
 }
 
-inline GroupOfElement& FunctionSpace::getSupport(void) const{
+inline const GroupOfElement& FunctionSpace::getSupport(void) const{
   return *goe;
 }
 
diff --git a/FunctionSpace/FunctionSpaceScalar.cpp b/FunctionSpace/FunctionSpaceScalar.cpp
index d178ad0073..77d3d2281b 100644
--- a/FunctionSpace/FunctionSpaceScalar.cpp
+++ b/FunctionSpace/FunctionSpaceScalar.cpp
@@ -1,7 +1,8 @@
 #include "Mapper.h"
 #include "FunctionSpaceScalar.h"
 
-FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe, size_t order){
+FunctionSpaceScalar::FunctionSpaceScalar(const GroupOfElement& goe,
+                                         size_t order){
   this->scalar = true;
   this->form   = 0;
   this->order  = order;
@@ -9,8 +10,8 @@ FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe, size_t order){
   build(goe, "hierarchical");
 }
 
-FunctionSpaceScalar::FunctionSpaceScalar(GroupOfElement& goe, size_t order,
-                                         std::string family){
+FunctionSpaceScalar::FunctionSpaceScalar(const GroupOfElement& goe,
+                                         size_t order, std::string family){
   this->scalar = true;
   this->form   = 0;
   this->order  = order;
diff --git a/FunctionSpace/FunctionSpaceScalar.h b/FunctionSpace/FunctionSpaceScalar.h
index ee9b12035a..2ddddde0e9 100644
--- a/FunctionSpace/FunctionSpaceScalar.h
+++ b/FunctionSpace/FunctionSpaceScalar.h
@@ -16,8 +16,9 @@
 
 class FunctionSpaceScalar : public FunctionSpace{
  public:
-  FunctionSpaceScalar(GroupOfElement& goe, size_t order);
-  FunctionSpaceScalar(GroupOfElement& goe, size_t order, std::string family);
+  FunctionSpaceScalar(const GroupOfElement& goe, size_t order);
+  FunctionSpaceScalar(const GroupOfElement& goe, size_t order,
+                      std::string family);
 
   virtual ~FunctionSpaceScalar(void);
 
diff --git a/FunctionSpace/FunctionSpaceVector.cpp b/FunctionSpace/FunctionSpaceVector.cpp
index 0c11bbd62a..1fb78e7d39 100644
--- a/FunctionSpace/FunctionSpaceVector.cpp
+++ b/FunctionSpace/FunctionSpaceVector.cpp
@@ -1,7 +1,8 @@
 #include "Mapper.h"
 #include "FunctionSpaceVector.h"
 
-FunctionSpaceVector::FunctionSpaceVector(GroupOfElement& goe, size_t order){
+FunctionSpaceVector::FunctionSpaceVector(const GroupOfElement& goe,
+                                         size_t order){
   this->scalar = false;
   this->form   = 1;
   this->order  = order;
@@ -9,8 +10,8 @@ FunctionSpaceVector::FunctionSpaceVector(GroupOfElement& goe, size_t order){
   build(goe, "hierarchical");
 }
 
-FunctionSpaceVector::FunctionSpaceVector(GroupOfElement& goe, size_t order,
-                                         std::string family){
+FunctionSpaceVector::FunctionSpaceVector(const GroupOfElement& goe,
+                                         size_t order, std::string family){
   this->scalar = false;
   this->form   = 1;
   this->order  = order;
diff --git a/FunctionSpace/FunctionSpaceVector.h b/FunctionSpace/FunctionSpaceVector.h
index 4914e888c1..c20f4f60f8 100644
--- a/FunctionSpace/FunctionSpaceVector.h
+++ b/FunctionSpace/FunctionSpaceVector.h
@@ -17,8 +17,9 @@
 
 class FunctionSpaceVector : public FunctionSpace{
  public:
-  FunctionSpaceVector(GroupOfElement& goe, size_t order);
-  FunctionSpaceVector(GroupOfElement& goe, size_t order, std::string family);
+  FunctionSpaceVector(const GroupOfElement& goe, size_t order);
+  FunctionSpaceVector(const GroupOfElement& goe, size_t order,
+                      std::string family);
 
   virtual ~FunctionSpaceVector(void);
 
-- 
GitLab