54 const VEM_Monomials_Data_Type &vem_monomials_data,
55 const VEM_vem_local_space_data_Type &vem_local_space,
56 const VEM_vem_local_space_dataData_Type &vem_local_space_data)
const
60 const double invDiameter = 1.0 / vem_local_space_data.Diameter;
62 const std::vector<Eigen::MatrixXd> &piNabla = vem_local_space_data.PiNabla;
63 const std::vector<Eigen::MatrixXd> &pi0km2 = vem_local_space_data.Pi0km2;
64 const std::vector<Eigen::MatrixXd> &pi0k = vem_local_space_data.Pi0k;
65 const std::vector<Eigen::MatrixXd> &Dmatrix = vem_local_space_data.Dmatrix;
70 for (
unsigned int d = 0; d < vem_local_space_data.Dimension; d++)
77 const Eigen::MatrixXd identity = Eigen::MatrixXd::Identity(vem_local_space_data.Nk, vem_local_space_data.Nk);
79 result.
ErrorPiNabla.resize(vem_local_space_data.Dimension, 1.0);
80 result.
ErrorPi0km2.resize(vem_local_space_data.Dimension, 1.0);
81 result.
ErrorPi0k.resize(vem_local_space_data.Dimension, 1.0);
82 result.
ErrorPi0km1Grad.resize(vem_local_space_data.Dimension * vem_local_space_data.Dimension, 1.0);
83 for (
unsigned int d1 = 0; d1 < vem_local_space_data.Dimension; d1++)
85 result.
ErrorPiNabla[d1] = (piNabla[d1] * Dmatrix[d1] - identity).norm() / identity.norm();
86 result.
ErrorPi0km2[d1] = (pi0km2[d1] * Dmatrix[d1].leftCols(vem_local_space_data.Nkm2) -
87 identity.topLeftCorner(vem_local_space_data.Nkm2, vem_local_space_data.Nkm2))
89 identity.topLeftCorner(vem_local_space_data.Nkm2, vem_local_space_data.Nkm2).norm();
91 result.
ErrorPi0k[d1] = (pi0k[d1] * Dmatrix[d1] - identity).norm() / identity.norm();
93 for (
unsigned int d2 = 0; d2 < vem_local_space_data.Dimension; d2++)
95 const Eigen::MatrixXd derMatrix =
96 invDiameter * vem_monomials.DerivativeMatrix(vem_monomials_data, d2)
97 .topLeftCorner(vem_local_space_data.Nk, vem_local_space_data.Nkm1);
100 (vem_local_space_data.Pi0km1Der[vem_local_space_data.Dimension * d1 + d2] * vem_local_space_data.Dmatrix[d1] -
101 derMatrix.transpose())
107 const Eigen::MatrixXd StabMatrix =
110 const Eigen::MatrixXd &stabilizationMatrix = StabMatrix;
111 result.
StabNorm = StabMatrix.norm();
113 Eigen::MatrixXd polynomialBasisDofs =
114 Eigen::MatrixXd::Zero(vem_local_space_data.NumBasisFunctions,
115 vem_local_space_data.Dimension * vem_local_space_data.Nk);
116 for (
unsigned int d = 0; d < vem_local_space_data.Dimension; d++)
117 polynomialBasisDofs.middleCols(d * vem_local_space_data.Nk, vem_local_space_data.Nk) =
118 vem_local_space_data.Dmatrix[d];
122 result.
ErrorHCD.resize(vem_local_space_data.Dimension, 1.0);
123 result.
ErrorGBD.resize(vem_local_space_data.Dimension, 1.0);
124 result.
ErrorHED.resize(vem_local_space_data.Dimension * vem_local_space_data.Dimension, 1.0);
126 if (vem_local_space_data.Hmatrix.size() > 0 && vem_local_space_data.Cmatrix.size() > 0)
128 const double HMatrixInvNorm = 1.0 / vem_local_space_data.Hmatrix.norm();
129 for (
unsigned int d1 = 0; d1 < vem_local_space_data.Dimension; d1++)
131 (vem_local_space_data.Hmatrix - vem_local_space_data.Cmatrix[d1] * vem_local_space_data.Dmatrix[d1]).norm() * HMatrixInvNorm;
134 if (vem_local_space_data.Gmatrix.size() > 0 && vem_local_space_data.Bmatrix.size() > 0)
136 const double GMatrixInvNorm = 1.0 / vem_local_space_data.Gmatrix.norm();
137 for (
unsigned int d1 = 0; d1 < vem_local_space_data.Dimension; d1++)
139 (vem_local_space_data.Gmatrix - vem_local_space_data.Bmatrix[d1] * vem_local_space_data.Dmatrix[d1]).norm() * GMatrixInvNorm;
142 if (vem_local_space_data.Hmatrix.size() > 0 && vem_local_space_data.Ematrix.size() > 0)
144 for (
unsigned int d1 = 0; d1 < vem_local_space_data.Dimension; d1++)
146 for (
unsigned int d2 = 0; d2 < vem_local_space_data.Dimension; d2++)
148 const Eigen::MatrixXd derMatrix =
150 vem_monomials.DerivativeMatrix(vem_monomials_data, d2)
151 .topLeftCorner(vem_local_space_data.Nk, vem_local_space_data.Nkm1) *
152 vem_local_space_data.Hmatrix.topLeftCorner(vem_local_space_data.Nkm1, vem_local_space_data.Nkm1);
154 result.
ErrorHED[vem_local_space_data.Dimension * d1 + d2] =
155 (vem_local_space_data.Ematrix[vem_local_space_data.Dimension * d1 + d2] * vem_local_space_data.Dmatrix[d1] -
156 derMatrix.transpose())