SparseMatrix * FiniteElementSpace::H2L_GlobalRestrictionMatrix (FiniteElementSpace *lfes) { SparseMatrix *R; DenseMatrix loc_restr; Array<int> l_dofs, h_dofs; R = new SparseMatrix (lfes -> GetNDofs(), ndofs); if (!lfes->GetNE()) { R->Finalize(); return R; } const FiniteElement *h_fe = this -> GetFE (0); const FiniteElement *l_fe = lfes -> GetFE (0); IsoparametricTransformation T; T.SetIdentityTransformation(h_fe->GetGeomType()); h_fe->Project(*l_fe, T, loc_restr); for (int i = 0; i < mesh -> GetNE(); i++) { this -> GetElementDofs (i, h_dofs); lfes -> GetElementDofs (i, l_dofs); R -> SetSubMatrix (l_dofs, h_dofs, loc_restr, 1); } R -> Finalize(); return R; }