From b1d2de2a5df612e85e477ec3dd6fecb2b668e709 Mon Sep 17 00:00:00 2001
From: Nicolas Marsic <nicolas.marsic@gmail.com>
Date: Fri, 6 Sep 2013 07:13:27 +0000
Subject: [PATCH] Reworking Lagrange stuff -- Adding HexLagrangeBasis

---
 FunctionSpace/BasisGenerator.cpp            |   4 +-
 FunctionSpace/CMakeLists.txt                |   4 +-
 FunctionSpace/HexLagrangeBasis.cpp          |  32 +++++
 FunctionSpace/HexLagrangeBasis.h            |  30 +++++
 FunctionSpace/LineLagrangeBasis.cpp         |  20 +--
 FunctionSpace/LineLagrangeBasis.h           |   8 +-
 FunctionSpace/QuadLagrangeBasis.cpp         |  20 +--
 FunctionSpace/QuadLagrangeBasis.h           |   8 +-
 FunctionSpace/ReferenceSpaceLagrange.cpp    | 136 --------------------
 FunctionSpace/ReferenceSpaceLagrange.h      |  76 -----------
 FunctionSpace/TetLagrangeBasis.cpp          |  20 +--
 FunctionSpace/TetLagrangeBasis.h            |   8 +-
 FunctionSpace/TriLagrangeBasis.cpp          |  12 +-
 FunctionSpace/TriLagrangeBasis.h            |   8 +-
 FunctionSpace/TriLagrangeReferenceSpace.cpp |  62 ---------
 FunctionSpace/TriLagrangeReferenceSpace.h   |  32 -----
 16 files changed, 80 insertions(+), 400 deletions(-)
 create mode 100644 FunctionSpace/HexLagrangeBasis.cpp
 create mode 100644 FunctionSpace/HexLagrangeBasis.h
 delete mode 100644 FunctionSpace/ReferenceSpaceLagrange.cpp
 delete mode 100644 FunctionSpace/ReferenceSpaceLagrange.h
 delete mode 100644 FunctionSpace/TriLagrangeReferenceSpace.cpp
 delete mode 100644 FunctionSpace/TriLagrangeReferenceSpace.h

diff --git a/FunctionSpace/BasisGenerator.cpp b/FunctionSpace/BasisGenerator.cpp
index d73e2e07e4..c1a12f40f9 100644
--- a/FunctionSpace/BasisGenerator.cpp
+++ b/FunctionSpace/BasisGenerator.cpp
@@ -24,7 +24,7 @@
 
 #include "HexNodeBasis.h"
 #include "HexEdgeBasis.h"
-
+#include "HexLagrangeBasis.h"
 
 BasisGenerator::BasisGenerator(void){
 }
@@ -75,7 +75,7 @@ BasisLocal* BasisGenerator::generateLagrange(size_t elementType,
   case TYPE_TRI: return new TriLagrangeBasis(order);
   case TYPE_QUA: return new QuadLagrangeBasis(order);
   case TYPE_TET: return new TetLagrangeBasis(order);
-  case TYPE_HEX: throw Exception("Lagrange Basis on Hexs not Implemented");
+  case TYPE_HEX: return new HexLagrangeBasis(order);
 
   default: throw Exception("Unknown Element Type (%d) for Basis Generation",
                            elementType);
diff --git a/FunctionSpace/CMakeLists.txt b/FunctionSpace/CMakeLists.txt
index 724e30c5ce..9e0a0206e6 100644
--- a/FunctionSpace/CMakeLists.txt
+++ b/FunctionSpace/CMakeLists.txt
@@ -16,9 +16,6 @@ set(SRC
   TetReferenceSpace.cpp
   HexReferenceSpace.cpp
 
-  ReferenceSpaceLagrange.cpp
-  TriLagrangeReferenceSpace.cpp
-
   Basis.cpp
   BasisLocal.cpp
   BasisGenerator.cpp
@@ -49,6 +46,7 @@ set(SRC
 
   HexNodeBasis.cpp
   HexEdgeBasis.cpp
+  HexLagrangeBasis.cpp
 
   FunctionSpace.cpp
   FunctionSpaceScalar.cpp
diff --git a/FunctionSpace/HexLagrangeBasis.cpp b/FunctionSpace/HexLagrangeBasis.cpp
new file mode 100644
index 0000000000..29c23a9330
--- /dev/null
+++ b/FunctionSpace/HexLagrangeBasis.cpp
@@ -0,0 +1,32 @@
+#include "HexLagrangeBasis.h"
+#include "pointsGenerators.h"
+#include "ElementType.h"
+
+HexLagrangeBasis::HexLagrangeBasis(size_t order){
+  // If order 0 (Nedelec): use order 1
+  if(order == 0)
+    order = 1;
+
+  // Set Basis Type //
+  this->order = order;
+
+  type = 0;
+  dim  = 3;
+
+  nVertex   =  8;
+  nEdge     = 12 * (order - 1);
+  nFace     =  6 * (order - 1) * (order - 1);
+  nCell     =      (order - 1) * (order - 1) * (order - 1);
+  nFunction = nVertex + nEdge + nFace + nCell;
+
+  // Init polynomialBasis //
+  lBasis = new polynomialBasis(ElementType::getTag(TYPE_HEX, order, false));
+
+  // Init Lagrange Point //
+  lPoint = new fullMatrix<double>(gmshGeneratePointsHexahedron(order, false));
+}
+
+HexLagrangeBasis::~HexLagrangeBasis(void){
+  delete lBasis;
+  delete lPoint;
+}
diff --git a/FunctionSpace/HexLagrangeBasis.h b/FunctionSpace/HexLagrangeBasis.h
new file mode 100644
index 0000000000..c4cd73cf25
--- /dev/null
+++ b/FunctionSpace/HexLagrangeBasis.h
@@ -0,0 +1,30 @@
+#ifndef _HEXLAGRANGEBASIS_H_
+#define _HEXLAGRANGEBASIS_H_
+
+#include "BasisLagrange.h"
+
+/**
+   @class HexLagrangeBasis
+   @brief Lagrange Basis for Hexahedra
+
+   This class can instantiate a @em Lagrange @em Basis
+   for a Hexahedron and for a given Order.@n
+
+   It uses
+   <a href="http://geuz.org/gmsh/">gmsh</a> Basis.
+ */
+
+class HexLagrangeBasis: public BasisLagrange{
+ public:
+  //! @param order A natural number
+  //!
+  //! Returns a new HexLagrangeBasis
+  //! of the given Order
+  HexLagrangeBasis(size_t order);
+
+  //! Deletes this Basis
+  //!
+  virtual ~HexLagrangeBasis(void);
+};
+
+#endif
diff --git a/FunctionSpace/LineLagrangeBasis.cpp b/FunctionSpace/LineLagrangeBasis.cpp
index 5eab5408d0..9a17e50349 100644
--- a/FunctionSpace/LineLagrangeBasis.cpp
+++ b/FunctionSpace/LineLagrangeBasis.cpp
@@ -1,9 +1,8 @@
-#include "Exception.h"
 #include "LineLagrangeBasis.h"
 #include "pointsGenerators.h"
 #include "ElementType.h"
 
-LineLagrangeBasis::LineLagrangeBasis(unsigned int order){
+LineLagrangeBasis::LineLagrangeBasis(size_t order){
   // If order 0 (Nedelec): use order 1
   if(order == 0)
     order = 1;
@@ -21,26 +20,13 @@ LineLagrangeBasis::LineLagrangeBasis(unsigned int order){
   nFunction = nVertex + nEdge + nFace + nCell;
 
   // Init polynomialBasis //
-  lBasis = new polynomialBasis(getTag(order));
+  lBasis = new polynomialBasis(ElementType::getTag(TYPE_LIN, order, false));
 
   // Init Lagrange Point //
-  lPoint = new fullMatrix<double>
-    (gmshGeneratePointsLine(order));
+  lPoint = new fullMatrix<double>(gmshGeneratePointsLine(order));
 }
 
 LineLagrangeBasis::~LineLagrangeBasis(void){
   delete lBasis;
   delete lPoint;
 }
-
-unsigned int LineLagrangeBasis::getTag(unsigned int order){
-  unsigned int tag = ElementType::getTag(TYPE_LIN, order, false);
-
-  if(tag)
-    return tag;
-
-  else
-    throw Exception
-      ("Can't instanciate an order %d Lagrangian Basis for a Line",
-       order);
-}
diff --git a/FunctionSpace/LineLagrangeBasis.h b/FunctionSpace/LineLagrangeBasis.h
index af48c318d8..d7a0574849 100644
--- a/FunctionSpace/LineLagrangeBasis.h
+++ b/FunctionSpace/LineLagrangeBasis.h
@@ -20,17 +20,11 @@ class LineLagrangeBasis: public BasisLagrange{
   //!
   //! Returns a new LineLagrangeBasis
   //! of the given Order
-  LineLagrangeBasis(unsigned int order);
+  LineLagrangeBasis(size_t order);
 
   //! Deletes this Basis
   //!
   virtual ~LineLagrangeBasis(void);
-
- private:
-  //! @param order A natural number
-  //! @return Returns the @em tag of a @em Line of
-  //! the given order
-  static unsigned int getTag(unsigned int order);
 };
 
 #endif
diff --git a/FunctionSpace/QuadLagrangeBasis.cpp b/FunctionSpace/QuadLagrangeBasis.cpp
index db80145778..9367c4f727 100644
--- a/FunctionSpace/QuadLagrangeBasis.cpp
+++ b/FunctionSpace/QuadLagrangeBasis.cpp
@@ -1,9 +1,8 @@
-#include "Exception.h"
 #include "QuadLagrangeBasis.h"
 #include "pointsGenerators.h"
 #include "ElementType.h"
 
-QuadLagrangeBasis::QuadLagrangeBasis(unsigned int order){
+QuadLagrangeBasis::QuadLagrangeBasis(size_t order){
   // If order 0 (Nedelec): use order 1
   if(order == 0)
     order = 1;
@@ -21,26 +20,13 @@ QuadLagrangeBasis::QuadLagrangeBasis(unsigned int order){
   nFunction = nVertex + nEdge + nFace + nCell;
 
   // Init polynomialBasis //
-  lBasis = new polynomialBasis(getTag(order));
+  lBasis = new polynomialBasis(ElementType::getTag(TYPE_QUA, order, false));
 
   // Init Lagrange Point //
-  lPoint = new fullMatrix<double>
-    (gmshGeneratePointsQuadrangle(order, false));
+  lPoint = new fullMatrix<double>(gmshGeneratePointsQuadrangle(order, false));
 }
 
 QuadLagrangeBasis::~QuadLagrangeBasis(void){
   delete lBasis;
   delete lPoint;
 }
-
-unsigned int QuadLagrangeBasis::getTag(unsigned int order){
-  unsigned int tag = ElementType::getTag(TYPE_QUA, order, false);
-
-  if(tag)
-    return tag;
-
-  else
-    throw Exception
-      ("Can't instanciate an order %d Lagrangian Basis for a Quadrangle",
-       order);
-}
diff --git a/FunctionSpace/QuadLagrangeBasis.h b/FunctionSpace/QuadLagrangeBasis.h
index b1efbd50d3..1b0ad828fb 100644
--- a/FunctionSpace/QuadLagrangeBasis.h
+++ b/FunctionSpace/QuadLagrangeBasis.h
@@ -20,17 +20,11 @@ class QuadLagrangeBasis: public BasisLagrange{
   //!
   //! Returns a new QuadLagrangeBasis
   //! of the given Order
-  QuadLagrangeBasis(unsigned int order);
+  QuadLagrangeBasis(size_t order);
 
   //! Deletes this Basis
   //!
   virtual ~QuadLagrangeBasis(void);
-
- private:
-  //! @param order A natural number
-  //! @return Returns the @em tag of a @em Quadrangle of
-  //! the given order
-  static unsigned int getTag(unsigned int order);
 };
 
 #endif
diff --git a/FunctionSpace/ReferenceSpaceLagrange.cpp b/FunctionSpace/ReferenceSpaceLagrange.cpp
deleted file mode 100644
index 6c088a3027..0000000000
--- a/FunctionSpace/ReferenceSpaceLagrange.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-#include <sstream>
-#include "ReferenceSpaceLagrange.h"
-
-using namespace std;
-
-ReferenceSpaceLagrange::ReferenceSpaceLagrange(void){
-  // Init to NULL //
-  node = NULL;
-}
-
-ReferenceSpaceLagrange::~ReferenceSpaceLagrange(void){
-  const size_t nPerm = pTree->getNPermutation();
-
-  // If 'node' allocated //
-  if(node){
-    for(size_t p = 0; p < nPerm; p++)
-      delete (*node)[p];
-
-    delete node;
-  }
-}
-
-void ReferenceSpaceLagrange::getLagrangeNode(void){
-  /*
-  const size_t nPerm = pTree->getNPermutation();
-
-  // Alloc //
-  vector<size_t>* tmp;
-  node = new vector<const vector<size_t>*>(nPerm);
-
-  // Populate //
-  for(size_t p = 0; p < nPerm; p++){
-    // Alloc Temp //
-    tmp = new vector<size_t>(nNode);
-
-    // Vertex based node
-    for(size_t i = 0; i < nVertex; i++)
-      (*tmp)[i] = i;
-
-    // Edge based node
-    for(size_t e = 0; e < nEdge; e++)
-      edgeSeq(*tmp,
-              nVertex + nNodePerEdge *  e,
-              nVertex + nNodePerEdge *  e,
-              nVertex + nNodePerEdge * (e + 1),
-              refEdge[e],
-              *(*(*edge)[p])[e]);
-
-    // Face based node
-    for(size_t f = 0; f < nFace; f++)
-      faceSeq(*tmp,
-              nVertex + nNodePerEdge * nEdge + nNodePerFace *  f,
-              nVertex + nNodePerEdge * nEdge + nNodePerFace *  f,
-              nVertex + nNodePerEdge * nEdge + nNodePerFace * (f + 1),
-              refFace[f],
-              *(*(*face)[p])[f],
-              nNodePerEdge);
-
-    // Insert in node
-    (*node)[p] = tmp;
-  }
-  */
-}
-
-void ReferenceSpaceLagrange::edgeSeq(vector<size_t>& vec,
-                                     size_t  startIdx,
-                                     size_t  startVal,
-                                     size_t  stopVal,
-                                     size_t* refEdge,
-                                     const vector<size_t>& edge){
-
-  // Is reverted ? //
-  const bool isRevert = (edge[0] != refEdge[0]);
-
-  // Index //
-  size_t val = startVal;
-  size_t idx;
-
-  // Depending if edge is reverted ...
-  if(isRevert)
-    idx = startIdx + stopVal - startVal - 1;
-
-  else
-    idx = startIdx;
-
-  // Populate //
-  for(; val < stopVal; val++){
-    vec[idx] = val;
-
-    if(isRevert)
-      idx--;
-
-    else
-      idx++;
-  }
-}
-
-void ReferenceSpaceLagrange::faceSeq(vector<size_t>& vec,
-                                     size_t  startIdx,
-                                     size_t  startVal,
-                                     size_t  stopVal,
-                                     size_t* refFace,
-                                     const vector<size_t>& face,
-                                     size_t  nNodePerEdge){
-  // Index //
-  size_t val = startVal;
-  size_t idx = startIdx;
-
-  // Populate //
-  for(; val < stopVal; val++){
-    vec[idx] = val;
-    idx++;
-  }
-}
-
-string ReferenceSpaceLagrange::toString(void) const{
-  const size_t nPerm      = pTree->getNPermutation();
-  const size_t nNodeMinus = nNode - 1;
-  stringstream stream;
-
-  stream << ReferenceSpace::toString();
-
-  stream << "Lagrange Nodes Permutations:" << endl;
-
-  for(size_t i = 0; i < nPerm; i++){
-    stream << "  * RefSpace #" << i + 1 << ":" << endl
-           << "      -- [";
-
-    for(size_t j = 0; j < nNodeMinus; j++)
-      stream << node->at(i)->at(j) << ", ";
-
-    stream << node->at(i)->at(nNodeMinus) << "]" << endl;
-  }
-
-  return stream.str();
-}
diff --git a/FunctionSpace/ReferenceSpaceLagrange.h b/FunctionSpace/ReferenceSpaceLagrange.h
deleted file mode 100644
index 62f65b42ab..0000000000
--- a/FunctionSpace/ReferenceSpaceLagrange.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef _REFERENCESPACELAGRANGE_H_
-#define _REFERENCESPACELAGRANGE_H_
-
-#include "ReferenceSpace.h"
-
-/**
-   @interface ReferenceSpaceLagrange
-   @brief Base interface for all Lagrange ReferenceSpace%s
-
-   This class is a particular ReferenceSpace for
-   @em Lagrange Basis.@n
-
-   This class adds the notion of Lagrange points and
-   their permutations depending on the orientation
-   of a MElement.@n
-
-   Lagrange points are ordered in a way such that
-   Lagrange function must be taken in that order in order
-   to have an oriented basis.@n
-
-   Because the number of Lagrange Points depends on
-   the the order of the Lagrange Basis,
-   a ReferenceSpaceLagrange shall depend on the order.
- */
-
-class ReferenceSpaceLagrange: public ReferenceSpace{
- protected:
-  // Lagrange Node Permutation //
-  size_t nNode;
-  size_t nNodePerEdge;
-  size_t nNodePerFace;
-  size_t nNodePerCell;
-
-  std::vector<const std::vector<size_t>*>* node;
-
- public:
-  virtual ~ReferenceSpaceLagrange(void);
-
-  const std::vector<const std::vector<size_t>*>&
-    getAllLagrangeNode(void) const;
-
-  virtual std::string toString(void) const;
-
- protected:
-  ReferenceSpaceLagrange(void);
-
-  void getLagrangeNode(void);
-
-  static void edgeSeq(std::vector<size_t>& vec,
-                      size_t  startIdx,
-                      size_t  startVal,
-                      size_t  stopVal,
-                      size_t* refEdge,
-                      const std::vector<size_t>& edge);
-
-  static void faceSeq(std::vector<size_t>& vec,
-                      size_t  startIdx,
-                      size_t  startVal,
-                      size_t  stopVal,
-                      size_t* refFace,
-                      const std::vector<size_t>& face,
-                      size_t  nNodePerEdge);
-};
-
-
-/////////////////////
-// Inline Function //
-/////////////////////
-
-inline
-const std::vector<const std::vector<size_t>*>&
-ReferenceSpaceLagrange::getAllLagrangeNode(void) const{
-  return *node;
-}
-
-#endif
diff --git a/FunctionSpace/TetLagrangeBasis.cpp b/FunctionSpace/TetLagrangeBasis.cpp
index 71ed96c451..3aaf26ca79 100644
--- a/FunctionSpace/TetLagrangeBasis.cpp
+++ b/FunctionSpace/TetLagrangeBasis.cpp
@@ -1,9 +1,8 @@
-#include "Exception.h"
 #include "TetLagrangeBasis.h"
 #include "pointsGenerators.h"
 #include "ElementType.h"
 
-TetLagrangeBasis::TetLagrangeBasis(unsigned int order){
+TetLagrangeBasis::TetLagrangeBasis(size_t order){
   // If order 0 (Nedelec): use order 1
   if(order == 0)
     order = 1;
@@ -21,26 +20,13 @@ TetLagrangeBasis::TetLagrangeBasis(unsigned int order){
   nFunction = nVertex + nEdge + nFace + nCell;
 
   // Init polynomialBasis //
-  lBasis = new polynomialBasis(getTag(order));
+  lBasis = new polynomialBasis(ElementType::getTag(TYPE_TET, order, false));
 
   // Init Lagrange Point //
-  lPoint = new fullMatrix<double>
-    (gmshGeneratePointsTetrahedron(order, false));
+  lPoint = new fullMatrix<double>(gmshGeneratePointsTetrahedron(order, false));
 }
 
 TetLagrangeBasis::~TetLagrangeBasis(void){
   delete lBasis;
   delete lPoint;
 }
-
-unsigned int TetLagrangeBasis::getTag(unsigned int order){
-  unsigned int tag = ElementType::getTag(TYPE_TET, order, false);
-
-  if(tag)
-    return tag;
-
-  else
-    throw Exception
-      ("Can't instanciate an order %d Lagrangian Basis for a Tetrahedron",
-       order);
-}
diff --git a/FunctionSpace/TetLagrangeBasis.h b/FunctionSpace/TetLagrangeBasis.h
index ef7d8db129..97b02a31bf 100644
--- a/FunctionSpace/TetLagrangeBasis.h
+++ b/FunctionSpace/TetLagrangeBasis.h
@@ -20,17 +20,11 @@ class TetLagrangeBasis: public BasisLagrange{
   //!
   //! Returns a new TetLagrangeBasis
   //! of the given Order
-  TetLagrangeBasis(unsigned int order);
+  TetLagrangeBasis(size_t order);
 
   //! Deletes this Basis
   //!
   virtual ~TetLagrangeBasis(void);
-
- private:
-  //! @param order A natural number
-  //! @return Returns the @em tag of a @em Tetrahedron of
-  //! the given order
-  static unsigned int getTag(unsigned int order);
 };
 
 #endif
diff --git a/FunctionSpace/TriLagrangeBasis.cpp b/FunctionSpace/TriLagrangeBasis.cpp
index a6d4073b73..6a4a052731 100644
--- a/FunctionSpace/TriLagrangeBasis.cpp
+++ b/FunctionSpace/TriLagrangeBasis.cpp
@@ -1,9 +1,8 @@
 #include "TriLagrangeBasis.h"
 #include "pointsGenerators.h"
-//#include "TriReferenceSpace.h"
 #include "ElementType.h"
 
-TriLagrangeBasis::TriLagrangeBasis(unsigned int order){
+TriLagrangeBasis::TriLagrangeBasis(size_t order){
   // If order 0 (Nedelec): use order 1
   if(order == 0)
     order = 1;
@@ -24,17 +23,10 @@ TriLagrangeBasis::TriLagrangeBasis(unsigned int order){
   lBasis = new polynomialBasis(ElementType::getTag(TYPE_TRI, order, false));
 
   // Init Lagrange Point //
-  lPoint = new fullMatrix<double>
-    (gmshGeneratePointsTriangle(order, false));
-
-  // ReferenceSpace //
-  // refSpace = new TriReferenceSpace;
-  //  refSpace = new TriLagrangeReferenceSpace(order);
-  //  std::cout << refSpace->toString() << std::endl;
+  lPoint = new fullMatrix<double>(gmshGeneratePointsTriangle(order, false));
 }
 
 TriLagrangeBasis::~TriLagrangeBasis(void){
   delete lBasis;
   delete lPoint;
-  // delete refSpace;
 }
diff --git a/FunctionSpace/TriLagrangeBasis.h b/FunctionSpace/TriLagrangeBasis.h
index a49ab78c9f..9092be3631 100644
--- a/FunctionSpace/TriLagrangeBasis.h
+++ b/FunctionSpace/TriLagrangeBasis.h
@@ -20,17 +20,11 @@ class TriLagrangeBasis: public BasisLagrange{
   //!
   //! Returns a new TriLagrangeBasis
   //! of the given Order
-  TriLagrangeBasis(unsigned int order);
+  TriLagrangeBasis(size_t order);
 
   //! Deletes this Basis
   //!
   virtual ~TriLagrangeBasis(void);
-
- private:
-  //! @param order A natural number
-  //! @return Returns the @em tag of a @em Triangle of
-  //! the given order
-  static unsigned int getTag(unsigned int order);
 };
 
 #endif
diff --git a/FunctionSpace/TriLagrangeReferenceSpace.cpp b/FunctionSpace/TriLagrangeReferenceSpace.cpp
deleted file mode 100644
index 7ba864c88f..0000000000
--- a/FunctionSpace/TriLagrangeReferenceSpace.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-#include "TriLagrangeReferenceSpace.h"
-#include "MTriangle.h"
-
-using namespace std;
-
-TriLagrangeReferenceSpace::TriLagrangeReferenceSpace(unsigned int order){
-  /*
-  // Vertex Definition //
-  nVertex = 3;
-
-  // Edge Definition //
-  nEdge   = 3;
-  refEdge = new size_t*[nEdge];
-
-  for(size_t i = 0; i < nEdge; i++){
-    refEdge[i]    = new size_t[2];
-    refEdge[i][0] = MTriangle::edges_tri(i, 0);
-    refEdge[i][1] = MTriangle::edges_tri(i, 1);
-  }
-
-  // Face Definition //
-  nFace      = 1;
-  refFace    = new size_t*[nFace];
-  refFace[0] = new size_t[3];
-
-  refFace[0][0] = 0;
-  refFace[0][1] = 1;
-  refFace[0][2] = 2;
-
-  // Init ReferenceSpace //
-  init();
-
-  // Get Lagrange Node //
-  nNodePerEdge = 3 * (order - 1) / nEdge;
-  nNodePerFace =     (order - 1) * (order - 2) / 2 / nFace;
-  nNodePerCell = 0;
-
-  nNode =
-    nVertex +
-    nNodePerEdge * nEdge +
-    nNodePerFace * nFace +
-    nNodePerCell;
-
-  getLagrangeNode();
-  */
-}
-
-TriLagrangeReferenceSpace::~TriLagrangeReferenceSpace(void){
-  /*
-  // Delete Ref Edge //
-  for(size_t i = 0; i < nEdge; i++)
-    delete[] refEdge[i];
-
-  delete[] refEdge;
-
-  // Delete Ref Face //
-  for(size_t i = 0; i < nFace; i++)
-    delete[] refFace[i];
-
-  delete[] refFace;
-  */
-}
diff --git a/FunctionSpace/TriLagrangeReferenceSpace.h b/FunctionSpace/TriLagrangeReferenceSpace.h
deleted file mode 100644
index bdd26b5cd3..0000000000
--- a/FunctionSpace/TriLagrangeReferenceSpace.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef _TRILAGRANGEREFERENCESPACE_H_
-#define _TRILAGRANGEREFERENCESPACE_H_
-
-#include "ReferenceSpaceLagrange.h"
-
-/**
-   @class TriLagrangeReferenceSpace
-   @brief ReferenceSpaceLagrange for a Triangle
-
-   This class implements a ReferenceSpaceLagrange
-   for a Triangle.
- */
-
-class TriLagrangeReferenceSpace: public ReferenceSpaceLagrange{
- public:
-  TriLagrangeReferenceSpace(unsigned int order);
-  virtual ~TriLagrangeReferenceSpace(void);
-};
-
-/**
-   @fn TriLagrangeReferenceSpace::TriLagrangeReferenceSpace
-   @param order A natural number
-
-   Instatiate a new ReferenceLagrangeSpace for a Triangle
-   of the given order
-   **
-
-   @fn TriReferenceLagrangeSpace::~TriReferenceLagrangeSpace
-   Deletes this TriReferenceSpace
-*/
-
-#endif
-- 
GitLab