diff --git a/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.cpp b/ProcessLib/BoundaryCondition/DirichletBoundaryConditionAuxiliaryFunctions.cpp index 9b8ea42968dd363cf018c8974911efc434715e77..6a6c69ee43f1fea10e6f3df4d36f38d39fbe1107 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 683f0ece125784de5a1399d13355a020ae0cba2b..b10ad967323fd6508d8c69e228e1cc1829d27d0b 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 bd41dd5fd3c22ad34f77bfb04e263f7b10d35b13..d7b6c7af557d68cc2384c7be9aa42569b3be0a8a 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) {