@@ -51,20 +51,25 @@ mfem::Array<int> GetFaceDofsFromAdjacentElement(const mfem::FiniteElementSpace &
51
51
// Get coordinates of element dofs.
52
52
mfem::DenseMatrix elem_pm;
53
53
const mfem::FiniteElement *fe_elem = fespace.GetFE (elem_id);
54
- mfem::ElementTransformation *T = fespace.GetMesh ()->GetElementTransformation (elem_id);
55
- T->Transform (fe_elem->GetNodes (), elem_pm);
54
+ mfem::IsoparametricTransformation T;
55
+ fespace.GetMesh ()->GetElementTransformation (elem_id, &T);
56
+ T.Transform (fe_elem->GetNodes (), elem_pm);
56
57
57
58
// Find the dofs.
58
59
double tol = 1E-5 ;
59
60
mfem::Array<int > elem_dofs, dofs (P);
61
+ dofs = -123456789 ;
60
62
fespace.GetElementDofs (elem_id, elem_dofs, dof_trans);
63
+
61
64
for (int l = 0 ; l < P; l++)
62
65
{
63
66
double norm2_f = 0.0 ;
64
67
for (int m = 0 ; m < face_pm.Height (); m++)
65
68
{
66
69
norm2_f += face_pm (m, l) * face_pm (m, l);
67
70
}
71
+
72
+ bool found_match = false ;
68
73
for (int m = 0 ; m < elem_pm.Width (); m++)
69
74
{
70
75
double norm2_e = 0.0 ;
@@ -81,9 +86,28 @@ mfem::Array<int> GetFaceDofsFromAdjacentElement(const mfem::FiniteElementSpace &
81
86
if (diff <= relative_tol)
82
87
{
83
88
dofs[l] = elem_dofs[m];
89
+ found_match = true ;
90
+ break ;
84
91
}
85
92
}
93
+
94
+ MFEM_ASSERT (found_match,
95
+ [&]()
96
+ {
97
+ std::stringstream msg;
98
+ msg << " l " << l << ' \n ' ;
99
+ msg << " elem_dofs\n " ;
100
+ for (auto x : elem_dofs)
101
+ msg << x << ' ' ;
102
+
103
+ msg << " \n dofs\n " ;
104
+ for (auto x : dofs)
105
+ msg << x << ' ' ;
106
+ msg << ' \n ' ;
107
+ return msg.str ();
108
+ }());
86
109
}
110
+
87
111
return dofs;
88
112
};
89
113
0 commit comments