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