diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp index 9d0926a1d4698a651497cc7b2a92ae352e726a72..b35d09c38ffc392db08a5557ecb1fd0b7d3c4939 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 f808a2a32d1b56e1aebafff5d3b9a41a25ca980d..4d92d8be85edd0ada8b2b3628f81d08529a320ee 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);