| 126 | } |
| 127 | |
| 128 | double TetraDubinerP(const std::array<unsigned, 3>& i, const std::array<double, 3>& xi) { |
| 129 | const double rNum = 2.0 * xi[0] - 1.0 + xi[1] + xi[2]; |
| 130 | const double sNum = 2.0 * xi[1] - 1.0 + xi[2]; |
| 131 | const double t = 2.0 * xi[2] - 1.0; |
| 132 | const double sigmatheta = 1.0 - xi[1] - xi[2]; |
| 133 | const double theta = 1.0 - xi[2]; |
| 134 | |
| 135 | const double ti = SingularityFreeJacobiP(i[0], 0, 0, rNum, sigmatheta); |
| 136 | const double tij = SingularityFreeJacobiP(i[1], 2 * i[0] + 1, 0, sNum, theta); |
| 137 | const double tijk = SingularityFreeJacobiP(i[2], 2 * i[0] + 2 * i[1] + 2, 0, t, 1.0); |
| 138 | |
| 139 | return ti * tij * tijk; |
| 140 | } |
| 141 | |
| 142 | std::array<double, 3> gradTetraDubinerP(const std::array<unsigned, 3>& i, |
| 143 | const std::array<double, 3>& xi) { |
no test coverage detected