diff --git a/dumux/io/CMakeLists.txt b/dumux/io/CMakeLists.txt index edce26b252d624f78cb4be612964e00f714ae2fa..a4080825f4862cfbe236a471bd0545bed008c305 100644 --- a/dumux/io/CMakeLists.txt +++ b/dumux/io/CMakeLists.txt @@ -22,5 +22,6 @@ vtkfunction.hh vtkmultiwriter.hh vtknestedfunction.hh vtkoutputmodule.hh +vtkprecision.hh vtksequencewriter.hh DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dumux/io) diff --git a/dumux/io/vtkprecision.hh b/dumux/io/vtkprecision.hh new file mode 100644 index 0000000000000000000000000000000000000000..e61bdf5e711d281082e7549896cf0ad0f5a28420 --- /dev/null +++ b/dumux/io/vtkprecision.hh @@ -0,0 +1,75 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup InputOutput + * \brief Vtk output precision options available in Dumux + */ +#ifndef VTK_PRECISION_HH +#define VTK_PRECISION_HH + +#include <string> + +#include <dune/grid/io/file/vtk/common.hh> + +namespace Dumux::Vtk { + +#if DUNE_VERSION_LT(DUNE_GRID, 2, 7) +//! which precision to use when writing out data to vtk files +enum class Precision +{ + int32, + uint8, + uint32, + float32, + float64 +}; +#else +using Dune::VTK::Precision; +#endif + +/*! + * \ingroup InputOutput + * \brief Maps a string (e.g. from input) to a Dune precision type + * + * \param precisionName string, e.g. from input-file + */ +inline Precision stringToPrecision(std::string precisionName) +{ + // this should really be constexpr but GCC <= 7.2 has a bug which + // doesn't allow string_view to be constexpr + static const std::array<std::pair<std::string_view, Precision>, 5> nameToPrecision + {{ + { "Float32", Precision::float32 }, + { "Float64", Precision::float64 }, + { "UInt32", Precision::uint32 }, + { "UInt8", Precision::uint8 }, + { "Int32", Precision::int32 }, + }}; + + for (const auto& [name, precision] : nameToPrecision) + if (name == precisionName) + return precision; + + DUNE_THROW(Dune::InvalidStateException, "Unknown precision type " << precisionName); +} + +} // end namespace Dumux::Vtk + +#endif