From d4bf623403987325b85616edb0e759c8a4591f58 Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Wed, 15 Jul 2020 11:32:43 +0200
Subject: [PATCH] [PL/BC] Set coordinates in spatial positions.

---
 .../DirichletBoundaryConditionAuxiliaryFunctions.cpp  |  1 +
 ...ryVariableConstraintDirichletBoundaryCondition.cpp |  1 +
 .../RobinBoundaryConditionLocalAssembler.h            | 11 +++++++----
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.cpp b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.cpp
index 9b8ea42968d..6a6c69ee43f 100644
--- a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.cpp
+++ b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.cpp
@@ -94,6 +94,7 @@ void getEssentialBCValuesLocal(
         if (global_index >= 0)
         {
             pos.setNodeID(id);
+            pos.setCoordinates(*node);
             bc_values.ids.emplace_back(global_index);
             bc_values.values.emplace_back(parameter(t, pos).front());
         }
diff --git a/ProcessLib/BoundaryCondition/PrimaryVariableConstraintDirichletBoundaryCondition.cpp b/ProcessLib/BoundaryCondition/PrimaryVariableConstraintDirichletBoundaryCondition.cpp
index 683f0ece125..b10ad967323 100644
--- a/ProcessLib/BoundaryCondition/PrimaryVariableConstraintDirichletBoundaryCondition.cpp
+++ b/ProcessLib/BoundaryCondition/PrimaryVariableConstraintDirichletBoundaryCondition.cpp
@@ -87,6 +87,7 @@ void PrimaryVariableConstraintDirichletBoundaryCondition::getEssentialBCValues(
             // fetch the value of the primary variable
             auto const local_x = x.get(std::vector{global_index});
             pos.setNodeID(id);
+            pos.setCoordinates(*node);
             if (_less && local_x[0] < _threshold_parameter(t, pos).front())
             {
                 bc_values.ids.emplace_back(global_index);
diff --git a/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h b/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h
index bd41dd5fd3c..d7b6c7af557 100644
--- a/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h
+++ b/ProcessLib/BoundaryCondition/RobinBoundaryConditionLocalAssembler.h
@@ -31,6 +31,7 @@ class RobinBoundaryConditionLocalAssembler final
 {
     using Base = GenericNaturalBoundaryConditionLocalAssembler<
         ShapeFunction, IntegrationMethod, GlobalDim>;
+    using ShapeMatricesType = ShapeMatrixPolicyType<ShapeFunction, GlobalDim>;
 
 public:
     RobinBoundaryConditionLocalAssembler(MeshLib::Element const& e,
@@ -65,16 +66,18 @@ public:
             _data.u_0.getNodalValuesOnElement(Base::_element, t)
                 .template topRows<ShapeFunction::MeshElement::n_all_nodes>();
 
-        ParameterLib::SpatialPosition position;
-        position.setElementID(Base::_element.getID());
-
         for (unsigned ip = 0; ip < n_integration_points; ++ip)
         {
-            position.setIntegrationPoint(ip);
             auto const& ip_data = Base::_ns_and_weights[ip];
             auto const& N = ip_data.N;
             auto const& w = ip_data.weight;
 
+            ParameterLib::SpatialPosition const position{
+                boost::none, Base::_element.getID(), ip,
+                MathLib::Point3d(
+                    interpolateCoordinates<ShapeFunction, ShapeMatricesType>(
+                        Base::_element, N))};
+
             double integral_measure = 1.0;
             if (_data.integral_measure)
             {
-- 
GitLab