From d0bfd0a3951b341dd8eb782b91e0e823b0746cef Mon Sep 17 00:00:00 2001
From: Drouard <axelle.drouard@orange.fr>
Date: Fri, 20 May 2022 14:58:04 +0200
Subject: [PATCH] Correction Dirichlet node boundary values

---
 src/scheme/ScalarNodalScheme.cpp | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/scheme/ScalarNodalScheme.cpp b/src/scheme/ScalarNodalScheme.cpp
index 9c442d032..fa374bdfc 100644
--- a/src/scheme/ScalarNodalScheme.cpp
+++ b/src/scheme/ScalarNodalScheme.cpp
@@ -370,14 +370,14 @@ class ScalarNodalSchemeHandler::ScalarNodalScheme : public ScalarNodalSchemeHand
 
                 for (size_t i_node = 0; i_node < face_nodes.size(); ++i_node) {
                   const NodeId node_id = face_nodes[i_node];
-                  if (node_is_dirichlet[node_id] == false) {
+                  if (not node_is_dirichlet[node_id]) {
                     compute_node_boundary_values[node_id] += value_list[i_face] * mes_l[face_id];
                     sum_mes_l[node_id] += mes_l[face_id];
                   }
                 }
               }
               for (NodeId node_id = 0; node_id < mesh->numberOfNodes(); ++node_id) {
-                if (not node_is_dirichlet[node_id]) {
+                if ((not node_is_dirichlet[node_id]) && (node_is_neumann[node_id])) {
                   compute_node_boundary_values[node_id] /= sum_mes_l[node_id];
                 }
               }
@@ -391,13 +391,19 @@ class ScalarNodalSchemeHandler::ScalarNodalScheme : public ScalarNodalSchemeHand
 
                 for (size_t i_node = 0; i_node < face_nodes.size(); ++i_node) {
                   const NodeId node_id = face_nodes[i_node];
-                  if (node_is_neumann[node_id] == false) {
-                    compute_node_boundary_values[node_id] += 0.5 * value_list[i_face] * mes_l[face_id];
+                  if (not node_is_neumann[node_id]) {
+                    compute_node_boundary_values[node_id] += value_list[i_face] * mes_l[face_id];
+                    sum_mes_l[node_id] += mes_l[face_id];
                   } else {
-                    compute_node_boundary_values[node_id] = value_list[i_face] * mes_l[face_id];
+                    compute_node_boundary_values[node_id] = value_list[i_face];
                   }
                 }
               }
+              for (NodeId node_id = 0; node_id < mesh->numberOfNodes(); ++node_id) {
+                if ((not node_is_neumann[node_id]) && (node_is_dirichlet[node_id])) {
+                  compute_node_boundary_values[node_id] /= sum_mes_l[node_id];
+                }
+              }
             }
           },
           boundary_condition);
-- 
GitLab