Hi again,
Just an update that the issue has been located at this chunk of code in step-51 (issue for step-51 when adapted to IPHDG, not step-51 itself):
for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face) for (unsigned int i=0; i<fe_local.dofs_per_cell; ++i) { if (fe_local.has_support_on_face(i,face)) fe_local_support_on_face[face].push_back(i); } for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face) for (unsigned int i=0; i<fe.dofs_per_cell; ++i) { if (fe.has_support_on_face(i,face)) fe_support_on_face[face].push_back(i); }This bit serves to save the program from assembling a number of zeros terms on each cell particularly when we use LHDG with Q-polynomials. However, for IPHDG, this will assemble the consistency term and the symmetry term < u_h - uhat_h, nabla*n v_h > + < v_h - vhat_h, nabla*n u_h > incorrectly since nabla*n u_h does not necessarily vanish on a face when u_h vanishes on that face. Using P-polynomials dodges this bullet since they have support on every face.
Best,
Greg