diff --git a/FunctionSpace/LineNedelecBasis.cpp b/FunctionSpace/LineNedelecBasis.cpp index 7f3d9fd8aa770bea510dba554ce735ff526019a6..1cab63473b13ccccd096a21a273be8297e3bc47a 100644 --- a/FunctionSpace/LineNedelecBasis.cpp +++ b/FunctionSpace/LineNedelecBasis.cpp @@ -10,8 +10,8 @@ LineNedelecBasis::LineNedelecBasis(void){ nRefSpace = refSpace->getNPermutation(); // Set Basis Type // - order = 1; - + order = 0; + type = 1; dim = 1; @@ -38,7 +38,7 @@ LineNedelecBasis::LineNedelecBasis(void){ for(unsigned int s = 0; s < nRefSpace; s++) basis[s] = new vector<Polynomial>*[nFunction]; - // Nedelec // + // Nedelec // basis[0][0] = new vector<Polynomial>(first); basis[1][0] = new vector<Polynomial>(second); } diff --git a/FunctionSpace/QuadEdgeBasis.cpp b/FunctionSpace/QuadEdgeBasis.cpp index 463e960fc1bb6bf39129b2eef7b026e017d61edd..66b689b007a69d01fc520dc64dba63231ab10592 100644 --- a/FunctionSpace/QuadEdgeBasis.cpp +++ b/FunctionSpace/QuadEdgeBasis.cpp @@ -6,14 +6,14 @@ using namespace std; QuadEdgeBasis::QuadEdgeBasis(int order){ // Set Basis Type // this->order = order; - + type = 1; dim = 2; nVertex = 0; nEdge = 4 * (order + 1); - nFace = 0; - nCell = 2 * (order + 1) * order; + nFace = 2 * (order + 1) * order; + nCell = 0; nEdgeClosure = 2; nFaceClosure = 0; @@ -41,86 +41,86 @@ QuadEdgeBasis::QuadEdgeBasis(int order){ Legendre::legendre(legendre, order); // Vertices definig Edges & Permutations // - const int edgeV[2][4][2] = + const int edgeV[2][4][2] = { { {0, 1}, {1, 2}, {2, 3}, {3, 0} }, { {1, 0}, {2, 1}, {3, 2}, {0, 3} } - }; + }; // Basis // node = new vector<vector<Polynomial>*>(nVertex); edge = new vector<vector<vector<Polynomial>*>*>(2); face = new vector<vector<vector<Polynomial>*>*>(0); cell = new vector<vector<Polynomial>*>(nCell); - + (*edge)[0] = new vector<vector<Polynomial>*>(nEdge); (*edge)[1] = new vector<vector<Polynomial>*>(nEdge); - // Lagrange // - lagrange[0] = + // Lagrange // + lagrange[0] = (Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) * (Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0)); - lagrange[1] = + lagrange[1] = (Polynomial(1, 1, 0, 0)) * (Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0)); - lagrange[2] = + lagrange[2] = (Polynomial(1, 1, 0, 0)) * (Polynomial(1, 0, 1, 0)); - lagrange[3] = + lagrange[3] = (Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) * (Polynomial(1, 0, 1, 0)); // Lagrange Sum // for(int e = 0; e < 4; e++) - lagrangeSum[e] = - lagrange[edgeV[0][e][0]] + + lagrangeSum[e] = + lagrange[edgeV[0][e][0]] + lagrange[edgeV[0][e][1]]; - + // Lifting // - lifting[0] = + lifting[0] = (Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) + (Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0)); - lifting[1] = + lifting[1] = (Polynomial(1, 1, 0, 0)) + (Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0)); - lifting[2] = + lifting[2] = (Polynomial(1, 1, 0, 0)) + (Polynomial(1, 0, 1, 0)); - lifting[3] = + lifting[3] = (Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) + (Polynomial(1, 0, 1, 0)); // Lifting Sub // for(int e = 0; e < 4; e++){ - liftingSub[0][e] = - lifting[edgeV[0][e][0]] - + liftingSub[0][e] = + lifting[edgeV[0][e][0]] - lifting[edgeV[0][e][1]]; - liftingSub[1][e] = - lifting[edgeV[1][e][0]] - + liftingSub[1][e] = + lifting[edgeV[1][e][0]] - lifting[edgeV[1][e][1]]; } - // Edge Based (Nedelec) // + // Edge Based (Nedelec) // Polynomial oneHalf(0.5, 0, 0, 0); for(int c = 0; c < 2; c++){ for(int e = 0; e < 4; e++){ - (*(*edge)[c])[e] = + (*(*edge)[c])[e] = new vector<Polynomial>(liftingSub[c][e].gradient()); - + (*(*edge)[c])[e]->at(0).mul(lagrangeSum[e]); (*(*edge)[c])[e]->at(1).mul(lagrangeSum[e]); (*(*edge)[c])[e]->at(2).mul(lagrangeSum[e]); - + (*(*edge)[c])[e]->at(0).mul(oneHalf); (*(*edge)[c])[e]->at(1).mul(oneHalf); (*(*edge)[c])[e]->at(2).mul(oneHalf); @@ -131,19 +131,19 @@ QuadEdgeBasis::QuadEdgeBasis(int order){ // Edge Based (High Order) // for(int c = 0; c < 2; c++){ unsigned int i = 0; - + for(int l = 1; l < orderPlus; l++){ for(int e = 0; e < 4; e++){ - (*(*edge)[c])[i + 4] = - new vector<Polynomial>((intLegendre[l].compose(liftingSub[c][e]) * + (*(*edge)[c])[i + 4] = + new vector<Polynomial>((intLegendre[l].compose(liftingSub[c][e]) * lagrangeSum[e]).gradient()); - + i++; } } } - + // Cell Based (Preliminary) // Polynomial px = Polynomial(2, 1, 0, 0); Polynomial py = Polynomial(2, 0, 1, 0); @@ -164,13 +164,13 @@ QuadEdgeBasis::QuadEdgeBasis(int order){ // Cell Based (Type 1) // for(int l1 = 1; l1 < orderPlus; l1++){ for(int l2 = 1; l2 < orderPlus; l2++){ - (*cell)[i] = + (*cell)[i] = new vector<Polynomial>((iLegendreX[l1] * iLegendreY[l2]).gradient()); i++; } } - + // Cell Based (Type 2) // for(int l1 = 1; l1 < orderPlus; l1++){ for(int l2 = 1; l2 < orderPlus; l2++){ @@ -208,10 +208,10 @@ QuadEdgeBasis::QuadEdgeBasis(int order){ // (x, y) = Zaglmayr Ref Quad // (u, v) = Gmsh Ref Quad - Polynomial mapX(Polynomial(0.5, 1, 0, 0) + + Polynomial mapX(Polynomial(0.5, 1, 0, 0) + Polynomial(0.5, 0, 0, 0)); - Polynomial mapY(Polynomial(0.5, 0, 1, 0) + + Polynomial mapY(Polynomial(0.5, 0, 1, 0) + Polynomial(0.5, 0, 0, 0)); for(int i = 0; i < nEdgeClosure; i++){ @@ -242,7 +242,7 @@ QuadEdgeBasis::~QuadEdgeBasis(void){ // Vertex Based // for(int i = 0; i < nVertex; i++) delete (*node)[i]; - + delete node; @@ -250,10 +250,10 @@ QuadEdgeBasis::~QuadEdgeBasis(void){ for(int c = 0; c < 2; c++){ for(int i = 0; i < nEdge; i++) delete (*(*edge)[c])[i]; - + delete (*edge)[c]; } - + delete edge; diff --git a/FunctionSpace/QuadNodeBasis.cpp b/FunctionSpace/QuadNodeBasis.cpp index 253d8f049edf76d25da638ae0b23972c9f27da6a..2acd7dc20236b90e905a7f410853be03d5249648 100644 --- a/FunctionSpace/QuadNodeBasis.cpp +++ b/FunctionSpace/QuadNodeBasis.cpp @@ -12,8 +12,8 @@ QuadNodeBasis::QuadNodeBasis(int order){ nVertex = 4; nEdge = 4 * (order - 1); - nFace = 0; - nCell = (order - 1) * (order - 1); + nFace = (order - 1) * (order - 1); + nCell = 0; nEdgeClosure = 2; nFaceClosure = 0; @@ -27,13 +27,13 @@ QuadNodeBasis::QuadNodeBasis(int order){ // Legendre Polynomial // Legendre::integrated(legendre, order); - + // Vertices definig Edges & Permutations // - const int edgeV[2][4][2] = + const int edgeV[2][4][2] = { { {0, 1}, {1, 2}, {2, 3}, {3, 0} }, { {1, 0}, {2, 1}, {3, 2}, {0, 3} } - }; + }; // Basis // node = new vector<Polynomial*>(nVertex); @@ -46,48 +46,48 @@ QuadNodeBasis::QuadNodeBasis(int order){ // Lifting // - lifting[0] = + lifting[0] = (Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) + (Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0)); - lifting[1] = + lifting[1] = (Polynomial(1, 1, 0, 0)) + (Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0)); - lifting[2] = + lifting[2] = (Polynomial(1, 1, 0, 0)) + (Polynomial(1, 0, 1, 0)); - lifting[3] = + lifting[3] = (Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) + (Polynomial(1, 0, 1, 0)); // Lifting Sub // for(int e = 0; e < 4; e++){ - liftingSub[0][e] = - lifting[edgeV[0][e][0]] - + liftingSub[0][e] = + lifting[edgeV[0][e][0]] - lifting[edgeV[0][e][1]]; - - liftingSub[1][e] = - lifting[edgeV[1][e][0]] - + + liftingSub[1][e] = + lifting[edgeV[1][e][0]] - lifting[edgeV[1][e][1]]; } - // Vertex Based (Lagrange) // - (*node)[0] = + // Vertex Based (Lagrange) // + (*node)[0] = new Polynomial((Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) * (Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0))); - (*node)[1] = + (*node)[1] = new Polynomial((Polynomial(1, 1, 0, 0)) * (Polynomial(1, 0, 0, 0) - Polynomial(1, 0, 1, 0))); - (*node)[2] = + (*node)[2] = new Polynomial((Polynomial(1, 1, 0, 0)) * (Polynomial(1, 0, 1, 0))); - (*node)[3] = + (*node)[3] = new Polynomial((Polynomial(1, 0, 0, 0) - Polynomial(1, 1, 0, 0)) * (Polynomial(1, 0, 1, 0))); @@ -98,8 +98,8 @@ QuadNodeBasis::QuadNodeBasis(int order){ for(int l = 1; l < order; l++){ for(int e = 0; e < 4; e++){ - (*(*edge)[c])[i] = - new Polynomial(legendre[l].compose(liftingSub[c][e]) * + (*(*edge)[c])[i] = + new Polynomial(legendre[l].compose(liftingSub[c][e]) * (*(*node)[edgeV[c][e][0]] + *(*node)[edgeV[c][e][1]])); i++; @@ -119,7 +119,7 @@ QuadNodeBasis::QuadNodeBasis(int order){ for(int l1 = 1; l1 < order; l1++){ for(int l2 = 1; l2 < order; l2++){ - (*cell)[i] = + (*cell)[i] = new Polynomial(legendre[l1].compose(px) * legendre[l2].compose(py)); i++; @@ -134,10 +134,10 @@ QuadNodeBasis::QuadNodeBasis(int order){ // (x, y) = Zaglmayr Ref Quad // (u, v) = Gmsh Ref Quad - Polynomial mapX(Polynomial(0.5, 1, 0, 0) + + Polynomial mapX(Polynomial(0.5, 1, 0, 0) + Polynomial(0.5, 0, 0, 0)); - Polynomial mapY(Polynomial(0.5, 0, 1, 0) + + Polynomial mapY(Polynomial(0.5, 0, 1, 0) + Polynomial(0.5, 0, 0, 0)); for(int i = 0; i < nVertex; i++) @@ -149,7 +149,7 @@ QuadNodeBasis::QuadNodeBasis(int order){ for(int i = 0; i < nCell; i++) *(*cell)[i] = (*cell)[i]->compose(mapX, mapY); - + // Free Temporary Sapce // delete[] legendre; @@ -159,7 +159,7 @@ QuadNodeBasis::~QuadNodeBasis(void){ // Vertex Based // for(int i = 0; i < nVertex; i++) delete (*node)[i]; - + delete node; @@ -167,10 +167,10 @@ QuadNodeBasis::~QuadNodeBasis(void){ for(int c = 0; c < 2; c++){ for(int i = 0; i < nEdge; i++) delete (*(*edge)[c])[i]; - + delete (*edge)[c]; } - + delete edge; diff --git a/FunctionSpace/TetNedelecBasis.cpp b/FunctionSpace/TetNedelecBasis.cpp index f339dc58d907a440e04eda8a9260557d5e1c7a5b..a2cf5ecc30d16f7e6bc00290e5be922b3bb78bd2 100644 --- a/FunctionSpace/TetNedelecBasis.cpp +++ b/FunctionSpace/TetNedelecBasis.cpp @@ -12,7 +12,7 @@ TetNedelecBasis::TetNedelecBasis(void){ edgeV = refSpace->getAllEdge(); // Set Basis Type // - this->order = 1; + this->order = 0; type = 1; dim = 3; diff --git a/FunctionSpace/TriEdgeBasis.cpp b/FunctionSpace/TriEdgeBasis.cpp index 3ec8a5993a2937790ec0857a4ede7ca328d55971..f9c1fe7704ee626ab1a03fad95f226971e808e83 100644 --- a/FunctionSpace/TriEdgeBasis.cpp +++ b/FunctionSpace/TriEdgeBasis.cpp @@ -20,8 +20,8 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){ nVertex = 0; nEdge = 3 * (order + 1); - nFace = 0; - nCell = ((order - 1) * order + order - 1); + nFace = ((order - 1) * order + order - 1); + nCell = 0; nFunction = nVertex + nEdge + nFace + nCell; // Alloc Some Space // @@ -97,7 +97,7 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){ } } - // Cell Based // + // Face Based // // Preliminaries const Polynomial p = lagrange[2] * 2 - Polynomial(1, 0, 0, 0); diff --git a/FunctionSpace/TriNedelecBasis.cpp b/FunctionSpace/TriNedelecBasis.cpp index 066bd34d8cc4eb6a4aae7ebc0b6a57233ea98bb6..e16146f436b5435acd7e3cefa6ef0254668dc519 100644 --- a/FunctionSpace/TriNedelecBasis.cpp +++ b/FunctionSpace/TriNedelecBasis.cpp @@ -12,7 +12,7 @@ TriNedelecBasis::TriNedelecBasis(void){ edgeV = refSpace->getAllEdge(); // Set Basis Type // - order = 1; + order = 0; type = 1; dim = 2; diff --git a/FunctionSpace/TriNodeBasis.cpp b/FunctionSpace/TriNodeBasis.cpp index 55d769c73dcd922fcfba48cdc8724073615c68bc..dfad8d928d268956994455bd76eebb0081b4050d 100644 --- a/FunctionSpace/TriNodeBasis.cpp +++ b/FunctionSpace/TriNodeBasis.cpp @@ -14,14 +14,14 @@ TriNodeBasis::TriNodeBasis(unsigned int order){ // Set BasisTwo Type // this->order = order; - + type = 0; dim = 2; nVertex = 3; nEdge = 3 * (order - 1); - nFace = 0; - nCell = (order - 1) * (order - 2) / 2; + nFace = (order - 1) * (order - 2) / 2; + nCell = 0; nFunction = nVertex + nEdge + nFace + nCell; // Alloc Some Space // @@ -35,12 +35,12 @@ TriNodeBasis::TriNodeBasis(unsigned int order){ Legendre::intScaled(intLegendre, order); // Lagrange Polynomial // - const Polynomial lagrange[3] = + const Polynomial lagrange[3] = { - Polynomial(Polynomial(1, 0, 0, 0) - - Polynomial(1, 1, 0, 0) - + Polynomial(Polynomial(1, 0, 0, 0) - + Polynomial(1, 1, 0, 0) - Polynomial(1, 0, 1, 0)), - + Polynomial(Polynomial(1, 1, 0, 0)), Polynomial(Polynomial(1, 0, 1, 0)) @@ -58,39 +58,39 @@ TriNodeBasis::TriNodeBasis(unsigned int order){ basis[s][1] = new Polynomial(lagrange[1]); basis[s][2] = new Polynomial(lagrange[2]); } - + // Edge Based // for(unsigned int s = 0; s < nRefSpace; s++){ unsigned int i = nVertex; for(int e = 0; e < 3; e++){ for(unsigned int l = 1; l < order; l++){ - basis[s][i] = + basis[s][i] = new Polynomial(intLegendre[l].compose(lagrange[(*(*edgeV[s])[e])[1]] - lagrange[(*(*edgeV[s])[e])[0]] - , + , lagrange[(*(*edgeV[s])[e])[0]] + lagrange[(*(*edgeV[s])[e])[1]])); i++; } } } - - // Cell Based // + + // Face Based // const Polynomial p = (lagrange[2] * 2) - Polynomial(1, 0, 0, 0); const int orderMinusTwo = order - 2; - + for(unsigned int s = 0; s < nRefSpace; s++){ unsigned int i = nVertex + nEdge; - + for(int l1 = 1; l1 < orderMinus; l1++){ for(int l2 = 0; l2 + l1 - 1 < orderMinusTwo; l2++){ - basis[s][i] = - new Polynomial(intLegendre[l1].compose(lagrange[1] - lagrange[0], - lagrange[1] + lagrange[0]) - * + basis[s][i] = + new Polynomial(intLegendre[l1].compose(lagrange[1] - lagrange[0], + lagrange[1] + lagrange[0]) + * legendre[l2].compose(p) * lagrange[2]); - + i++; } }