From 8191089fdec9725b08b2cf512d8040dbdb455afd Mon Sep 17 00:00:00 2001
From: Norihiro Watanabe <norihiro.watanabe@ufz.de>
Date: Wed, 28 Jan 2015 14:10:03 +0100
Subject: [PATCH] optimise getFace() for Hex and Tet as the number of face
 nodes is always same

---
 MeshLib/Elements/HexRule8.cpp | 7 ++++---
 MeshLib/Elements/TetRule4.cpp | 9 +++++----
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/MeshLib/Elements/HexRule8.cpp b/MeshLib/Elements/HexRule8.cpp
index b049b0b075b..0264ac8d9af 100644
--- a/MeshLib/Elements/HexRule8.cpp
+++ b/MeshLib/Elements/HexRule8.cpp
@@ -9,6 +9,8 @@
 
 #include "HexRule8.h"
 
+#include <array>
+
 #include "logog/include/logog.hpp"
 
 #include "GeoLib/AnalyticalGeometry.h"
@@ -53,9 +55,8 @@ const Element* HexRule8::getFace(const Element* e, unsigned i)
 {
 	if (i < n_faces)
 	{
-		unsigned nFaceNodes (getNFaceNodes(i));
-		Node** nodes = new Node*[nFaceNodes];
-		for (unsigned j=0; j<nFaceNodes; j++)
+		std::array<Node*, 4> nodes;
+		for (unsigned j=0; j<4; j++)
 			nodes[j] = const_cast<Node*>(e->getNode(face_nodes[i][j]));
 		return new Quad(nodes);
 	}
diff --git a/MeshLib/Elements/TetRule4.cpp b/MeshLib/Elements/TetRule4.cpp
index f95ef2b37de..9ecb8868e1a 100644
--- a/MeshLib/Elements/TetRule4.cpp
+++ b/MeshLib/Elements/TetRule4.cpp
@@ -9,6 +9,8 @@
 
 #include "TetRule4.h"
 
+#include <array>
+
 #include "logog/include/logog.hpp"
 
 #include "GeoLib/AnalyticalGeometry.h"
@@ -43,11 +45,10 @@ const unsigned TetRule4::edge_nodes[6][2] =
 
 const Element* TetRule4::getFace(const Element* e, unsigned i)
 {
-	if (i<e->getNFaces())
+	if (i<n_faces)
 	{
-		unsigned nFaceNodes (e->getNFaceNodes(i));
-		Node** nodes = new Node*[nFaceNodes];
-		for (unsigned j=0; j<nFaceNodes; j++)
+		std::array<Node*,3> nodes;
+		for (unsigned j=0; j<3; j++)
 			nodes[j] = const_cast<Node*>(e->getNode(face_nodes[i][j]));
 		return new Tri(nodes);
 	}
-- 
GitLab