From 0ccb358445cc1357541363dbab39c1da088af99c Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Thu, 29 Oct 2020 20:25:02 +0100
Subject: [PATCH] [A/U/ME] New tool AddElementQuality.

---
 .../Utils/MeshEdit/AddElementQuality.cpp      | 65 +++++++++++++++++++
 Applications/Utils/MeshEdit/CMakeLists.txt    |  1 +
 2 files changed, 66 insertions(+)
 create mode 100644 Applications/Utils/MeshEdit/AddElementQuality.cpp

diff --git a/Applications/Utils/MeshEdit/AddElementQuality.cpp b/Applications/Utils/MeshEdit/AddElementQuality.cpp
new file mode 100644
index 00000000000..72117c3c736
--- /dev/null
+++ b/Applications/Utils/MeshEdit/AddElementQuality.cpp
@@ -0,0 +1,65 @@
+/**
+ * \file
+ * \copyright
+ * Copyright (c) 2012-2020, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ */
+
+#include <tclap/CmdLine.h>
+
+#include <array>
+#include <string>
+
+#include "BaseLib/RunTime.h"
+#include "InfoLib/GitInfo.h"
+#include "MeshLib/IO/readMeshFromFile.h"
+#include "MeshLib/IO/writeMeshToFile.h"
+#include "MeshLib/Mesh.h"
+#include "MeshLib/MeshEnums.h"
+#include "MeshLib/MeshQuality/ElementQualityInterface.h"
+
+int main(int argc, char *argv[])
+{
+    TCLAP::CmdLine cmd(
+        "Add element quality as a mesh property.\n\n"
+        "OpenGeoSys-6 software, version " +
+            GitInfoLib::GitInfo::ogs_version +
+            ".\n"
+            "Copyright (c) 2012-2020, OpenGeoSys Community "
+            "(http://www.opengeosys.org)",
+        ' ', GitInfoLib::GitInfo::ogs_version);
+    TCLAP::ValueArg<std::string> mesh_in_arg(
+        "i", "input_mesh_file", "input mesh file", true, "", "string");
+    cmd.add(mesh_in_arg);
+    TCLAP::ValueArg<std::string> mesh_out_arg(
+        "o", "output_mesh_file", "output mesh file", true, "", "string");
+    cmd.add(mesh_out_arg);
+
+    cmd.parse(argc, argv);
+
+    // read the mesh file
+    BaseLib::RunTime run_time;
+    run_time.start();
+    std::unique_ptr<MeshLib::Mesh> mesh(
+        MeshLib::IO::readMeshFromFile(mesh_in_arg.getValue()));
+    if (!mesh)
+    {
+        return EXIT_FAILURE;
+    }
+    INFO("Time for reading: {:g} s", run_time.elapsed());
+
+    // Geometric information
+    MeshLib::MeshQualityType const type = MeshLib::MeshQualityType::EDGERATIO;
+    MeshLib::ElementQualityInterface element_quality(*mesh, type);
+    auto const element_quality_vector = element_quality.getQualityVector();
+    INFO("{:d}", element_quality_vector.size());
+    MeshLib::addPropertyToMesh(*mesh, "element_quality",
+                               MeshLib::MeshItemType::Cell, 1,
+                               element_quality_vector);
+    INFO("Writing mesh '{:s}' ... ", mesh_out_arg.getValue());
+    MeshLib::IO::writeMeshToFile(*mesh, mesh_out_arg.getValue());
+    INFO("done.");
+    return EXIT_SUCCESS;
+}
diff --git a/Applications/Utils/MeshEdit/CMakeLists.txt b/Applications/Utils/MeshEdit/CMakeLists.txt
index da30ee6df5d..c2b0efff614 100644
--- a/Applications/Utils/MeshEdit/CMakeLists.txt
+++ b/Applications/Utils/MeshEdit/CMakeLists.txt
@@ -1,4 +1,5 @@
 set(TOOLS
+    AddElementQuality
     AddLayer
     appendLinesAlongPolyline
     checkMesh
-- 
GitLab