diff --git a/src/scheme/ScalarNodalScheme.cpp b/src/scheme/ScalarNodalScheme.cpp index c165eec6e1e111577424505708abb1de395c95bc..9c8e47dacb4f36cc2f002d7155093d9d780bc6dd 100644 --- a/src/scheme/ScalarNodalScheme.cpp +++ b/src/scheme/ScalarNodalScheme.cpp @@ -487,14 +487,23 @@ class ScalarNodalSchemeHandler::ScalarNodalScheme : public ScalarNodalSchemeHand NodeValue<TinyVector<Dimension>> compute_normal_base{mesh->connectivity()}; compute_normal_base.fill(zero); for (NodeId node_id = 0; node_id < mesh->numberOfNodes(); ++node_id) { - const auto& node_to_face = node_to_face_matrix[node_id]; - TinyMatrix<Dimension> A; - for (size_t i_face = 0; i_face < mesh->numberOfFaces(); ++i_face) { - FaceId face_id = node_to_face[i_face]; - A(i_face, 0) = nl[face_id][0] * mes_l[face_id]; - A(i_face, 1) = nl[face_id][1] * mes_l[face_id]; + if (node_is_angle[node_id]) { + const auto& node_to_face = node_to_face_matrix[node_id]; + TinyMatrix<Dimension> A = zero; + for (size_t i_face = 0; i_face < node_to_face.size(); ++i_face) { + const FaceId face_id = node_to_face[i_face]; + if (is_boundary_face[face_id]) { + if (A(0, 0) == 0) { + A(0, 0) = nl[face_id][0] * mes_l[face_id]; + A(0, 1) = nl[face_id][1] * mes_l[face_id]; + } else { + A(1, 0) = nl[face_id][0] * mes_l[face_id]; + A(1, 1) = nl[face_id][1] * mes_l[face_id]; + } + } + } + compute_normal_base[node_id] = inverse(A) * exterior_normal[node_id]; } - compute_normal_base[node_id] = inverse(A) * exterior_normal[node_id]; } return compute_normal_base; }();