diff --git a/src/scheme/ScalarNodalScheme.cpp b/src/scheme/ScalarNodalScheme.cpp
index 6a827b0145f1ee309a8bc806f064487236fb11a3..c165eec6e1e111577424505708abb1de395c95bc 100644
--- a/src/scheme/ScalarNodalScheme.cpp
+++ b/src/scheme/ScalarNodalScheme.cpp
@@ -483,6 +483,22 @@ class ScalarNodalSchemeHandler::ScalarNodalScheme : public ScalarNodalSchemeHand
       }
     }();
 
+    const NodeValue<const TinyVector<Dimension>> normal_base = [&] {
+      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];
+        }
+        compute_normal_base[node_id] = inverse(A) * exterior_normal[node_id];
+      }
+      return compute_normal_base;
+    }();
+
     const NodeValue<const double> node_boundary_values = [&] {
       NodeValue<double> compute_node_boundary_values{mesh->connectivity()};
       NodeValue<double> sum_mes_l{mesh->connectivity()};