From 33ecbe61b55a25c935cc8d79a47565f091805da0 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Fri, 7 Aug 2020 09:14:41 +0200
Subject: [PATCH] Add treatment for given node lists for Dirichlet

This is the case of corners for instance
---
 .../algorithms/HeatDiamondAlgorithm.cpp       | 29 +++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/src/language/algorithms/HeatDiamondAlgorithm.cpp b/src/language/algorithms/HeatDiamondAlgorithm.cpp
index 0a6058e73..04df2737b 100644
--- a/src/language/algorithms/HeatDiamondAlgorithm.cpp
+++ b/src/language/algorithms/HeatDiamondAlgorithm.cpp
@@ -97,6 +97,35 @@ HeatDiamondScheme<Dimension>::HeatDiamondScheme(
           boundary_condition_list.push_back(DirichletBoundaryCondition{node_list, value_list});
         }
       }
+
+      if constexpr (Dimension > 1) {
+        for (size_t i_ref_node_list = 0;
+             i_ref_node_list < mesh->connectivity().template numberOfRefItemList<ItemType::node>(); ++i_ref_node_list) {
+          const auto& ref_node_list = mesh->connectivity().template refItemList<ItemType::node>(i_ref_node_list);
+          const RefId& ref          = ref_node_list.refId();
+          if (ref == dirichlet_bc_descriptor.boundaryDescriptor()) {
+            const FunctionSymbolId g_id = dirichlet_bc_descriptor.rhsSymbolId();
+
+            const auto& node_list = ref_node_list.list();
+
+            Array<const double> value_list =
+              InterpolateItemValue<double(TinyVector<Dimension>)>::template interpolate<ItemType::node>(g_id,
+                                                                                                        mesh->xr(),
+                                                                                                        node_list);
+
+            for (size_t i_node = 0; i_node < node_list.size(); ++i_node) {
+              NodeId node_id = node_list[i_node];
+              if (not is_dirichlet[node_id]) {
+                is_dirichlet[node_id]    = true;
+                dirichlet_value[node_id] = value_list[i_node];
+              }
+            }
+
+            boundary_condition_list.push_back(DirichletBoundaryCondition{node_list, value_list});
+          }
+        }
+      }
+
       break;
     }
     case IBoundaryConditionDescriptor::Type::fourier: {
-- 
GitLab