Skip to content
Snippets Groups Projects
Commit 9cfa6749 authored by Nicolas Marsic's avatar Nicolas Marsic
Browse files

Clean interface + Inline doxygen

parent 8f5ef171
No related branches found
No related tags found
No related merge requests found
...@@ -22,62 +22,52 @@ class Basis{ ...@@ -22,62 +22,52 @@ class Basis{
int dim; int dim;
public: public:
//! Deletes this Basis
//!
virtual ~Basis(void); virtual ~Basis(void);
//! @return Returns the @em polynomial @em order of the Basis
int getOrder(void) const; int getOrder(void) const;
//! @return Returns the @em type of the Basis:
//! @li 0 for 0-form
//! @li 1 for 1-form
//! @li 2 for 2-form
//! @li 3 for 3-form
//! @todo Check if the 'form numbering' is good
int getType(void) const; int getType(void) const;
//! @return Returns the number of Polynomial%s
//! (or Vector%s of Polynomial%s) in the Basis
int getSize(void) const; int getSize(void) const;
//! @return Returns the node number of
//! the @em geometric @em reference @em element
int getNodeNbr(void) const; int getNodeNbr(void) const;
//! @return Returns the @em dimension
//! (1D, 2D or 3D) of the Basis
int getDim(void) const; int getDim(void) const;
//! @return Returns:
//! @li @c true, if this is a
//! @em scalar Basis (BasisScalar)
//! @li @c false, if this is a
//! @em vectorial Basis (BasisVector)
//!
//! @note
//! Scalar basis are sets of
//! Polynomial%s@n
//! Vectorial basis are sets of
//! Vector%s of Polynomial%s
bool isScalar(void) const; bool isScalar(void) const;
protected: protected:
//! Instantiate a new Basis
//! @warning Users can't instantiate a Basis
Basis(void); Basis(void);
}; };
/**
@fn Basis::~Basis(void)
@return Deletes this Basis
@fn int Basis::getOrder(void) const
@return Returns the @em polynomial @em order of the Basis
@fn int Basis::getType(void) const
@return Returns the @em type of the Basis:
@li 0 for 0-form
@li 1 for 1-form
@li 2 for 2-form
@li 3 for 3-form
@todo Check if the 'form numbering' is good
@fn int Basis::getSize(void) const
@return Returns the number of Polynomial%s
(or Vector%s of Polynomial%s) in the Basis
@fn int Basis::getNodeNbr(void) const
@return Returns the node number of
the @em geometric @em reference @em element
@fn int Basis::getDim(void) const
@return Returns the @em dimension
(1D, 2D or 3D) of the Basis
@fn bool Basis::isScalar(void) const
@return Returns:
@li @c true, if this is a
@em scalar Basis (BasisScalar)
@li @c false, if this is a
@em vectorial Basis (BasisVector)
@note
Scalar basis are sets of
Polynomial%s@n
Vectorial basis are sets of
Vector%s of Polynomial%s
*/
////////////////////// //////////////////////
// Inline Functions // // Inline Functions //
////////////////////// //////////////////////
......
#ifndef _BASISSCALAR_H_ #ifndef _BASISSCALAR_H_
#define _BASISSCALAR_H_ #define _BASISSCALAR_H_
#include <vector>
#include "Basis.h" #include "Basis.h"
#include "Polynomial.h" #include "Polynomial.h"
...@@ -15,33 +16,29 @@ ...@@ -15,33 +16,29 @@
class BasisScalar: public Basis{ class BasisScalar: public Basis{
protected: protected:
Polynomial* basis; std::vector<Polynomial>* basis;
public: public:
//! Deletes this BasisScalar
//!
virtual ~BasisScalar(void); virtual ~BasisScalar(void);
Polynomial* getBasis(void) const; //! @return Returns the set of @em Polynomial%s
//! defining this (scalar) Basis
const std::vector<Polynomial>& getBasis(void) const;
protected: protected:
//! Instantiate a new BasisScalar
//! @warning Users can't instantiate a BasisScalar
BasisScalar(void); BasisScalar(void);
}; };
/**
@fn BasisScalar::~BasisScalar
@return Deletes this Basis
@fn BasisScalar::getBasis
@return Returns the set of
@em Polynomial%s
that defines this Basis
*/
////////////////////// //////////////////////
// Inline Functions // // Inline Functions //
////////////////////// //////////////////////
inline Polynomial* BasisScalar::getBasis(void) const{ inline const std::vector<Polynomial>& BasisScalar::getBasis(void) const{
return basis; return *basis;
} }
#endif #endif
...@@ -16,33 +16,29 @@ ...@@ -16,33 +16,29 @@
class BasisVector: public Basis{ class BasisVector: public Basis{
protected: protected:
std::vector<Polynomial>* basis; std::vector<std::vector<Polynomial> >* basis;
public: public:
//! Deletes this BasisVector
//!
virtual ~BasisVector(void); virtual ~BasisVector(void);
std::vector<Polynomial>* getBasis(void) const; //! @return Returns the set of @em Polynomial%s
//! defining this (vectorial) Basis
const std::vector<std::vector<Polynomial> >& getBasis(void) const;
protected: protected:
//! Instantiate a new BasisVector
//! @warning Users can't instantiate a BasisVector
BasisVector(void); BasisVector(void);
}; };
/**
@fn BasisVector::~BasisVector
@return Deletes this Basis
@fn BasisVector::getBasis
@return Returns the set of
@em Vector%s @em of @em Polynomial%s
that defines this Basis
*/
////////////////////// //////////////////////
// Inline Functions // // Inline Functions //
////////////////////// //////////////////////
inline std::vector<Polynomial>* BasisVector::getBasis(void) const{ inline const std::vector<std::vector<Polynomial> >& BasisVector::getBasis(void) const{
return basis; return *basis;
} }
#endif #endif
...@@ -74,10 +74,10 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){ ...@@ -74,10 +74,10 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
// Basis // // Basis //
basis = new std::vector<Polynomial>[size]; basis = new std::vector<std::vector<Polynomial> >(size);
for(int i = 0; i < size; i++) for(int i = 0; i < size; i++)
basis[i].resize(3); (*basis)[i].resize(3);
// Edge Based (Nedelec) // // Edge Based (Nedelec) //
...@@ -85,16 +85,16 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){ ...@@ -85,16 +85,16 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
Polynomial oneHalf(0.5, 0, 0, 0); Polynomial oneHalf(0.5, 0, 0, 0);
for(int e = 0; e < 4; e++){ for(int e = 0; e < 4; e++){
basis[i] = (*basis)[i] =
(liftingSub[e]).gradient(); (liftingSub[e]).gradient();
basis[i][0].mul(lagrangeSum[e]); (*basis)[i][0].mul(lagrangeSum[e]);
basis[i][1].mul(lagrangeSum[e]); (*basis)[i][1].mul(lagrangeSum[e]);
basis[i][2].mul(lagrangeSum[e]); (*basis)[i][2].mul(lagrangeSum[e]);
basis[i][0].mul(oneHalf); (*basis)[i][0].mul(oneHalf);
basis[i][1].mul(oneHalf); (*basis)[i][1].mul(oneHalf);
basis[i][2].mul(oneHalf); (*basis)[i][2].mul(oneHalf);
i++; i++;
} }
...@@ -102,7 +102,7 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){ ...@@ -102,7 +102,7 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
// Edge Based (High Order) // // Edge Based (High Order) //
for(int l = 1; l < orderPlus; l++){ for(int l = 1; l < orderPlus; l++){
for(int e = 0; e < 4; e++){ for(int e = 0; e < 4; e++){
basis[i] = (*basis)[i] =
(intLegendre[l].compose(liftingSub[e]) * lagrangeSum[e]).gradient(); (intLegendre[l].compose(liftingSub[e]) * lagrangeSum[e]).gradient();
i++; i++;
...@@ -128,7 +128,7 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){ ...@@ -128,7 +128,7 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
// Cell Based (Type 1) // // Cell Based (Type 1) //
for(int l1 = 1; l1 < orderPlus; l1++){ for(int l1 = 1; l1 < orderPlus; l1++){
for(int l2 = 1; l2 < orderPlus; l2++){ for(int l2 = 1; l2 < orderPlus; l2++){
basis[i] = (iLegendreX[l1] * iLegendreY[l2]).gradient(); (*basis)[i] = (iLegendreX[l1] * iLegendreY[l2]).gradient();
i++; i++;
} }
...@@ -137,9 +137,9 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){ ...@@ -137,9 +137,9 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
// Cell Based (Type 2) // // Cell Based (Type 2) //
for(int l1 = 1; l1 < orderPlus; l1++){ for(int l1 = 1; l1 < orderPlus; l1++){
for(int l2 = 1; l2 < orderPlus; l2++){ for(int l2 = 1; l2 < orderPlus; l2++){
basis[i][0] = legendreX[l1] * iLegendreY[l2]; (*basis)[i][0] = legendreX[l1] * iLegendreY[l2];
basis[i][1] = iLegendreX[l1] * legendreY[l2] * -1; (*basis)[i][1] = iLegendreX[l1] * legendreY[l2] * -1;
basis[i][2] = zero; (*basis)[i][2] = zero;
i++; i++;
} }
...@@ -147,13 +147,13 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){ ...@@ -147,13 +147,13 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
// Cell Based (Type 3) // // Cell Based (Type 3) //
for(int l = 1, iPlus = i + order; l < orderPlus; l++, iPlus++){ for(int l = 1, iPlus = i + order; l < orderPlus; l++, iPlus++){
basis[i][0] = iLegendreY[l]; (*basis)[i][0] = iLegendreY[l];
basis[i][1] = zero; (*basis)[i][1] = zero;
basis[i][2] = zero; (*basis)[i][2] = zero;
basis[iPlus][0] = zero; (*basis)[iPlus][0] = zero;
basis[iPlus][1] = iLegendreX[l]; (*basis)[iPlus][1] = iLegendreX[l];
basis[iPlus][2] = zero; (*basis)[iPlus][2] = zero;
i++; i++;
} }
...@@ -175,7 +175,7 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){ ...@@ -175,7 +175,7 @@ QuadEdgeBasis::QuadEdgeBasis(const int order){
} }
QuadEdgeBasis::~QuadEdgeBasis(void){ QuadEdgeBasis::~QuadEdgeBasis(void){
delete[] basis; delete basis;
} }
/* /*
...@@ -187,7 +187,7 @@ int main(void){ ...@@ -187,7 +187,7 @@ int main(void){
QuadEdgeBasis b(P); QuadEdgeBasis b(P);
const std::vector<Polynomial>* basis = b.getBasis(); const std::vector<std::vector<Polynomial> >& basis = b.getBasis();
printf("\n"); printf("\n");
printf("clear all;\n"); printf("clear all;\n");
......
...@@ -17,17 +17,13 @@ ...@@ -17,17 +17,13 @@
class QuadEdgeBasis: public BasisVector{ class QuadEdgeBasis: public BasisVector{
public: public:
//! Returns a new Edge-Basis for Quads of the given order
//! @param order The order of the Basis
QuadEdgeBasis(const int order); QuadEdgeBasis(const int order);
//! Deletes this Basis
//!
virtual ~QuadEdgeBasis(void); virtual ~QuadEdgeBasis(void);
}; };
/**
@fn QuadEdgeBasis::QuadEdgeBasis(const int order)
@param order The order of the Basis
@return Returns a new Edge-Basis for Quads of the given order
@fn QuadEdgeBasis::~QuadEdgeBasis(void)
@return Deletes this Basis
*/
#endif #endif
...@@ -37,22 +37,22 @@ QuadNodeBasis::QuadNodeBasis(const int order){ ...@@ -37,22 +37,22 @@ QuadNodeBasis::QuadNodeBasis(const int order){
// Basis // // Basis //
basis = new Polynomial[size]; basis = new std::vector<Polynomial>(size);
// Vertex Based (Lagrange) // // Vertex Based (Lagrange) //
basis[0] = (*basis)[0] =
(Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) * (Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) *
(Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0)); (Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0));
basis[1] = (*basis)[1] =
(Polynomial(1, 1, 0, 0)) * (Polynomial(1, 1, 0, 0)) *
(Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0)); (Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0));
basis[2] = (*basis)[2] =
(Polynomial(1, 1, 0, 0)) * (Polynomial(1, 1, 0, 0)) *
(Polynomial(1, 0, 1, 0)); (Polynomial(1, 0, 1, 0));
basis[3] = (*basis)[3] =
(Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) * (Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) *
(Polynomial(1, 0, 1, 0)); (Polynomial(1, 0, 1, 0));
...@@ -61,8 +61,8 @@ QuadNodeBasis::QuadNodeBasis(const int order){ ...@@ -61,8 +61,8 @@ QuadNodeBasis::QuadNodeBasis(const int order){
for(int l = 1; l < order; l++){ for(int l = 1; l < order; l++){
for(int e1 = 0, e2 = 1; e1 < 4; e1++, e2 = (e2 + 1) % 4){ for(int e1 = 0, e2 = 1; e1 < 4; e1++, e2 = (e2 + 1) % 4){
basis[i] = (*basis)[i] =
legendre[l].compose(lifting[e2] - lifting[e1]) * (basis[e1] + basis[e2]); legendre[l].compose(lifting[e2] - lifting[e1]) * ((*basis)[e1] + (*basis)[e2]);
i++; i++;
} }
...@@ -77,7 +77,7 @@ QuadNodeBasis::QuadNodeBasis(const int order){ ...@@ -77,7 +77,7 @@ QuadNodeBasis::QuadNodeBasis(const int order){
for(int l1 = 1; l1 < order; l1++){ for(int l1 = 1; l1 < order; l1++){
for(int l2 = 1; l2 < order; l2++){ for(int l2 = 1; l2 < order; l2++){
basis[i] = legendre[l1].compose(px) * legendre[l2].compose(py); (*basis)[i] = legendre[l1].compose(px) * legendre[l2].compose(py);
i++; i++;
} }
...@@ -89,7 +89,7 @@ QuadNodeBasis::QuadNodeBasis(const int order){ ...@@ -89,7 +89,7 @@ QuadNodeBasis::QuadNodeBasis(const int order){
} }
QuadNodeBasis::~QuadNodeBasis(void){ QuadNodeBasis::~QuadNodeBasis(void){
delete[] basis; delete basis;
} }
/* /*
...@@ -100,7 +100,7 @@ int main(void){ ...@@ -100,7 +100,7 @@ int main(void){
QuadNodeBasis b(P); QuadNodeBasis b(P);
const Polynomial* basis = b.getBasis(); const std::vector<Polynomial>& basis = b.getBasis();
printf("\n"); printf("\n");
printf("clear all;\n"); printf("clear all;\n");
......
...@@ -17,17 +17,13 @@ ...@@ -17,17 +17,13 @@
class QuadNodeBasis: public BasisScalar{ class QuadNodeBasis: public BasisScalar{
public: public:
//! Returns a new Node-Basis for Quads of the given order
//! @param order The order of the Basis
QuadNodeBasis(const int order); QuadNodeBasis(const int order);
//! @return Deletes this Basis
//!
virtual ~QuadNodeBasis(void); virtual ~QuadNodeBasis(void);
}; };
/**
@fn QuadNodeBasis::QuadNodeBasis(const int order)
@param order The order of the Basis
@return Returns a new Node-Basis for Quads of the given order
@fn QuadNodeBasis::~QuadNodeBasis(void)
@return Deletes this Basis
*/
#endif #endif
...@@ -48,10 +48,10 @@ TriEdgeBasis::TriEdgeBasis(const int order){ ...@@ -48,10 +48,10 @@ TriEdgeBasis::TriEdgeBasis(const int order){
// Basis // // Basis //
basis = new std::vector<Polynomial>[size]; basis = new std::vector<std::vector<Polynomial> >(size);
for(int i = 0; i < size; i++) for(int i = 0; i < size; i++)
basis[i].resize(3); (*basis)[i].resize(3);
// Edge Based (Nedelec) // // Edge Based (Nedelec) //
...@@ -63,15 +63,15 @@ TriEdgeBasis::TriEdgeBasis(const int order){ ...@@ -63,15 +63,15 @@ TriEdgeBasis::TriEdgeBasis(const int order){
tmp[1].mul(lagrange[i]); tmp[1].mul(lagrange[i]);
tmp[2].mul(lagrange[i]); tmp[2].mul(lagrange[i]);
basis[i] = lagrange[i].gradient(); (*basis)[i] = lagrange[i].gradient();
basis[i][0].mul(lagrange[j]); (*basis)[i][0].mul(lagrange[j]);
basis[i][1].mul(lagrange[j]); (*basis)[i][1].mul(lagrange[j]);
basis[i][2].mul(lagrange[j]); (*basis)[i][2].mul(lagrange[j]);
basis[i][0].sub(tmp[0]); (*basis)[i][0].sub(tmp[0]);
basis[i][1].sub(tmp[1]); (*basis)[i][1].sub(tmp[1]);
basis[i][2].sub(tmp[2]); (*basis)[i][2].sub(tmp[2]);
i++; i++;
} }
...@@ -79,7 +79,7 @@ TriEdgeBasis::TriEdgeBasis(const int order){ ...@@ -79,7 +79,7 @@ TriEdgeBasis::TriEdgeBasis(const int order){
// Edge Based (High Order) // // Edge Based (High Order) //
for(int l = 1; l < orderPlus; l++){ for(int l = 1; l < orderPlus; l++){
for(int e = 0; e < 3; e++){ for(int e = 0; e < 3; e++){
basis[i] = (*basis)[i] =
(intLegendre[l].compose(lagrangeSub[e], lagrangeSum[e])).gradient(); (intLegendre[l].compose(lagrangeSub[e], lagrangeSum[e])).gradient();
i++; i++;
...@@ -103,15 +103,15 @@ TriEdgeBasis::TriEdgeBasis(const int order){ ...@@ -103,15 +103,15 @@ TriEdgeBasis::TriEdgeBasis(const int order){
tmp[1].mul(u[l1]); tmp[1].mul(u[l1]);
tmp[2].mul(u[l1]); tmp[2].mul(u[l1]);
basis[i] = u[l1].gradient(); (*basis)[i] = u[l1].gradient();
basis[i][0].mul(v[l2]); (*basis)[i][0].mul(v[l2]);
basis[i][1].mul(v[l2]); (*basis)[i][1].mul(v[l2]);
basis[i][2].mul(v[l2]); (*basis)[i][2].mul(v[l2]);
basis[i][0].add(tmp[0]); (*basis)[i][0].add(tmp[0]);
basis[i][1].add(tmp[1]); (*basis)[i][1].add(tmp[1]);
basis[i][2].add(tmp[2]); (*basis)[i][2].add(tmp[2]);
i++; i++;
} }
...@@ -125,15 +125,15 @@ TriEdgeBasis::TriEdgeBasis(const int order){ ...@@ -125,15 +125,15 @@ TriEdgeBasis::TriEdgeBasis(const int order){
tmp[1].mul(u[l1]); tmp[1].mul(u[l1]);
tmp[2].mul(u[l1]); tmp[2].mul(u[l1]);
basis[i] = u[l1].gradient(); (*basis)[i] = u[l1].gradient();
basis[i][0].mul(v[l2]); (*basis)[i][0].mul(v[l2]);
basis[i][1].mul(v[l2]); (*basis)[i][1].mul(v[l2]);
basis[i][2].mul(v[l2]); (*basis)[i][2].mul(v[l2]);
basis[i][0].sub(tmp[0]); (*basis)[i][0].sub(tmp[0]);
basis[i][1].sub(tmp[1]); (*basis)[i][1].sub(tmp[1]);
basis[i][2].sub(tmp[2]); (*basis)[i][2].sub(tmp[2]);
i++; i++;
} }
...@@ -141,11 +141,11 @@ TriEdgeBasis::TriEdgeBasis(const int order){ ...@@ -141,11 +141,11 @@ TriEdgeBasis::TriEdgeBasis(const int order){
// Cell Based (Type 3) // // Cell Based (Type 3) //
for(int l = 0; l < orderMinus; l++){ for(int l = 0; l < orderMinus; l++){
basis[i] = basis[0]; (*basis)[i] = (*basis)[0];
basis[i][0].mul(v[l]); (*basis)[i][0].mul(v[l]);
basis[i][1].mul(v[l]); (*basis)[i][1].mul(v[l]);
basis[i][2].mul(v[l]); (*basis)[i][2].mul(v[l]);
i++; i++;
} }
...@@ -161,7 +161,7 @@ TriEdgeBasis::TriEdgeBasis(const int order){ ...@@ -161,7 +161,7 @@ TriEdgeBasis::TriEdgeBasis(const int order){
} }
TriEdgeBasis::~TriEdgeBasis(void){ TriEdgeBasis::~TriEdgeBasis(void){
delete[] basis; delete basis;
} }
/* /*
...@@ -173,7 +173,7 @@ int main(void){ ...@@ -173,7 +173,7 @@ int main(void){
TriEdgeBasis b(P); TriEdgeBasis b(P);
const std::vector<Polynomial>* basis = b.getBasis(); const std::vector<std::vector<Polynomial> >& basis = b.getBasis();
printf("\n"); printf("\n");
printf("clear all;\n"); printf("clear all;\n");
......
...@@ -17,18 +17,13 @@ ...@@ -17,18 +17,13 @@
class TriEdgeBasis: public BasisVector{ class TriEdgeBasis: public BasisVector{
public: public:
//! Returns a new Edge-Basis for Triangles of the given order
//! @param order The order of the Basis
TriEdgeBasis(const int order); TriEdgeBasis(const int order);
//! Deletes this Basis
//!
virtual ~TriEdgeBasis(void); virtual ~TriEdgeBasis(void);
}; };
/**
@fn TriEdgeBasis::TriEdgeBasis(const int order)
@param order The order of the Basis
@return Returns a new Edge-Basis for Triangles of the given order
@fn TriEdgeBasis::~TriEdgeBasis(void)
@return Deletes this Basis
*/
#endif #endif
...@@ -21,10 +21,10 @@ TriNedelecBasis::TriNedelecBasis(void){ ...@@ -21,10 +21,10 @@ TriNedelecBasis::TriNedelecBasis(void){
Polynomial(1, 0, 1, 0); Polynomial(1, 0, 1, 0);
// Basis // // Basis //
basis = new std::vector<Polynomial>[size]; basis = new std::vector<std::vector<Polynomial> >(size);
for(int i = 0; i < size; i++) for(int i = 0; i < size; i++)
basis[i].resize(3); (*basis)[i].resize(3);
for(int i = 0, j = 1; i < 3; i++, j = (j + 1) % 3){ for(int i = 0, j = 1; i < 3; i++, j = (j + 1) % 3){
std::vector<Polynomial> tmp = lagrange[j].gradient(); std::vector<Polynomial> tmp = lagrange[j].gradient();
...@@ -32,15 +32,15 @@ TriNedelecBasis::TriNedelecBasis(void){ ...@@ -32,15 +32,15 @@ TriNedelecBasis::TriNedelecBasis(void){
tmp[1].mul(lagrange[i]); tmp[1].mul(lagrange[i]);
tmp[2].mul(lagrange[i]); tmp[2].mul(lagrange[i]);
basis[i] = lagrange[i].gradient(); (*basis)[i] = lagrange[i].gradient();
basis[i][0].mul(lagrange[j]); (*basis)[i][0].mul(lagrange[j]);
basis[i][1].mul(lagrange[j]); (*basis)[i][1].mul(lagrange[j]);
basis[i][2].mul(lagrange[j]); (*basis)[i][2].mul(lagrange[j]);
basis[i][0].sub(tmp[0]); (*basis)[i][0].sub(tmp[0]);
basis[i][1].sub(tmp[1]); (*basis)[i][1].sub(tmp[1]);
basis[i][2].sub(tmp[2]); (*basis)[i][2].sub(tmp[2]);
} }
// Free Temporary Sapce // // Free Temporary Sapce //
...@@ -48,7 +48,7 @@ TriNedelecBasis::TriNedelecBasis(void){ ...@@ -48,7 +48,7 @@ TriNedelecBasis::TriNedelecBasis(void){
} }
TriNedelecBasis::~TriNedelecBasis(void){ TriNedelecBasis::~TriNedelecBasis(void){
delete[] basis; delete basis;
} }
/* /*
...@@ -60,7 +60,7 @@ int main(void){ ...@@ -60,7 +60,7 @@ int main(void){
TriNedelecBasis b; TriNedelecBasis b;
const std::vector<Polynomial>* basis = b.getBasis(); const std::vector<std::vector<Polynomial> >& basis = b.getBasis();
printf("\n"); printf("\n");
printf("clear all;\n"); printf("clear all;\n");
......
...@@ -13,17 +13,13 @@ ...@@ -13,17 +13,13 @@
class TriNedelecBasis: public BasisVector{ class TriNedelecBasis: public BasisVector{
public: public:
//! Returns a new Nedelec Basis for Triangles
//!
TriNedelecBasis(void); TriNedelecBasis(void);
//! Deletes this Basis
//!
virtual ~TriNedelecBasis(void); virtual ~TriNedelecBasis(void);
}; };
/**
@fn TriNedelecBasis::TriNedelecBasis
@return Returns a new Nedelec Basis for Triangles
@fn TriNedelecBasis::~TriNedelecBasis(void)
@return Deletes this Basis
*/
#endif #endif
...@@ -24,26 +24,26 @@ TriNodeBasis::TriNodeBasis(const int order){ ...@@ -24,26 +24,26 @@ TriNodeBasis::TriNodeBasis(const int order){
// Basis // // Basis //
basis = new Polynomial[size]; basis = new std::vector<Polynomial>(size);
// Vertex Based (Lagrange) // // Vertex Based (Lagrange) //
basis[0] = (*basis)[0] =
Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0) - Polynomial(1, 0, 1, 0); Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0) - Polynomial(1, 0, 1, 0);
basis[1] = (*basis)[1] =
Polynomial(1, 1, 0, 0); Polynomial(1, 1, 0, 0);
basis[2] = (*basis)[2] =
Polynomial(1, 0, 1, 0); Polynomial(1, 0, 1, 0);
// Lagrange Sum // // Lagrange Sum //
for(int i = 0, j = 1; i < 3; i++, j = (j + 1) % 3) for(int i = 0, j = 1; i < 3; i++, j = (j + 1) % 3)
lagrangeSum[i] = basis[i] + basis[j]; lagrangeSum[i] = (*basis)[i] + (*basis)[j];
// Lagrange Sub // // Lagrange Sub //
for(int i = 0, j = 1; i < 3; i++, j = (j + 1) % 3) for(int i = 0, j = 1; i < 3; i++, j = (j + 1) % 3)
lagrangeSub[i] = basis[j] - basis[i]; lagrangeSub[i] = (*basis)[j] - (*basis)[i];
// Edge Based // // Edge Based //
...@@ -51,7 +51,7 @@ TriNodeBasis::TriNodeBasis(const int order){ ...@@ -51,7 +51,7 @@ TriNodeBasis::TriNodeBasis(const int order){
for(int l = 1; l < order; l++){ for(int l = 1; l < order; l++){
for(int e = 0; e < 3; e++){ for(int e = 0; e < 3; e++){
basis[i] = (*basis)[i] =
intLegendre[l].compose(lagrangeSub[e], lagrangeSum[e]); intLegendre[l].compose(lagrangeSub[e], lagrangeSum[e]);
i++; i++;
...@@ -59,14 +59,14 @@ TriNodeBasis::TriNodeBasis(const int order){ ...@@ -59,14 +59,14 @@ TriNodeBasis::TriNodeBasis(const int order){
} }
// Cell Based // // Cell Based //
Polynomial p = basis[2] * 2 - Polynomial(1, 0, 0, 0); Polynomial p = (*basis)[2] * 2 - Polynomial(1, 0, 0, 0);
const int orderMinusTwo = order - 2; const int orderMinusTwo = order - 2;
for(int l1 = 1; l1 < orderMinus; l1++){ for(int l1 = 1; l1 < orderMinus; l1++){
for(int l2 = 0; l2 + l1 - 1 < orderMinusTwo; l2++){ for(int l2 = 0; l2 + l1 - 1 < orderMinusTwo; l2++){
basis[i] = (*basis)[i] =
intLegendre[l1].compose(lagrangeSub[0], lagrangeSum[0]) * intLegendre[l1].compose(lagrangeSub[0], lagrangeSum[0]) *
legendre[l2].compose(p) * basis[2]; legendre[l2].compose(p) * (*basis)[2];
i++; i++;
} }
...@@ -80,7 +80,7 @@ TriNodeBasis::TriNodeBasis(const int order){ ...@@ -80,7 +80,7 @@ TriNodeBasis::TriNodeBasis(const int order){
} }
TriNodeBasis::~TriNodeBasis(void){ TriNodeBasis::~TriNodeBasis(void){
delete[] basis; delete basis;
} }
/* /*
...@@ -91,7 +91,7 @@ int main(void){ ...@@ -91,7 +91,7 @@ int main(void){
TriNodeBasis b(P); TriNodeBasis b(P);
const Polynomial* basis = b.getBasis(); const std::vector<Polynomial>& basis = b.getBasis();
printf("\n"); printf("\n");
printf("clear all;\n"); printf("clear all;\n");
......
...@@ -17,17 +17,13 @@ ...@@ -17,17 +17,13 @@
class TriNodeBasis: public BasisScalar{ class TriNodeBasis: public BasisScalar{
public: public:
//! Returns a new Node-Basis for Triangles of the given order
//! @param order The order of the Basis
TriNodeBasis(const int order); TriNodeBasis(const int order);
//! Deletes this Basis
//!
virtual ~TriNodeBasis(void); virtual ~TriNodeBasis(void);
}; };
/**
@fn TriNodeBasis::TriNodeBasis(const int order)
@param order The order of the Basis
@return Returns a new Node-Basis for Triangles of the given order
@fn TriNodeBasis::~TriNodeBasis(void)
@return Deletes this Basis
*/
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment