From 7b9e5a09f8a9a9c81561f2c118fcac2a2d06bcad Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Mon, 13 Mar 2017 13:58:49 +0100
Subject: [PATCH] [A/U/MP] Refactor splitOfHigherOrderNode.

---
 .../PartitionMesh/NodeWiseMeshPartitioner.cpp | 46 ++++++++++---------
 .../PartitionMesh/NodeWiseMeshPartitioner.h   |  6 +++
 2 files changed, 30 insertions(+), 22 deletions(-)

diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp
index 9d0926a1d46..b35d09c38ff 100644
--- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp
+++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp
@@ -97,17 +97,8 @@ void NodeWiseMeshPartitioner::findNonGhostNodesInPartition(
     {
         if (_nodes_partition_ids[i] == part_id)
         {
-            if (is_mixed_high_order_linear_elems)
-            {  // TODO: Test it once there is a case
-                if (i < _mesh->getNumberOfBaseNodes())
-                    partition.nodes.push_back(nodes[i]);
-                else
-                    extra_nodes.push_back(nodes[i]);
-            }
-            else
-            {
-                partition.nodes.push_back(nodes[i]);
-            }
+            splitOfHigherOrderNode(nodes, is_mixed_high_order_linear_elems,
+                                   i, partition.nodes, extra_nodes);
         }
     }
     partition.number_of_non_ghost_base_nodes = partition.nodes.size();
@@ -168,23 +159,34 @@ void NodeWiseMeshPartitioner::findGhostNodesInPartition(
 
             if (_nodes_partition_ids[node_id] != part_id)
             {
-                if (is_mixed_high_order_linear_elems)
-                {
-                    if (node_id < _mesh->getNumberOfBaseNodes())
-                        partition.nodes.push_back(nodes[node_id]);
-                    else
-                        extra_nodes.push_back(nodes[node_id]);
-                }
-                else
-                {
-                    partition.nodes.push_back(nodes[node_id]);
-                }
+                splitOfHigherOrderNode(nodes, is_mixed_high_order_linear_elems,
+                                       node_id, partition.nodes, extra_nodes);
                 nodes_reserved[node_id] = true;
             }
         }
     }
 }
 
+void NodeWiseMeshPartitioner::splitOfHigherOrderNode(
+    std::vector<MeshLib::Node*> const& nodes,
+    bool const is_mixed_high_order_linear_elems,
+    unsigned const node_id,
+    std::vector<MeshLib::Node*>& base_nodes,
+    std::vector<MeshLib::Node*>& extra_nodes)
+{
+    if (is_mixed_high_order_linear_elems)
+    {
+        if (node_id < _mesh->getNumberOfBaseNodes())
+            base_nodes.push_back(nodes[node_id]);
+        else
+            extra_nodes.push_back(nodes[node_id]);
+    }
+    else
+    {
+        base_nodes.push_back(nodes[node_id]);
+    }
+}
+
 void NodeWiseMeshPartitioner::processPartition(std::size_t const part_id,
     const bool is_mixed_high_order_linear_elems)
 {
diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h
index f808a2a32d1..4d92d8be85e 100644
--- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h
+++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h
@@ -158,6 +158,12 @@ private:
                                    const bool is_mixed_high_order_linear_elems,
                                    std::vector<MeshLib::Node*>& extra_nodes);
 
+    void splitOfHigherOrderNode(std::vector<MeshLib::Node*> const& nodes,
+                                bool const is_mixed_high_order_linear_elems,
+                                unsigned const node_id,
+                                std::vector<MeshLib::Node*>& base_nodes,
+                                std::vector<MeshLib::Node*>& extra_nodes);
+
     void processPartition(std::size_t const part_id,
                           const bool is_mixed_high_order_linear_elems);
 
-- 
GitLab