From 60a897ac46f82f9a42d3ebcfb4b7b698840b7d6f Mon Sep 17 00:00:00 2001
From: "Dmitry Yu. Naumov" <github@naumov.de>
Date: Fri, 22 Jun 2018 17:49:00 +0200
Subject: [PATCH] [NL] DOF; Fix variable offsets for derived table.

The variable component offsets are absolute and the derived
DOF table must have all the bulk DOF table global component
offset for each variable.
---
 NumLib/DOF/LocalToGlobalIndexMap.cpp | 10 +++++-----
 NumLib/DOF/LocalToGlobalIndexMap.h   |  1 +
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/NumLib/DOF/LocalToGlobalIndexMap.cpp b/NumLib/DOF/LocalToGlobalIndexMap.cpp
index 3be86d46859..40034c2eb29 100644
--- a/NumLib/DOF/LocalToGlobalIndexMap.cpp
+++ b/NumLib/DOF/LocalToGlobalIndexMap.cpp
@@ -189,12 +189,12 @@ LocalToGlobalIndexMap::LocalToGlobalIndexMap(
 LocalToGlobalIndexMap::LocalToGlobalIndexMap(
     std::vector<MeshLib::MeshSubset>&& mesh_subsets,
     std::vector<int> const& global_component_ids,
+    std::vector<int> const& variable_component_offsets,
     std::vector<MeshLib::Element*> const& elements,
     NumLib::MeshComponentMap&& mesh_component_map)
     : _mesh_subsets(std::move(mesh_subsets)),
       _mesh_component_map(std::move(mesh_component_map)),
-      _variable_component_offsets(
-          to_cumulative(std::vector<int>(1, 1)))  // Single variable only.
+      _variable_component_offsets(variable_component_offsets)
 {
     // Each subset in the mesh_subsets represents a single component.
     if (_mesh_subsets.size() != global_component_ids.size())
@@ -247,9 +247,9 @@ LocalToGlobalIndexMap* LocalToGlobalIndexMap::deriveBoundaryConstrainedMap(
         all_mesh_subsets.emplace_back(new_mesh_subset);
     all_mesh_subsets.emplace_back(std::move(new_mesh_subset));
 
-    return new LocalToGlobalIndexMap(std::move(all_mesh_subsets),
-                                     global_component_ids, elements,
-                                     std::move(mesh_component_map));
+    return new LocalToGlobalIndexMap(
+        std::move(all_mesh_subsets), global_component_ids,
+        _variable_component_offsets, elements, std::move(mesh_component_map));
 }
 
 std::size_t LocalToGlobalIndexMap::dofSizeWithGhosts() const
diff --git a/NumLib/DOF/LocalToGlobalIndexMap.h b/NumLib/DOF/LocalToGlobalIndexMap.h
index 7fe89ade313..41c1c02456a 100644
--- a/NumLib/DOF/LocalToGlobalIndexMap.h
+++ b/NumLib/DOF/LocalToGlobalIndexMap.h
@@ -153,6 +153,7 @@ private:
     explicit LocalToGlobalIndexMap(
         std::vector<MeshLib::MeshSubset>&& mesh_subsets,
         std::vector<int> const& global_component_ids,
+        std::vector<int> const& variable_component_offsets,
         std::vector<MeshLib::Element*> const& elements,
         NumLib::MeshComponentMap&& mesh_component_map);
 
-- 
GitLab