47 const VEM_Monomials_Data_Type &vem_monomials_data,
48 const VEM_LocalSpace_Type &vem_local_space,
49 const VEM_LocalSpaceData_Type &vem_local_space_data)
const
53 const double invDiameter = 1.0 / vem_local_space_data.Diameter;
55 const Eigen::MatrixXd &piNabla = vem_local_space_data.PiNabla;
56 const Eigen::MatrixXd &pi0km1 = vem_local_space_data.Pi0km1;
57 const Eigen::MatrixXd &pi0k = vem_local_space_data.Pi0k;
63 const Eigen::MatrixXd identity = Eigen::MatrixXd::Identity(vem_local_space_data.NumProjectorBasisFunctions,
64 vem_local_space_data.NumProjectorBasisFunctions);
66 const unsigned int Nkm1 = pi0km1.rows();
67 const unsigned int Nk = piNabla.rows();
69 result.
ErrorPiNabla = (piNabla * vem_local_space_data.Dmatrix - identity).norm() / identity.norm();
70 result.
ErrorPi0km1 = (pi0km1 * vem_local_space_data.Dmatrix.leftCols(Nkm1) - identity.topLeftCorner(Nkm1, Nkm1)).norm() /
71 identity.topLeftCorner(Nkm1, Nkm1).norm();
73 result.
ErrorPi0k = (pi0k * vem_local_space_data.Dmatrix - identity).norm() / identity.norm();
76 for (
unsigned int d = 0; d < vem_local_space_data.Pi0km1Der.size(); ++d)
78 const Eigen::MatrixXd &piDerkm1 = vem_local_space_data.Pi0km1Der[d];
79 const Eigen::MatrixXd derMatrix =
80 invDiameter * (vem_local_space_data.Qmatrix *
81 vem_monomials.DerivativeMatrix(vem_monomials_data, d).topLeftCorner(Nk, Nkm1) *
82 vem_local_space_data.QmatrixInv.topLeftCorner(Nkm1, Nkm1))
84 double relErrDenominator = (Nkm1 > 1) ? derMatrix.norm() : 1.0;
85 result.
ErrorPi0km1Grad[d] = (piDerkm1 * vem_local_space_data.Dmatrix - derMatrix).norm() / relErrDenominator;
88 const Eigen::MatrixXd StabMatrix =
91 const Eigen::MatrixXd &stabilizationMatrix = StabMatrix;
93 result.
ErrorStabilization = (stabilizationMatrix * vem_local_space_data.Dmatrix).norm();
95 if (vem_local_space_data.Hmatrix.size() > 0 && vem_local_space_data.Cmatrix.size() > 0)
97 (vem_local_space_data.Hmatrix - vem_local_space_data.Cmatrix * vem_local_space_data.Dmatrix).norm() /
98 vem_local_space_data.Hmatrix.norm();
99 if (vem_local_space_data.Gmatrix.size() > 0 && vem_local_space_data.Bmatrix.size() > 0)
101 (vem_local_space_data.Gmatrix - vem_local_space_data.Bmatrix * vem_local_space_data.Dmatrix).norm() /
102 vem_local_space_data.Gmatrix.norm();
104 result.
ErrorHED.resize(vem_local_space_data.Pi0km1Der.size(), -1.0);
105 for (
unsigned int d = 0; d < vem_local_space_data.Pi0km1Der.size(); d++)
107 const Eigen::MatrixXd derMatrix =
109 vem_monomials.DerivativeMatrix(vem_monomials_data, d).topLeftCorner(Nk, vem_local_space_data.Nkm1) *
110 vem_local_space_data.Hmatrix.topLeftCorner(vem_local_space_data.Nkm1, vem_local_space_data.Nkm1);
113 (derMatrix.transpose() - vem_local_space_data.Ematrix[d] * vem_local_space_data.Dmatrix).norm() /