12#ifndef MFEM_FE_PYRAMID
13#define MFEM_FE_PYRAMID
41#ifndef MFEM_THREAD_SAFE
43 mutable Vector phi_Q_vtmp1;
44 mutable Vector phi_Q_vtmp2;
47 mutable Vector phi_T_vtmp1;
48 mutable Vector phi_T_vtmp2;
49 mutable Vector phi_T_vtmp3;
50 mutable Vector phi_T_vtmp4;
91 {
return CheckZ(z) ? (1.0 - x - z) * (1.0 - y - z) / (1.0 - z): 0.0; }
93 {
return CheckZ(z) ? x * (1.0 - y - z) / (1.0 - z): 0.0; }
95 {
return CheckZ(z) ? x * y / (1.0 - z): 0.0; }
97 {
return CheckZ(z) ? (1.0 - x - z) * y / (1.0 - z): 0.0; }
99 {
return CheckZ(z) ? z : 1.0; }
173 {
return Vector({0.0, 0.0, -1.0}); }
175 {
return Vector({0.0, 0.0, 1.0}); }
183 {
return 1.0 - xy[ab-1] / (1.0 - z); }
185 {
return xy[ab-1] / (1.0 - z); }
197 {
return 1.0 - xy[ab-1] - z; }
Data type dense matrix using column-major storage.
Rank 3 tensor (array of matrices)
static DenseMatrix grad_mu01(real_t z)
static Vector lam45_grad_lam45(real_t x, real_t y, real_t z)
void phi_Q(int p, Vector s, Vector t, DenseMatrix &u) const
static void CalcHomogenizedIntJacobi(int p, real_t alpha, real_t t0, real_t t1, real_t *u)
static Vector nu12(real_t z, Vector xy, unsigned int ab)
void V_R(int p, Vector s, const DenseMatrix &grad_s, real_t mu, Vector grad_mu, real_t t, Vector grad_t, DenseMatrix &u) const
static Vector lam125_grad_lam125(real_t x, real_t y, real_t z)
static constexpr real_t apex_tol
static Vector lam145_grad_lam145(real_t x, real_t y, real_t z)
static void CalcIntegratedJacobi(int p, real_t alpha, real_t x, real_t t, Vector &u)
static Vector lam45(real_t x, real_t y, real_t z)
static void phi_E(int p, real_t s0, real_t s1, real_t *u)
static Vector nu012(real_t z, Vector xy, unsigned int ab)
static DenseMatrix grad_nu120(real_t z, Vector xy, unsigned int ab)
static real_t lam4(real_t x, real_t y, real_t z)
static DenseMatrix grad_lam25(real_t x, real_t y, real_t z)
void E_E(int p, Vector s, Vector sds, DenseMatrix &u) const
static void CalcIntegratedLegendre(int p, real_t x, real_t t, real_t *u)
Integrated Legendre Polynomials.
static Vector nu01_grad_nu01(real_t z, Vector xy, unsigned int ab)
static Vector lam35(real_t x, real_t y, real_t z)
static Vector grad_lam5(real_t x, real_t y, real_t z)
static real_t lam3(real_t x, real_t y, real_t z)
static Vector lam235(real_t x, real_t y, real_t z)
static real_t div_lam345_grad_lam345(real_t x, real_t y, real_t z)
static Vector lam25(real_t x, real_t y, real_t z)
static Vector nu01(real_t z, Vector xy, unsigned int ab)
void VT_T(int p, Vector s, Vector sds, Vector sdsxds, real_t mu, Vector grad_mu, DenseTensor &u) const
static Vector lam25_grad_lam25(real_t x, real_t y, real_t z)
static Vector lam415_grad_lam415(real_t x, real_t y, real_t z)
static Vector lam235_grad_lam235(real_t x, real_t y, real_t z)
static Vector mu01(real_t z)
static DenseMatrix grad_nu012(real_t z, Vector xy, unsigned int ab)
static void CalcIntegratedJacobi(int p, real_t alpha, real_t x, real_t t, real_t *u)
Integrated Jacobi Polynomials.
static real_t div_lam145_grad_lam145(real_t x, real_t y, real_t z)
void V_L(int p, Vector sx, const DenseMatrix &grad_sx, Vector sy, const DenseMatrix &grad_sy, real_t t, Vector grad_t, DenseTensor &u) const
static Vector lam125(real_t x, real_t y, real_t z)
Three component vectors associated with triangular faces.
static Vector grad_lam4(real_t x, real_t y, real_t z)
static Vector grad_nu2(real_t z, const Vector xy, unsigned int ab)
static Vector grad_mu1(real_t z)
void V_Q(int p, Vector s, Vector ds, Vector t, Vector dt, DenseTensor &u) const
static void CalcScaledLegendre(int p, real_t x, real_t t, real_t *u)
Shifted and Scaled Legendre Polynomials.
void E_T(int p, Vector s, Vector sds, DenseTensor &u) const
static real_t mu0(real_t z)
static Vector mu01(real_t z, Vector xy, unsigned int ab)
static Vector nu120(real_t z, Vector xy, unsigned int ab)
static Vector lam345(real_t x, real_t y, real_t z)
static real_t lam2(real_t x, real_t y, real_t z)
static void CalcHomogenizedScaJacobi(int p, real_t alpha, real_t t0, real_t t1, real_t *u)
static Vector lam15_grad_lam15(real_t x, real_t y, real_t z)
Computes .
static real_t mu0(real_t z, const Vector &xy, unsigned int ab)
static Vector lam35_grad_lam35(real_t x, real_t y, real_t z)
static real_t div_lam415_grad_lam415(real_t x, real_t y, real_t z)
static real_t lam1(real_t x, real_t y, real_t z)
Pyramid "Affine" Coordinates.
void V_T(int p, Vector s, Vector sdsxds, DenseTensor &u) const
static Vector lam435_grad_lam435(real_t x, real_t y, real_t z)
static real_t div_lam235_grad_lam235(real_t x, real_t y, real_t z)
static Vector grad_mu0(real_t z)
static constexpr real_t one
static DenseMatrix grad_lam35(real_t x, real_t y, real_t z)
static real_t lam5(real_t x, real_t y, real_t z)
static real_t mu1(real_t z, const Vector &xy, unsigned int ab)
static Vector lam415(real_t x, real_t y, real_t z)
static real_t nu0(real_t z, Vector xy, unsigned int ab)
static DenseMatrix grad_lam15(real_t x, real_t y, real_t z)
Gradients of the above two component vectors.
static Vector grad_nu1(real_t z, const Vector xy, unsigned int ab)
void E_Q(int p, Vector s, Vector ds, Vector t, DenseTensor &u) const
static Vector grad_lam1(real_t x, real_t y, real_t z)
Gradients of the "Affine" Coordinates.
static Vector lam15(real_t x, real_t y, real_t z)
Two component vectors associated with edges touching the apex.
static Vector mu01_grad_mu01(real_t z, Vector xy, unsigned int ab)
static Vector lam145(real_t x, real_t y, real_t z)
static real_t mu1(real_t z)
static real_t nu2(real_t z, Vector xy, unsigned int ab)
static Vector nu012_grad_nu012(real_t z, Vector xy, unsigned int ab)
static Vector grad_lam2(real_t x, real_t y, real_t z)
static Vector lam345_grad_lam345(real_t x, real_t y, real_t z)
static void CalcHomogenizedIntLegendre(int p, real_t t0, real_t t1, real_t *u)
static real_t div_lam125_grad_lam125(real_t x, real_t y, real_t z)
Divergences of the above "normal" vector functions divided by 3.
static DenseMatrix grad_lam45(real_t x, real_t y, real_t z)
static DenseMatrix grad_nu01(real_t z, Vector xy, unsigned int ab)
static real_t nu1(real_t z, Vector xy, unsigned int ab)
static Vector lam435(real_t x, real_t y, real_t z)
static void CalcIntegratedJacobi(int p, real_t alpha, real_t x, real_t t, Vector &u, Vector &dudx, Vector &dudt)
static bool CheckZ(real_t z)
static void CalcScaledJacobi(int p, real_t alpha, real_t x, real_t t, real_t *u)
Shifted and Scaled Jacobi Polynomials.
static void CalcHomogenizedScaLegendre(int p, real_t s0, real_t s1, real_t *u)
static Vector grad_nu0(real_t z, const Vector xy, unsigned int ab)
void phi_T(int p, Vector nu, DenseMatrix &u) const
static Vector nu12_grad_nu12(real_t z, Vector xy, unsigned int ab)
static real_t div_lam435_grad_lam435(real_t x, real_t y, real_t z)
static Vector grad_lam3(real_t x, real_t y, real_t z)
static constexpr real_t zero
real_t * GetData() const
Return a pointer to the beginning of the Vector data.
real_t u(const Vector &xvec)
real_t p(const Vector &x, real_t t)