diff --git a/FunctionSpace/TetNodeBasis.cpp b/FunctionSpace/TetNodeBasis.cpp index ed0b7371af6ad70b293f84c03b48358a25ddedd8..de93f406b15348705eb715c27ad4f45a13f28571 100644 --- a/FunctionSpace/TetNodeBasis.cpp +++ b/FunctionSpace/TetNodeBasis.cpp @@ -28,9 +28,9 @@ TetNodeBasis::TetNodeBasis(unsigned int order){ nFunction = nVertex + nEdge + nFace + nCell; // Alloc Temporary Space // - const unsigned int orderMinus = order - 1; - const unsigned int orderMinusTwo = order - 2; - const unsigned int orderMinusThree = order - 3; + const int orderMinus = order - 1; + const int orderMinusTwo = order - 2; + const int orderMinusThree = order - 3; Polynomial* legendre = new Polynomial[order]; Polynomial* sclLegendre = new Polynomial[order]; @@ -72,11 +72,11 @@ TetNodeBasis::TetNodeBasis(unsigned int order){ } // Edge Based // - for(unsigned int s = 0; s < 2; s++){ + for(unsigned int s = 0; s < nRefSpace; s++){ unsigned int i = nVertex; for(unsigned int l = 1; l < order; l++){ - for(unsigned int e = 0; e < 6; e++){ + for(int e = 0; e < 6; e++){ (*(*basis)[s])[i] = new Polynomial(intLegendre[l].compose (lagrange[(*(*edgeV[s])[e])[0]] - @@ -84,19 +84,18 @@ TetNodeBasis::TetNodeBasis(unsigned int order){ , lagrange[(*(*edgeV[s])[e])[0]] + lagrange[(*(*edgeV[s])[e])[1]])); - i++; } } } // Face Based // - for(unsigned int s = 0; s < 6; s++){ + for(unsigned int s = 0; s < nRefSpace; s++){ unsigned int i = nVertex + nEdge; - for(unsigned int l1 = 1; l1 < orderMinus; l1++){ - for(unsigned int l2 = 0; l1 + l2 - 1 < orderMinusTwo; l2++){ - for(unsigned int f = 0; f < 4; f++){ + for(int l1 = 1; l1 < orderMinus; l1++){ + for(int l2 = 0; l1 + l2 - 1 < orderMinusTwo; l2++){ + for(int f = 0; f < 4; f++){ Polynomial sum = lagrange[(*(*faceV[s])[f])[0]] + lagrange[(*(*faceV[s])[f])[1]] + @@ -116,7 +115,6 @@ TetNodeBasis::TetNodeBasis(unsigned int order){ * sclLegendre[l2].compose (lagrange[(*(*faceV[s])[f])[2]] * 2 - sum, sum)); - i++; } } @@ -134,10 +132,9 @@ TetNodeBasis::TetNodeBasis(unsigned int order){ for(unsigned int s = 0; s < nRefSpace; s++){ unsigned int i = nVertex + nEdge + nFace; - for(unsigned int l1 = 1; l1 < orderMinusTwo; l1++){ - for(unsigned int l2 = 0; l2 + l1 - 1 < orderMinusThree; l2++){ - for(unsigned int l3 = 0; l3 + l2 + l1 - 1 < orderMinusThree; l3++){ - + for(int l1 = 1; l1 < orderMinusTwo; l1++){ + for(int l2 = 0; l2 + l1 - 1 < orderMinusThree; l2++){ + for(int l3 = 0; l3 + l2 + l1 - 1 < orderMinusThree; l3++){ (*(*basis)[s])[i] = new Polynomial(intLegendre[l1].compose(sub, add) * lagrange[2] * @@ -145,7 +142,6 @@ TetNodeBasis::TetNodeBasis(unsigned int order){ oneMinusFour) * lagrange[3] * legendre[l3].compose(twoFourMinusOne)); - i++; } } diff --git a/FunctionSpace/TetReferenceSpace.cpp b/FunctionSpace/TetReferenceSpace.cpp index 14835bb5b0fc07863025b605d2d774b3381a6f7b..dc8d039c3a1a87b8f9e59f1dc9e2d27260348a5d 100644 --- a/FunctionSpace/TetReferenceSpace.cpp +++ b/FunctionSpace/TetReferenceSpace.cpp @@ -1,5 +1,6 @@ #include <sstream> #include "TetReferenceSpace.h" +#include "MTetrahedron.h" using namespace std; @@ -11,28 +12,23 @@ TetReferenceSpace::TetReferenceSpace(void){ nEdge = 6; refEdge = new unsigned int*[nEdge]; - for(unsigned int i = 0; i < nEdge; i++) - refEdge[i] = new unsigned int[2]; - - refEdge[0][0] = 0; refEdge[0][1] = 1; - refEdge[1][0] = 1; refEdge[1][1] = 2; - refEdge[2][0] = 2; refEdge[2][1] = 0; - refEdge[3][0] = 0; refEdge[3][1] = 3; - refEdge[4][0] = 1; refEdge[4][1] = 3; - refEdge[5][0] = 2; refEdge[5][1] = 3; - + for(unsigned int i = 0; i < nEdge; i++){ + refEdge[i] = new unsigned int[2]; + refEdge[i][0] = MTetrahedron::edges_tetra(i, 0); + refEdge[i][1] = MTetrahedron::edges_tetra(i, 1); + } + // Face Definition // nFace = 4; refFace = new unsigned int*[nFace]; - for(unsigned int i = 0; i < nFace; i++) - refFace[i] = new unsigned int[3]; + for(unsigned int i = 0; i < nFace; i++){ + refFace[i] = new unsigned int[3]; + refFace[i][0] = MTetrahedron::faces_tetra(i, 0); + refFace[i][1] = MTetrahedron::faces_tetra(i, 1); + refFace[i][2] = MTetrahedron::faces_tetra(i, 2); + } - refFace[0][0] = 0; refFace[0][1] = 1; refFace[0][2] = 2; - refFace[1][0] = 0; refFace[1][1] = 1; refFace[1][2] = 3; - refFace[2][0] = 1; refFace[2][1] = 2; refFace[2][2] = 3; - refFace[3][0] = 2; refFace[3][1] = 0; refFace[3][2] = 3; - // Init All // init(); } diff --git a/FunctionSpace/TriEdgeBasis.cpp b/FunctionSpace/TriEdgeBasis.cpp index 7d22185907cbb9e85ba1438050a54dfc6bb5e24d..b0a705c52c61ca35d3c09368b0f8746c66ab2402 100644 --- a/FunctionSpace/TriEdgeBasis.cpp +++ b/FunctionSpace/TriEdgeBasis.cpp @@ -25,8 +25,8 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){ nFunction = nVertex + nEdge + nFace + nCell; // Alloc Some Space // - const unsigned int orderPlus = order + 1; - const unsigned int orderMinus = order - 1; + const int orderPlus = order + 1; + const int orderMinus = order - 1; Polynomial* legendre = new Polynomial[orderPlus]; Polynomial* intLegendre = new Polynomial[orderPlus]; @@ -57,7 +57,7 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){ // Edge Based (Nedelec) // for(unsigned int s = 0; s < nRefSpace; s++){ - for(unsigned int e = 0; e < 3; e++){ + for(int e = 0; e < 3; e++){ vector<Polynomial> tmp1 = lagrange[(*(*edgeV[s])[e])[1]].gradient(); vector<Polynomial> tmp2 = lagrange[(*(*edgeV[s])[e])[0]].gradient(); @@ -82,8 +82,8 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){ for(unsigned int s = 0; s < nRefSpace; s++){ unsigned int i = 3; - for(unsigned int l = 1; l < orderPlus; l++){ - for(unsigned int e = 0; e < 3; e++){ + for(int l = 1; l < orderPlus; l++){ + for(int e = 0; e < 3; e++){ (*(*basis)[s])[i] = new vector<Polynomial> ((intLegendre[l].compose(lagrange[(*(*edgeV[s])[e])[0]] - @@ -101,7 +101,7 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){ // Preliminaries const Polynomial p = lagrange[2] * 2 - Polynomial(1, 0, 0, 0); - for(unsigned int l = 0; l < orderPlus; l++){ + for(int l = 0; l < orderPlus; l++){ u[l] = intLegendre[l].compose(lagrange[1] - lagrange[0], lagrange[0] + lagrange[1]); v[l] = legendre[l].compose(p); @@ -131,7 +131,7 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){ // Type 1 for(unsigned int l1 = 1; l1 < order; l1++){ - for(unsigned int l2 = 0; l2 + l1 - 1 < orderMinus; l2++){ + for(int l2 = 0; l2 + (int)l1 - 1 < orderMinus; l2++){ vector<Polynomial> tmp1 = v[l2].gradient(); vector<Polynomial> tmp2 = u[l1].gradient(); @@ -155,7 +155,7 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){ // Type 2 for(unsigned int l1 = 1; l1 < order; l1++){ - for(unsigned int l2 = 0; l2 + l1 - 1 < orderMinus; l2++){ + for(int l2 = 0; l2 + (int)l1 - 1 < orderMinus; l2++){ vector<Polynomial> tmp1 = v[l2].gradient(); vector<Polynomial> tmp2 = u[l1].gradient(); @@ -178,7 +178,7 @@ TriEdgeBasis::TriEdgeBasis(unsigned int order){ } // Type 3 - for(unsigned int l = 0; l < orderMinus; l++){ + for(int l = 0; l < orderMinus; l++){ vector<Polynomial> subGradL1L2V(subGradL1L2); subGradL1L2V[0].mul(v[l]); diff --git a/FunctionSpace/TriNodeBasis.cpp b/FunctionSpace/TriNodeBasis.cpp index 0fab56d2c0cc526d6b5257c05700810af664e954..ae3d6d8e5ea9e427fae7b5b30038fa644b32fb10 100644 --- a/FunctionSpace/TriNodeBasis.cpp +++ b/FunctionSpace/TriNodeBasis.cpp @@ -25,7 +25,7 @@ TriNodeBasis::TriNodeBasis(unsigned int order){ nFunction = nVertex + nEdge + nFace + nCell; // Alloc Some Space // - const unsigned int orderMinus = order - 1; + const int orderMinus = order - 1; Polynomial* legendre = new Polynomial[order]; Polynomial* intLegendre = new Polynomial[order]; @@ -64,7 +64,7 @@ TriNodeBasis::TriNodeBasis(unsigned int order){ unsigned int i = nVertex; for(unsigned int l = 1; l < order; l++){ - for(unsigned int e = 0; e < 3; e++){ + for(int e = 0; e < 3; e++){ (*(*basis)[s])[i] = new Polynomial(intLegendre[l].compose(lagrange[(*(*edgeV[s])[e])[1]] - lagrange[(*(*edgeV[s])[e])[0]] @@ -78,16 +78,17 @@ TriNodeBasis::TriNodeBasis(unsigned int order){ // Cell Based // const Polynomial p = (lagrange[2] * 2) - Polynomial(1, 0, 0, 0); - const unsigned int orderMinusTwo = order - 2; + const int orderMinusTwo = order - 2; for(unsigned int s = 0; s < nRefSpace; s++){ unsigned int i = nVertex + nEdge; - for(unsigned int l1 = 1; l1 < orderMinus; l1++){ - for(unsigned int l2 = 0; l2 + l1 - 1 < orderMinusTwo; l2++){ + 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]) * + lagrange[1] + lagrange[0]) + * legendre[l2].compose(p) * lagrange[2]); i++; diff --git a/FunctionSpace/TriReferenceSpace.cpp b/FunctionSpace/TriReferenceSpace.cpp index a339a07c6ab6b8028bca4c0b22812ea96c45ceaa..f3b40cd9b598ae136da7d4653f189d75e2f7ab26 100644 --- a/FunctionSpace/TriReferenceSpace.cpp +++ b/FunctionSpace/TriReferenceSpace.cpp @@ -1,5 +1,6 @@ #include <sstream> #include "TriReferenceSpace.h" +#include "MTriangle.h" using namespace std; @@ -11,12 +12,11 @@ TriReferenceSpace::TriReferenceSpace(void){ nEdge = 3; refEdge = new unsigned int*[nEdge]; - for(unsigned int i = 0; i < nEdge; i++) - refEdge[i] = new unsigned int[2]; - - refEdge[0][0] = 0; refEdge[0][1] = 1; - refEdge[1][0] = 1; refEdge[1][1] = 2; - refEdge[2][0] = 2; refEdge[2][1] = 0; + for(unsigned int i = 0; i < nEdge; i++){ + refEdge[i] = new unsigned int[2]; + refEdge[i][0] = MTriangle::edges_tri(i, 0); + refEdge[i][1] = MTriangle::edges_tri(i, 1); + } // Face Definition // nFace = 0;