27 {-F1, -F1, -F1}, {F0, -F1, -F1}, {-F1 / SQRT5, F1 / SQRT5, -F1}, {-SQRT3 / SQRT7, F0, SQRT3 / SQRT7}};
36inline constexpr MInt edgeNghbrs3d[12][3] = {{0, 2, 6}, {0, 4, 10}, {0, 5, 11}, {0, 3, 7}, {2, 4, 14}, {2, 5, 15},
37 {3, 4, 16}, {3, 5, 17}, {1, 2, 8}, {1, 4, 12}, {1, 5, 13}, {1, 3, 9}};
55inline constexpr MFloat edgePos3d[12][3] = {{-F1, -F1, F0}, {-F1, F0, -F1}, {-F1, F0, F1}, {-F1, F1, F0},
56 {F0, -F1, -F1}, {F0, -F1, F1}, {F0, F1, -F1}, {F0, F1, F1},
57 {F1, -F1, F0}, {F1, F0, -F1}, {F1, F0, F1}, {F1, F1, F0}};
67inline constexpr MInt oppositeEdge3d[12][3] = {{8, 3, 11}, {9, 2, 10}, {10, 1, 9}, {11, 0, 8}, {6, 5, 7}, {7, 4, 6},
68 {4, 7, 5}, {5, 6, 4}, {0, 11, 3}, {1, 10, 2}, {2, 9, 1}, {3, 8, 0}};
80inline constexpr MInt vertexNghbrs<2>[4][3] = {{0, 2, 6}, {0, 3, 7}, {1, 2, 5}, {1, 3, 4}};
86 {0, 2, 4, 6, 10, 14, 18}, {0, 2, 5, 6, 11, 15, 19}, {0, 3, 4, 7, 10, 16, 20}, {0, 3, 5, 7, 11, 17, 21},
87 {1, 2, 4, 8, 12, 14, 22}, {1, 2, 5, 8, 13, 15, 23}, {1, 3, 4, 9, 12, 16, 24}, {1, 3, 5, 9, 13, 17, 25}};
107inline constexpr MFloat vertexPos<3>[8][3] = {{-F1, -F1, -F1}, {-F1, -F1, F1}, {-F1, F1, -F1}, {-F1, F1, F1},
108 {F1, -F1, -F1}, {F1, -F1, F1}, {F1, F1, -F1}, {F1, F1, F1}};
124 {F0, F0, F1}, {F0, F1, F0}, {F1, F0, F0}};
134inline constexpr MInt oppositeVertex<3>[8][7] = {{4, 2, 1, 6, 5, 3, 7}, {5, 3, 0, 7, 4, 2, 6}, {6, 0, 3, 4, 7, 1, 5},
135 {7, 1, 2, 5, 6, 0, 4}, {0, 6, 5, 2, 1, 7, 3}, {1, 7, 4, 3, 0, 6, 2},
136 {2, 4, 7, 0, 3, 5, 1}, {3, 5, 6, 1, 2, 4, 0}};
146inline constexpr MInt oppositeVertex<2>[4][3] = {{2, 1, 3}, {3, 0, 2}, {0, 3, 1}, {1, 2, 0}};
190 MInt remainNoNodes = node;
191 for(
MInt d = D - 1; d >= 0; d--) {
192 nodePos[d] = remainNoNodes % nodesPerDir;
193 remainNoNodes = remainNoNodes / nodesPerDir;
199 const MFloat base = F2 / (p + F1);
202 MFloat nodePos = -F1 + exp * base;
constexpr MLong IPOW2(MInt x)
constexpr MInt oppositeEdge3d[12][3]
constexpr MFloat lobattoPoints[4][3]
constexpr MInt vertexNghbrs< 2 >[4][3]
constexpr MInt surfaceNghbrs< 3 >[6]
constexpr MInt surfaceNghbrs[D *2]
constexpr MFloat edgePos3d[12][3]
constexpr MInt oppositeSurface< 2 >[4]
constexpr MFloat vertexPos[IPOW2(D)][D]
constexpr MInt oppositeSurface[2 *D]
constexpr MInt oppositeVertex< 2 >[4][3]
constexpr MInt vertexNghbrs< 3 >[8][7]
constexpr MInt vertexNghbrs[IPOW2(D)][IPOW2(D) - 1]
constexpr MFloat surfacePos[D *2][D]
constexpr MInt surfaceNghbrs< 2 >[4]
constexpr MInt oppositeVertex[IPOW2(D)][IPOW2(D) - 1]
constexpr MFloat surfacePos< 3 >[6][3]
constexpr MInt edgeNghbrs3d[12][3]
constexpr MInt oppositeVertex< 3 >[8][7]
constexpr MFloat surfacePos< 2 >[4][2]
constexpr MInt oppositeSurface< 3 >[6]
constexpr MFloat vertexPos< 2 >[4][2]
constexpr MFloat vertexPos< 3 >[8][3]
void calculateLegendrePolyAndDeriv(MInt Nmax, MFloat x, MFloat *polynomial, MFloat *derivative)
Evaluates the Legendre polynomial and its derivative of degree Nmax at point x.
void calculateLegendreGaussNodesAndWeights(MInt Nmax, MFloat *nodes, MFloat *wInt)
Calculate the Gauss integration nodes and weight for the Legendre polynomials on the interval [-1,...
LB lattice descriptor for arrays depending on D.
static constexpr MInt edgeIdOfOppCell(MInt i, MInt j)
static constexpr void gaussPoint(const MInt order, MFloat *nodes, MFloat *weights)
static constexpr MFloat vertexPosition(MInt i, MInt j)
static constexpr MFloat nodePosEquidist(const MInt order, const MInt node)
static constexpr MInt nghbrCellOfSurface(MInt i)
static constexpr void nodePosition(const MInt node, const MInt nodesPerDir, MInt *nodePos)
static constexpr MInt vertexIdOfOppCell(MInt i, MInt j)
static constexpr MFloat edgePosition(MInt i, MInt j)
static constexpr MFloat nodePosLobattoPoints(MInt i, MInt j)
static constexpr MFloat legendreFunction(const MInt order, const MFloat pos)
static constexpr MFloat legendreDerivFunction(const MInt order, const MFloat pos)
static constexpr MInt surfaceIdOfOppCell(MInt i)
static constexpr MInt nghbrCellOfEdge(MInt i, MInt j)
static constexpr MFloat surfacePosition(MInt i, MInt j)
static constexpr MInt nghbrCellOfVertex(MInt i, MInt j)