18 const Eigen::MatrixXd &eval_points) {
19 const size_t num_points = eval_points.cols();
20 const size_t dim_local = geom.
DimLocal();
21 const size_t dim_global = geom.
DimGlobal();
23 Eigen::MatrixXd jacobians = geom.
Jacobian(eval_points);
26 EXPECT_EQ(jacInvGrams.rows(), dim_global)
27 <<
"JacobianInverseGramian has " << jacInvGrams.rows()
28 <<
" rows instead of " << dim_global;
29 EXPECT_EQ(jacInvGrams.cols(), num_points * dim_local)
30 <<
"JacobianInverseGramian has " << jacInvGrams.cols()
31 <<
" cols instead of " << num_points * dim_local;
33 for (
int j = 0; j < num_points; ++j) {
34 Eigen::MatrixXd jacInvGram =
35 jacInvGrams.block(0, j * dim_local, dim_global, dim_local);
36 Eigen::MatrixXd jacobian =
37 jacobians.block(0, j * dim_local, dim_global, dim_local);
39 EXPECT_TRUE(jacInvGram.isApprox(
40 jacobian * (jacobian.transpose() * jacobian).inverse()))
41 <<
"JacobianInverseGramian incorrect at point " << eval_points.col(j);