From f7fffbb9ef55a48490dfa46df63f93ff102c1440 Mon Sep 17 00:00:00 2001 From: Tobias Meisel <tobias.meisel@ufz.de> Date: Mon, 13 Sep 2021 10:09:17 +0200 Subject: [PATCH] [MeL/IO] HDF: Add tests for multiple file output --- MeshLib/IO/XDMF/HdfData.cpp | 4 +- MeshLib/IO/XDMF/HdfData.h | 3 +- MeshLib/IO/XDMF/HdfWriter.cpp | 4 +- MeshLib/IO/XDMF/HdfWriter.h | 5 +- MeshLib/IO/XDMF/XdmfData.cpp | 4 +- MeshLib/IO/XDMF/XdmfData.h | 6 +- MeshLib/IO/XDMF/XdmfHdfWriter.cpp | 18 +-- MeshLib/IO/XDMF/XdmfHdfWriter.h | 4 +- MeshLib/IO/XDMF/fileIO.h | 5 +- MeshLib/IO/XDMF/mpi/fileIO.cpp | 10 +- MeshLib/IO/XDMF/mpi/getCommunicator.cpp | 14 +- MeshLib/IO/XDMF/mpi/getCommunicator.h | 16 ++- MeshLib/IO/XDMF/mpi/partition.cpp | 4 +- MeshLib/IO/XDMF/partition.h | 2 +- MeshLib/IO/XDMF/transformData.cpp | 24 ++-- MeshLib/IO/XDMF/transformData.h | 18 +-- ProcessLib/Output/Output.cpp | 14 +- ProcessLib/Output/Output.h | 6 +- ProcessLib/SteadyStateDiffusion/Tests.cmake | 10 +- .../XDMF_NP3_2/cube_1e3_np3_2files_0.h5 | Bin 0 -> 63926 bytes .../XDMF_NP3_2/cube_1e3_np3_2files_0.xdmf | 46 ++++++ .../XDMF_NP3_3/cube_1e3_np3_3files_0.h5 | Bin 0 -> 44733 bytes .../XDMF_NP3_3/cube_1e3_np3_3files_0.xdmf | 46 ++++++ .../Data/EllipticPETSc/cube_1e3_XDMF_np3.prj | 2 +- .../cube_1e3_XDMF_np3_2files.prj | 136 ++++++++++++++++++ .../cube_1e3_XDMF_np3_3files.prj | 136 ++++++++++++++++++ 26 files changed, 456 insertions(+), 81 deletions(-) create mode 100644 Tests/Data/EllipticPETSc/XDMF_NP3_2/cube_1e3_np3_2files_0.h5 create mode 100644 Tests/Data/EllipticPETSc/XDMF_NP3_2/cube_1e3_np3_2files_0.xdmf create mode 100644 Tests/Data/EllipticPETSc/XDMF_NP3_3/cube_1e3_np3_3files_0.h5 create mode 100644 Tests/Data/EllipticPETSc/XDMF_NP3_3/cube_1e3_np3_3files_0.xdmf create mode 100644 Tests/Data/EllipticPETSc/cube_1e3_XDMF_np3_2files.prj create mode 100644 Tests/Data/EllipticPETSc/cube_1e3_XDMF_np3_3files.prj diff --git a/MeshLib/IO/XDMF/HdfData.cpp b/MeshLib/IO/XDMF/HdfData.cpp index dc0b6272af6..be11135d630 100644 --- a/MeshLib/IO/XDMF/HdfData.cpp +++ b/MeshLib/IO/XDMF/HdfData.cpp @@ -43,11 +43,11 @@ static hid_t meshPropertyType2HdfType(MeshPropertyDataType const ogs_data_type) HdfData::HdfData(void const* data_start, std::size_t const size_partitioned_dim, std::size_t const size_tuple, std::string const& name, MeshPropertyDataType const mesh_property_data_type, - unsigned int const num_of_files) + unsigned int const n_files) : data_start(data_start), name(name) { auto const& partition_info = - getPartitionInfo(size_partitioned_dim, num_of_files); + getPartitionInfo(size_partitioned_dim, n_files); auto const& offset_partitioned_dim = partition_info.local_offset; offsets = {offset_partitioned_dim, 0}; diff --git a/MeshLib/IO/XDMF/HdfData.h b/MeshLib/IO/XDMF/HdfData.h index bc41db110b2..e29b4aea49c 100644 --- a/MeshLib/IO/XDMF/HdfData.h +++ b/MeshLib/IO/XDMF/HdfData.h @@ -25,8 +25,7 @@ struct HdfData final { HdfData(void const* data_start, std::size_t size_partitioned_dim, std::size_t size_tuple, std::string const& name, - MeshPropertyDataType mesh_property_data_type, - unsigned int num_of_files); + MeshPropertyDataType mesh_property_data_type, unsigned int n_files); void const* data_start; std::vector<Hdf5DimType> data_space; std::vector<Hdf5DimType> offsets; diff --git a/MeshLib/IO/XDMF/HdfWriter.cpp b/MeshLib/IO/XDMF/HdfWriter.cpp index a4ba35cb9c8..d60d8e779f7 100644 --- a/MeshLib/IO/XDMF/HdfWriter.cpp +++ b/MeshLib/IO/XDMF/HdfWriter.cpp @@ -214,9 +214,9 @@ HdfWriter::HdfWriter(std::vector<MeshHdfData> meshes, std::filesystem::path const& filepath, bool const use_compression, bool const is_file_manager, - unsigned int const num_of_files) + unsigned int const n_files) : _hdf5_filepath(filepath), - _file(createFile(filepath, num_of_files)), + _file(createFile(filepath, n_files)), _meshes_group( H5Gcreate2(_file, "/meshes", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)), _step_times{0}, // ToDo need to be initial time diff --git a/MeshLib/IO/XDMF/HdfWriter.h b/MeshLib/IO/XDMF/HdfWriter.h index a58c1f4bd4d..94e055007df 100644 --- a/MeshLib/IO/XDMF/HdfWriter.h +++ b/MeshLib/IO/XDMF/HdfWriter.h @@ -43,15 +43,14 @@ public: * @param filepath absolute or relative filepath to the hdf5 file * @param use_compression if true gzip compression is enabled * @param is_file_manager True if process (in parallel execution) is - * @param num_of_files Number of outputfiles - * File_Manager + * @param n_files Number of output files */ HdfWriter(std::vector<MeshHdfData> meshes, unsigned long long initial_step, std::filesystem::path const& filepath, bool use_compression, bool is_file_manager, - unsigned int num_of_files); + unsigned int n_files); /** * \brief Writes attributes. The data * itself is hold by a structure outside of this class. The writer assumes diff --git a/MeshLib/IO/XDMF/XdmfData.cpp b/MeshLib/IO/XDMF/XdmfData.cpp index f2e2b3c9eef..1750bf52c04 100644 --- a/MeshLib/IO/XDMF/XdmfData.cpp +++ b/MeshLib/IO/XDMF/XdmfData.cpp @@ -24,7 +24,7 @@ XdmfData::XdmfData(std::size_t const size_partitioned_dim, std::string const& name, std::optional<MeshLib::MeshItemType> const attribute_center, unsigned int const index, - unsigned int const num_of_files) + unsigned int const n_files) : starts( [&size_tuple]() { @@ -54,7 +54,7 @@ XdmfData::XdmfData(std::size_t const size_partitioned_dim, attribute_center(attribute_center), index(index) { - auto partition_info = getPartitionInfo(size_partitioned_dim, num_of_files); + auto partition_info = getPartitionInfo(size_partitioned_dim, n_files); // TODO (tm) XdmfLib does not support 64 bit data types so far assert(partition_info.local_length < std::numeric_limits<unsigned int>::max()); diff --git a/MeshLib/IO/XDMF/XdmfData.h b/MeshLib/IO/XDMF/XdmfData.h index d3a96f11d26..3d8e67780b1 100644 --- a/MeshLib/IO/XDMF/XdmfData.h +++ b/MeshLib/IO/XDMF/XdmfData.h @@ -46,15 +46,15 @@ struct XdmfData final * @param index The position of the DataItem parents in a grid * (representing a single step). Convention is: 1=Time, 2= * Geometry, 3=Topology, 4>=Attribute - * @param num_of_files If greater than 1 it groups the data of each process. - * The num_of_files specifies the number of groups + * @param n_files specifies the number of files. If greater than 1 it groups + * the data of each process to n_files * */ XdmfData(std::size_t size_partitioned_dim, std::size_t size_tuple, MeshPropertyDataType mesh_property_data_type, std::string const& name, std::optional<MeshLib::MeshItemType> attribute_center, - unsigned int const index, unsigned int num_of_files); + unsigned int const index, unsigned int n_files); // a hyperslab is defined by starts and strides see // https://www.xdmf.org/index.php/XDMF_Model_and_Format#HyperSlab std::vector<XdmfDimType> starts; diff --git a/MeshLib/IO/XDMF/XdmfHdfWriter.cpp b/MeshLib/IO/XDMF/XdmfHdfWriter.cpp index 265a6394225..63fec5feb4c 100644 --- a/MeshLib/IO/XDMF/XdmfHdfWriter.cpp +++ b/MeshLib/IO/XDMF/XdmfHdfWriter.cpp @@ -39,7 +39,7 @@ XdmfHdfWriter::XdmfHdfWriter( std::filesystem::path const& filepath, unsigned long long const time_step, double const initial_time, std::set<std::string> const& variable_output_names, - bool const use_compression, unsigned int const num_of_files) + bool const use_compression, unsigned int const n_files) { // ogs meshes to vector of Xdmf/HDF meshes (we keep Xdmf and HDF together // because XDMF depends on HDF) to meta @@ -79,12 +79,12 @@ XdmfHdfWriter::XdmfHdfWriter( // Transform the data to be written into a format conforming with the rules // of xdmf topology and geometry auto const transform_ogs_mesh_data_to_xdmf_conforming_data = - [&num_of_files](auto const& mesh) + [&n_files](auto const& mesh) { auto flattened_geometry_values = transformToXDMFGeometry(mesh); // actually this line is only needed to calculate the offset - XdmfHdfData const& geometry = transformGeometry( - mesh, flattened_geometry_values.data(), num_of_files); + XdmfHdfData const& geometry = + transformGeometry(mesh, flattened_geometry_values.data(), n_files); auto const flattened_topology_values = transformToXDMFTopology(mesh, geometry.hdf.offsets[0]); return std::make_unique<TransformedMeshData>( @@ -95,7 +95,7 @@ XdmfHdfWriter::XdmfHdfWriter( // create metadata for transformed data and original ogs mesh data auto const transform_to_meta_data = [&transform_ogs_mesh_data_to_xdmf_conforming_data, - &num_of_files](auto const& mesh) + &n_files](auto const& mesh) { // important: transformed data must survive and be unique, raw pointer // to its memory! @@ -103,10 +103,10 @@ XdmfHdfWriter::XdmfHdfWriter( transform_ogs_mesh_data_to_xdmf_conforming_data(mesh); auto const geometry = transformGeometry( mesh, xdmf_conforming_data->flattened_geometry_values.data(), - num_of_files); + n_files); auto const topology = transformTopology( - xdmf_conforming_data->flattened_topology_values, num_of_files); - auto const attributes = transformAttributes(mesh, num_of_files); + xdmf_conforming_data->flattened_topology_values, n_files); + auto const attributes = transformAttributes(mesh, n_files); return XdmfHdfMesh{std::move(geometry), std::move(topology), std::move(attributes), mesh.get().getName(), std::move(xdmf_conforming_data)}; @@ -159,7 +159,7 @@ XdmfHdfWriter::XdmfHdfWriter( auto const is_file_manager = isFileManager(); _hdf_writer = std::make_unique<HdfWriter>(std::move(hdf_meshes), time_step, hdf_filepath, use_compression, - is_file_manager, num_of_files); + is_file_manager, n_files); // --------------- XDMF --------------------- // The light data is only written by just one process diff --git a/MeshLib/IO/XDMF/XdmfHdfWriter.h b/MeshLib/IO/XDMF/XdmfHdfWriter.h index bdb3b884ec3..0fa6c203981 100644 --- a/MeshLib/IO/XDMF/XdmfHdfWriter.h +++ b/MeshLib/IO/XDMF/XdmfHdfWriter.h @@ -36,13 +36,13 @@ public: * that change over time * @param use_compression if true, zlib compression in HDFWriter component * is used - * @param num_of_files number of hdf5 output files + * @param n_files number of hdf5 output files */ XdmfHdfWriter( std::vector<std::reference_wrapper<const MeshLib::Mesh>> meshes, std::filesystem::path const& filepath, unsigned long long time_step, double initial_time, std::set<std::string> const& variable_output_names, - bool use_compression, unsigned int num_of_files); + bool use_compression, unsigned int n_files); /** * \brief Adds data for either lazy (xdmf) or eager (hdf) writing algorithm diff --git a/MeshLib/IO/XDMF/fileIO.h b/MeshLib/IO/XDMF/fileIO.h index 1e03fafa175..8bd4d5a474c 100644 --- a/MeshLib/IO/XDMF/fileIO.h +++ b/MeshLib/IO/XDMF/fileIO.h @@ -18,9 +18,8 @@ namespace MeshLib::IO { -int64_t createFile(std::filesystem::path const& filepath, - unsigned int num_of_files); +int64_t createFile(std::filesystem::path const& filepath, unsigned int n_files); int64_t openHDF5File(std::filesystem::path const& filepath, - unsigned int num_of_files); + unsigned int n_files); int64_t createHDF5TransferPolicy(); } // namespace MeshLib::IO diff --git a/MeshLib/IO/XDMF/mpi/fileIO.cpp b/MeshLib/IO/XDMF/mpi/fileIO.cpp index 6e134305650..4a81d6e6cdf 100644 --- a/MeshLib/IO/XDMF/mpi/fileIO.cpp +++ b/MeshLib/IO/XDMF/mpi/fileIO.cpp @@ -23,7 +23,7 @@ using namespace std::string_literals; namespace MeshLib::IO { std::filesystem::path partitionFilename( - std::filesystem::path const& basic_filepath, int file_group) + std::filesystem::path const& basic_filepath, int const file_group) { std::string const filename = (file_group > 0) ? basic_filepath.stem().string() + "_"s + @@ -37,9 +37,9 @@ std::filesystem::path partitionFilename( }; hid_t createFile(std::filesystem::path const& filepath, - unsigned int const num_of_files) + unsigned int const n_files) { - auto const communicator = getCommunicator(num_of_files); + auto const communicator = getCommunicator(n_files); MPI_Comm const comm = communicator.mpi_communicator; MPI_Info const info = MPI_INFO_NULL; hid_t const plist_id = H5Pcreate(H5P_FILE_ACCESS); @@ -55,9 +55,9 @@ hid_t createFile(std::filesystem::path const& filepath, } hid_t openHDF5File(std::filesystem::path const& filepath, - unsigned int const num_of_files) + unsigned int const n_files) { - MPI_Comm const comm = getCommunicator(num_of_files).mpi_communicator; + MPI_Comm const comm = getCommunicator(n_files).mpi_communicator; MPI_Info info = MPI_INFO_NULL; hid_t const plist_id = H5Pcreate(H5P_FILE_ACCESS); H5Pset_fapl_mpio(plist_id, comm, info); diff --git a/MeshLib/IO/XDMF/mpi/getCommunicator.cpp b/MeshLib/IO/XDMF/mpi/getCommunicator.cpp index c6ac67395e7..1942367b0cf 100644 --- a/MeshLib/IO/XDMF/mpi/getCommunicator.cpp +++ b/MeshLib/IO/XDMF/mpi/getCommunicator.cpp @@ -32,21 +32,21 @@ int getGroupIndex(int const input_index, int const input_size, // A grouping algorithm that determines the number of groups and return the // group idx of the specified input_index assert(input_size >= new_group_size); - int const minimal_output_group_size = + int const minimum_output_group_size = std::lround(input_size / new_group_size); - int const maximal_output_group_size = (input_size % new_group_size) - ? minimal_output_group_size + 1 - : minimal_output_group_size; - return std::lround(input_index / maximal_output_group_size); + int const maximum_output_group_size = (input_size % new_group_size) + ? minimum_output_group_size + 1 + : minimum_output_group_size; + return std::lround(input_index / maximum_output_group_size); }; -FileCommunicator getCommunicator(unsigned int const num_of_files) +FileCommunicator getCommunicator(unsigned int const n_files) { int num_procs; MPI_Comm_size(MPI_COMM_WORLD, &num_procs); int rank_id; MPI_Comm_rank(MPI_COMM_WORLD, &rank_id); - int file_group_id = getGroupIndex(rank_id, num_procs, num_of_files); + int const file_group_id = getGroupIndex(rank_id, num_procs, n_files); MPI_Comm new_communicator; MPI_Comm_split(MPI_COMM_WORLD, file_group_id, rank_id, &new_communicator); return FileCommunicator{std::move(new_communicator), diff --git a/MeshLib/IO/XDMF/mpi/getCommunicator.h b/MeshLib/IO/XDMF/mpi/getCommunicator.h index 416b59ec2a6..8438fcbfe4a 100644 --- a/MeshLib/IO/XDMF/mpi/getCommunicator.h +++ b/MeshLib/IO/XDMF/mpi/getCommunicator.h @@ -1,3 +1,17 @@ +/** + * \file + * \author Tobias Meisel + * \date 2021-09-14 + * \brief Assigns to each MPI communicator an output file name by attribute + * color There are multiple implementation to this interface! + * \copyright + * Copyright (c) 2012-2021, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + */ + #pragma once #include <mpi.h> @@ -12,5 +26,5 @@ struct FileCommunicator final int color; std::filesystem::path output_filename; }; -FileCommunicator getCommunicator(unsigned int num_of_files); +FileCommunicator getCommunicator(unsigned int n_files); } // namespace MeshLib::IO \ No newline at end of file diff --git a/MeshLib/IO/XDMF/mpi/partition.cpp b/MeshLib/IO/XDMF/mpi/partition.cpp index 67e0e5791fa..63762ca8432 100644 --- a/MeshLib/IO/XDMF/mpi/partition.cpp +++ b/MeshLib/IO/XDMF/mpi/partition.cpp @@ -31,9 +31,9 @@ bool isFileManager() } PartitionInfo getPartitionInfo(std::size_t const size, - unsigned int const num_of_files) + unsigned int const n_files) { - MPI_Comm const mpi_comm = getCommunicator(num_of_files).mpi_communicator; + MPI_Comm const mpi_comm = getCommunicator(n_files).mpi_communicator; int mpi_size; int mpi_rank; MPI_Comm_size(mpi_comm, &mpi_size); diff --git a/MeshLib/IO/XDMF/partition.h b/MeshLib/IO/XDMF/partition.h index afb2cb8134d..40b93a807ac 100644 --- a/MeshLib/IO/XDMF/partition.h +++ b/MeshLib/IO/XDMF/partition.h @@ -25,6 +25,6 @@ struct PartitionInfo }; PartitionInfo getPartitionInfo(std::size_t const size, - unsigned int const num_of_files); + unsigned int const n_files); bool isFileManager(); } // namespace MeshLib::IO diff --git a/MeshLib/IO/XDMF/transformData.cpp b/MeshLib/IO/XDMF/transformData.cpp index c2bb18dfee5..2dec8a94547 100644 --- a/MeshLib/IO/XDMF/transformData.cpp +++ b/MeshLib/IO/XDMF/transformData.cpp @@ -71,7 +71,7 @@ constexpr auto cellTypeOGS2XDMF(MeshLib::CellType const& cell_type) std::optional<XdmfHdfData> transformAttribute( std::pair<std::string, PropertyVectorBase*> const& property_pair, - unsigned int const num_of_files) + unsigned int const n_files) { // 3 data that will be captured and written by lambda f below MeshPropertyDataType data_type = MeshPropertyDataType::unknown; @@ -192,17 +192,17 @@ std::optional<XdmfHdfData> transformAttribute( std::string const& name = property_base->getPropertyName(); HdfData hdf = {data_ptr, num_of_tuples, ui_global_components, - name, data_type, num_of_files}; + name, data_type, n_files}; XdmfData xdmf = {num_of_tuples, ui_global_components, data_type, name, mesh_item_type, 0, - num_of_files}; + n_files}; return XdmfHdfData{std::move(hdf), std::move(xdmf)}; } std::vector<XdmfHdfData> transformAttributes(MeshLib::Mesh const& mesh, - unsigned int const num_of_files) + unsigned int const n_files) { MeshLib::Properties const& properties = mesh.getProperties(); @@ -216,8 +216,8 @@ std::vector<XdmfHdfData> transformAttributes(MeshLib::Mesh const& mesh, continue; } - if (auto const attribute = transformAttribute( - std::pair(name, property_base), num_of_files)) + if (auto const attribute = + transformAttribute(std::pair(name, property_base), n_files)) { attributes.push_back(attribute.value()); } @@ -247,7 +247,7 @@ std::vector<double> transformToXDMFGeometry(MeshLib::Mesh const& mesh) XdmfHdfData transformGeometry(MeshLib::Mesh const& mesh, double const* data_ptr, - unsigned int const num_of_files) + unsigned int const n_files) { std::string const name = "geometry"; std::vector<MeshLib::Node*> const& nodes = mesh.getNodes(); @@ -260,11 +260,11 @@ XdmfHdfData transformGeometry(MeshLib::Mesh const& mesh, point_size, name, MeshPropertyDataType::float64, - num_of_files}; + n_files}; XdmfData const xdmf = { partition_dim, point_size, MeshPropertyDataType::float64, name, std::nullopt, 2, - num_of_files}; + n_files}; return XdmfHdfData{std::move(hdf), std::move(xdmf)}; } @@ -297,15 +297,15 @@ std::vector<int> transformToXDMFTopology(MeshLib::Mesh const& mesh, } XdmfHdfData transformTopology(std::vector<int> const& values, - unsigned int const num_of_files) + unsigned int const n_files) { std::string const name = "topology"; HdfData const hdf = { values.data(), values.size(), 1, name, MeshPropertyDataType::int32, - num_of_files}; + n_files}; XdmfData const xdmf = { values.size(), 1, MeshPropertyDataType::int32, name, std::nullopt, 3, - num_of_files}; + n_files}; return XdmfHdfData{std::move(hdf), std::move(xdmf)}; } diff --git a/MeshLib/IO/XDMF/transformData.h b/MeshLib/IO/XDMF/transformData.h index 8c0e789cd5f..af3a09e7c61 100644 --- a/MeshLib/IO/XDMF/transformData.h +++ b/MeshLib/IO/XDMF/transformData.h @@ -26,31 +26,31 @@ namespace MeshLib::IO /** * \brief Create meta data for attributes used for hdf5 and xdmf * @param mesh OGS mesh can be mesh or partitionedMesh - * @param num_of_files If greater than 1 it groups the data of each process. The - * num_of_files specifies the number of groups + * @param n_files specifies the number of files. If greater than 1 it groups the + * data of each process to n_files * @return vector of meta data */ std::vector<XdmfHdfData> transformAttributes(MeshLib::Mesh const& mesh, - unsigned int num_of_files); + unsigned int n_files); /** * \brief Create meta data for geometry used for hdf5 and xdmf * @param mesh OGS mesh can be mesh or partitionedMesh * @param data_ptr Memory location of geometry values. - * @param num_of_files If greater than 1 it groups the data of each process. The - * num_of_files specifies the number of groups + * @param n_files specifies the number of files. If greater than 1 it groups the + * data of each process to n_files * @return Geometry meta data */ XdmfHdfData transformGeometry(MeshLib::Mesh const& mesh, double const* data_ptr, - unsigned int num_of_files); + unsigned int n_files); /** * \brief Create meta data for topology used for HDF5 and XDMF * @param values actual topology values to get size and memory location - * @param num_of_files If greater than 1 it groups the data of each process. The - * num_of_files specifies the number of groups + * @param n_files specifies the number of files. If greater than 1 it groups the + * data of each process to n_files * @return Topology meta data */ XdmfHdfData transformTopology(std::vector<int> const& values, - unsigned int num_of_files); + unsigned int n_files); /** * \brief Copies all node points into a new vector. Contiguous data used for * writing. Conform with XDMF standard in diff --git a/ProcessLib/Output/Output.cpp b/ProcessLib/Output/Output.cpp index 6a6f80c6f6f..0171f2cebda 100644 --- a/ProcessLib/Output/Output.cpp +++ b/ProcessLib/Output/Output.cpp @@ -95,7 +95,7 @@ bool Output::shallDoOutput(int timestep, double const t) Output::Output(std::string directory, OutputType file_type, std::string file_prefix, std::string file_suffix, - bool const compress_output, unsigned int const num_of_files, + bool const compress_output, unsigned int const n_files, std::string const& data_mode, bool const output_nonlinear_iteration_results, std::vector<PairRepeatEachSteps> repeats_each_steps, @@ -108,7 +108,7 @@ Output::Output(std::string directory, OutputType file_type, _output_file_prefix(std::move(file_prefix)), _output_file_suffix(std::move(file_suffix)), _output_file_compression(compress_output), - _num_of_files(num_of_files), + _n_files(n_files), _output_file_data_mode(convertVtkDataMode(data_mode)), _output_nonlinear_iteration_results(output_nonlinear_iteration_results), _repeats_each_steps(std::move(repeats_each_steps)), @@ -183,7 +183,7 @@ struct Output::OutputFile int const iteration, int const data_mode_, bool const compression_, std::set<std::string> const& outputnames, - unsigned int const num_of_files) + unsigned int const n_files) : name(constructFilename(type, prefix, suffix, mesh_name, timestep, t, iteration)), path(BaseLib::joinPaths(directory, name)), @@ -191,7 +191,7 @@ struct Output::OutputFile data_mode(data_mode_), compression(compression_), outputnames(outputnames), - num_of_files(num_of_files) + n_files(n_files) { } @@ -206,7 +206,7 @@ struct Output::OutputFile //! Enables or disables zlib-compression of the output files. bool const compression; std::set<std::string> outputnames; - unsigned int num_of_files; + unsigned int n_files; static std::string constructFilename(OutputType const type, std::string prefix, std::string suffix, std::string mesh_name, @@ -250,7 +250,7 @@ void Output::outputMeshXdmf( _mesh_xdmf_hdf_writer = std::make_unique<MeshLib::IO::XdmfHdfWriter>( std::move(meshes), path, timestep, t, _output_data_specification.output_variables, - output_file.compression, output_file.num_of_files); + output_file.compression, output_file.n_files); } else { @@ -337,7 +337,7 @@ void Output::doOutputAlways(Process const& process, _output_directory, _output_file_type, _output_file_prefix, "", name, timestep, t, iteration, _output_file_data_mode, _output_file_compression, - _output_data_specification.output_variables, _num_of_files); + _output_data_specification.output_variables, _n_files); outputMeshXdmf(std::move(file), std::move(meshes), timestep, t); } diff --git a/ProcessLib/Output/Output.h b/ProcessLib/Output/Output.h index 075f9f98241..47a5c155d65 100644 --- a/ProcessLib/Output/Output.h +++ b/ProcessLib/Output/Output.h @@ -39,8 +39,8 @@ public: public: Output(std::string directory, OutputType const type, std::string prefix, - std::string suffix, bool const compress_output, - unsigned int num_of_files, std::string const& data_mode, + std::string suffix, bool const compress_output, unsigned int n_files, + std::string const& data_mode, bool const output_nonlinear_iteration_results, std::vector<PairRepeatEachSteps> repeats_each_steps, std::vector<double>&& fixed_output_times, @@ -109,7 +109,7 @@ private: //! Enables or disables zlib-compression of the output files. bool const _output_file_compression; //! Specifies the number of hdf5 output files. - unsigned int const _num_of_files; + unsigned int const _n_files; //! Chooses vtk's data mode for output following the enumeration given in /// the vtkXMLWriter: {Ascii, Binary, Appended}. See vtkXMLWriter diff --git a/ProcessLib/SteadyStateDiffusion/Tests.cmake b/ProcessLib/SteadyStateDiffusion/Tests.cmake index 8ca8c99f3c7..7b3aae89283 100644 --- a/ProcessLib/SteadyStateDiffusion/Tests.cmake +++ b/ProcessLib/SteadyStateDiffusion/Tests.cmake @@ -416,7 +416,7 @@ AddTest( ) AddTest( - NAME ParallelFEM_GroundWaterFlow3D_NeumannBC_XDMF_np3 + NAME ParallelFEM_GroundWaterFlow3D_NeumannBC_XDMF_np3_1file PATH EllipticPETSc EXECUTABLE ogs EXECUTABLE_ARGS cube_1e3_XDMF_np3.prj @@ -431,9 +431,9 @@ AddTest( AddTest( NAME ParallelFEM_GroundWaterFlow3D_NeumannBC_XDMF_np3_2files - PATH EllipticPETSc + PATH EllipticPETSc/XDMF_NP3_2 EXECUTABLE ogs - EXECUTABLE_ARGS cube_1e3_XDMF_np3_2files.prj + EXECUTABLE_ARGS ../cube_1e3_XDMF_np3_2files.prj WRAPPER mpirun WRAPPER_ARGS -np 3 TESTER xdmfdiff @@ -445,9 +445,9 @@ AddTest( AddTest( NAME ParallelFEM_GroundWaterFlow3D_NeumannBC_XDMF_np3_3files - PATH EllipticPETSc + PATH EllipticPETSc/XDMF_NP3_3 EXECUTABLE ogs - EXECUTABLE_ARGS cube_1e3_XDMF_np3_3files.prj + EXECUTABLE_ARGS ../cube_1e3_XDMF_np3_3files.prj WRAPPER mpirun WRAPPER_ARGS -np 3 TESTER xdmfdiff diff --git a/Tests/Data/EllipticPETSc/XDMF_NP3_2/cube_1e3_np3_2files_0.h5 b/Tests/Data/EllipticPETSc/XDMF_NP3_2/cube_1e3_np3_2files_0.h5 new file mode 100644 index 0000000000000000000000000000000000000000..f583bc7066a8b9a83ef1b73598b8310f09b2a6ed GIT binary patch literal 63926 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 literal 0 HcmV?d00001 diff --git a/Tests/Data/EllipticPETSc/XDMF_NP3_2/cube_1e3_np3_2files_0.xdmf b/Tests/Data/EllipticPETSc/XDMF_NP3_2/cube_1e3_np3_2files_0.xdmf new file mode 100644 index 00000000000..1dde252be3a --- /dev/null +++ b/Tests/Data/EllipticPETSc/XDMF_NP3_2/cube_1e3_np3_2files_0.xdmf @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8"?> +<Xdmf xmlns:xi="http://www.w3.org/2001/XInclude" Version="3.0"> +<Domain> +<Information Name="OGS_VERSION" Value="6.4.0-1101-g95b76f5387.dirty"/> +<Grid CollectionType="Temporal" GridType="Collection" Name="Collection"> +<Grid Name="Grid"> + <Time Value="0"/> + <Geometry Origin="" Type="XYZ"> + <DataItem DataType="Float" Dimensions="1265 3" Format="HDF" Precision="8">cube_1e3_np3_2files_0.h5:meshes/cube_1x1x1_hex_1e3/geometry|0 0 0:1 1 1:1 1265 3:2 1265 3</DataItem> + </Geometry> + <Topology Dimensions="7344" Type="Mixed"> + <DataItem DataType="Int" Dimensions="7344" Format="HDF" Precision="4">cube_1e3_np3_2files_0.h5:meshes/cube_1x1x1_hex_1e3/topology|0 0:1 1:1 7344:2 7344</DataItem> + </Topology> + <Attribute Center="Node" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="D1_left_front_N1_right" Type="None"> + <DataItem DataType="Float" Dimensions="1265" Format="HDF" Precision="8">cube_1e3_np3_2files_0.h5:meshes/cube_1x1x1_hex_1e3/D1_left_front_N1_right|0 0:1 1:1 1265:2 1265</DataItem> + </Attribute> + <Attribute Center="Node" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="Linear_1_to_minus1" Type="None"> + <DataItem DataType="Float" Dimensions="1265" Format="HDF" Precision="8">cube_1e3_np3_2files_0.h5:meshes/cube_1x1x1_hex_1e3/Linear_1_to_minus1|0 0:1 1:1 1265:2 1265</DataItem> + </Attribute> + <Attribute Center="Cell" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="MaterialIDs" Type="None"> + <DataItem DataType="Int" Dimensions="816" Format="HDF" Precision="4">cube_1e3_np3_2files_0.h5:meshes/cube_1x1x1_hex_1e3/MaterialIDs|0 0:1 1:1 816:2 816</DataItem> + </Attribute> + <Attribute Center="Node" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="pressure" Type="None"> + <DataItem DataType="Float" Dimensions="1265" Format="HDF" Precision="8">cube_1e3_np3_2files_0.h5:meshes/cube_1x1x1_hex_1e3/pressure|0 0:1 1:1 1265:2 1265</DataItem> + </Attribute> + <Attribute Center="Node" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="v" Type="None"> + <DataItem DataType="Float" Dimensions="1265 3" Format="HDF" Precision="8">cube_1e3_np3_2files_0.h5:meshes/cube_1x1x1_hex_1e3/v|0 0 0:1 1 1:1 1265 3:2 1265 3</DataItem> + </Attribute> +</Grid> +<Grid Name="Grid"> + <Time Value="0.1"/> + <xi:include xpointer="element(/1/1/2/1/2)"/> + <xi:include xpointer="element(/1/1/2/1/3)"/> + <xi:include xpointer="element(/1/1/2/1/4)"/> + <xi:include xpointer="element(/1/1/2/1/5)"/> + <xi:include xpointer="element(/1/1/2/1/6)"/> + <Attribute Center="Node" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="pressure" Type="None"> + <DataItem DataType="Float" Dimensions="1265" Format="HDF" Precision="8">cube_1e3_np3_2files_0.h5:meshes/cube_1x1x1_hex_1e3/pressure|1 0:1 1:1 1265:2 1265</DataItem> + </Attribute> + <Attribute Center="Node" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="v" Type="None"> + <DataItem DataType="Float" Dimensions="1265 3" Format="HDF" Precision="8">cube_1e3_np3_2files_0.h5:meshes/cube_1x1x1_hex_1e3/v|1 0 0:1 1 1:1 1265 3:2 1265 3</DataItem> + </Attribute> +</Grid> +</Grid> +</Domain> +</Xdmf> \ No newline at end of file diff --git a/Tests/Data/EllipticPETSc/XDMF_NP3_3/cube_1e3_np3_3files_0.h5 b/Tests/Data/EllipticPETSc/XDMF_NP3_3/cube_1e3_np3_3files_0.h5 new file mode 100644 index 0000000000000000000000000000000000000000..be8f04e16d212bc4cf2232ba6607793cadde824c GIT binary patch literal 44733 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 R{t<KiZ}1KIkNy9<`4=<PVA22p literal 0 HcmV?d00001 diff --git a/Tests/Data/EllipticPETSc/XDMF_NP3_3/cube_1e3_np3_3files_0.xdmf b/Tests/Data/EllipticPETSc/XDMF_NP3_3/cube_1e3_np3_3files_0.xdmf new file mode 100644 index 00000000000..fb3ea49426f --- /dev/null +++ b/Tests/Data/EllipticPETSc/XDMF_NP3_3/cube_1e3_np3_3files_0.xdmf @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8"?> +<Xdmf xmlns:xi="http://www.w3.org/2001/XInclude" Version="3.0"> +<Domain> +<Information Name="OGS_VERSION" Value="6.4.0-1101-g95b76f5387.dirty"/> +<Grid CollectionType="Temporal" GridType="Collection" Name="Collection"> +<Grid Name="Grid"> + <Time Value="0"/> + <Geometry Origin="" Type="XYZ"> + <DataItem DataType="Float" Dimensions="643 3" Format="HDF" Precision="8">cube_1e3_np3_3files_0.h5:meshes/cube_1x1x1_hex_1e3/geometry|0 0 0:1 1 1:1 643 3:2 643 3</DataItem> + </Geometry> + <Topology Dimensions="3753" Type="Mixed"> + <DataItem DataType="Int" Dimensions="3753" Format="HDF" Precision="4">cube_1e3_np3_3files_0.h5:meshes/cube_1x1x1_hex_1e3/topology|0 0:1 1:1 3753:2 3753</DataItem> + </Topology> + <Attribute Center="Node" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="D1_left_front_N1_right" Type="None"> + <DataItem DataType="Float" Dimensions="643" Format="HDF" Precision="8">cube_1e3_np3_3files_0.h5:meshes/cube_1x1x1_hex_1e3/D1_left_front_N1_right|0 0:1 1:1 643:2 643</DataItem> + </Attribute> + <Attribute Center="Node" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="Linear_1_to_minus1" Type="None"> + <DataItem DataType="Float" Dimensions="643" Format="HDF" Precision="8">cube_1e3_np3_3files_0.h5:meshes/cube_1x1x1_hex_1e3/Linear_1_to_minus1|0 0:1 1:1 643:2 643</DataItem> + </Attribute> + <Attribute Center="Cell" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="MaterialIDs" Type="None"> + <DataItem DataType="Int" Dimensions="417" Format="HDF" Precision="4">cube_1e3_np3_3files_0.h5:meshes/cube_1x1x1_hex_1e3/MaterialIDs|0 0:1 1:1 417:2 417</DataItem> + </Attribute> + <Attribute Center="Node" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="pressure" Type="None"> + <DataItem DataType="Float" Dimensions="643" Format="HDF" Precision="8">cube_1e3_np3_3files_0.h5:meshes/cube_1x1x1_hex_1e3/pressure|0 0:1 1:1 643:2 643</DataItem> + </Attribute> + <Attribute Center="Node" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="v" Type="None"> + <DataItem DataType="Float" Dimensions="643 3" Format="HDF" Precision="8">cube_1e3_np3_3files_0.h5:meshes/cube_1x1x1_hex_1e3/v|0 0 0:1 1 1:1 643 3:2 643 3</DataItem> + </Attribute> +</Grid> +<Grid Name="Grid"> + <Time Value="0.1"/> + <xi:include xpointer="element(/1/1/2/1/2)"/> + <xi:include xpointer="element(/1/1/2/1/3)"/> + <xi:include xpointer="element(/1/1/2/1/4)"/> + <xi:include xpointer="element(/1/1/2/1/5)"/> + <xi:include xpointer="element(/1/1/2/1/6)"/> + <Attribute Center="Node" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="pressure" Type="None"> + <DataItem DataType="Float" Dimensions="643" Format="HDF" Precision="8">cube_1e3_np3_3files_0.h5:meshes/cube_1x1x1_hex_1e3/pressure|1 0:1 1:1 643:2 643</DataItem> + </Attribute> + <Attribute Center="Node" ElementCell="" ElementDegree="0" ElementFamily="" ItemType="" Name="v" Type="None"> + <DataItem DataType="Float" Dimensions="643 3" Format="HDF" Precision="8">cube_1e3_np3_3files_0.h5:meshes/cube_1x1x1_hex_1e3/v|1 0 0:1 1 1:1 643 3:2 643 3</DataItem> + </Attribute> +</Grid> +</Grid> +</Domain> +</Xdmf> \ No newline at end of file diff --git a/Tests/Data/EllipticPETSc/cube_1e3_XDMF_np3.prj b/Tests/Data/EllipticPETSc/cube_1e3_XDMF_np3.prj index 3fb3aef3a66..eea6db0a3d6 100644 --- a/Tests/Data/EllipticPETSc/cube_1e3_XDMF_np3.prj +++ b/Tests/Data/EllipticPETSc/cube_1e3_XDMF_np3.prj @@ -66,7 +66,7 @@ </variables> <suffix>_ts_{:timestep}_t_{:time}</suffix> <hdf> - <num_of_files>1</num_of_files> + <number_of_files>1</number_of_files> </hdf> </output> </time_loop> diff --git a/Tests/Data/EllipticPETSc/cube_1e3_XDMF_np3_2files.prj b/Tests/Data/EllipticPETSc/cube_1e3_XDMF_np3_2files.prj new file mode 100644 index 00000000000..87ec0301062 --- /dev/null +++ b/Tests/Data/EllipticPETSc/cube_1e3_XDMF_np3_2files.prj @@ -0,0 +1,136 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<OpenGeoSysProject> + <mesh>cube_1x1x1_hex_1e3.vtu</mesh> + <geometry>cube_1x1x1.gml</geometry> + <processes> + <process> + <name>GW23</name> + <type>STEADY_STATE_DIFFUSION</type> + <integration_order>2</integration_order> + <process_variables> + <process_variable>pressure</process_variable> + </process_variables> + <secondary_variables> + <secondary_variable internal_name="darcy_velocity" output_name="v"/> + </secondary_variables> + </process> + </processes> + <media> + <medium id="0"> + <phases/> + <properties> + <property> + <name>diffusion</name> + <type>Constant</type> + <value>1</value> + </property> + <property> + <name>reference_temperature</name> + <type>Constant</type> + <value>293.15</value> + </property> + </properties> + </medium> + </media> + <time_loop> + <processes> + <process ref="GW23"> + <nonlinear_solver>basic_picard</nonlinear_solver> + <convergence_criterion> + <type>DeltaX</type> + <norm_type>NORM2</norm_type> + <abstol>1.e-6</abstol> + </convergence_criterion> + <time_discretization> + <type>BackwardEuler</type> + </time_discretization> + <time_stepping> + <type>FixedTimeStepping</type> + <t_initial>0.0</t_initial> + <t_end>1e-1</t_end> + <timesteps> + <pair> + <repeat>1</repeat> + <delta_t>1e-1</delta_t> + </pair> + </timesteps> + </time_stepping> + </process> + </processes> + <output> + <type>XDMF</type> + <prefix>cube_1e3_np3</prefix> + <variables> + <variable> pressure </variable> + <variable> v </variable> + </variables> + <suffix>_ts_{:timestep}_t_{:time}</suffix> + <hdf> + <number_of_files>2</number_of_files> + </hdf> + </output> + </time_loop> + <parameters> + <parameter> + <name>p0</name> + <type>Constant</type> + <value>0</value> + </parameter> + <parameter> + <name>p_Dirichlet_left</name> + <type>Constant</type> + <value>1</value> + </parameter> + <parameter> + <name>p_Dirichlet_right</name> + <type>Constant</type> + <value>-1</value> + </parameter> + </parameters> + <process_variables> + <process_variable> + <name>pressure</name> + <components>1</components> + <order>1</order> + <initial_condition>p0</initial_condition> + <boundary_conditions> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>left</geometry> + <type>Dirichlet</type> + <parameter>p_Dirichlet_left</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>right</geometry> + <type>Dirichlet</type> + <parameter>p_Dirichlet_right</parameter> + </boundary_condition> + </boundary_conditions> + </process_variable> + </process_variables> + <nonlinear_solvers> + <nonlinear_solver> + <name>basic_picard</name> + <type>Picard</type> + <max_iter>10</max_iter> + <linear_solver>general_linear_solver</linear_solver> + </nonlinear_solver> + </nonlinear_solvers> + <linear_solvers> + <linear_solver> + <name>general_linear_solver</name> + <lis>-i cg -p jacobi -tol 1e-16 -maxiter 10000</lis> + <eigen> + <solver_type>CG</solver_type> + <precon_type>DIAGONAL</precon_type> + <max_iteration_step>10000</max_iteration_step> + <error_tolerance>1e-16</error_tolerance> + </eigen> + <petsc> + <prefix>gw</prefix> + <parameters>-gw_ksp_type bcgs -gw_pc_type mg -gw_ksp_rtol 1.e-16 -gw_ksp_max_it 10000</parameters> + </petsc> + </linear_solver> + </linear_solvers> +</OpenGeoSysProject> diff --git a/Tests/Data/EllipticPETSc/cube_1e3_XDMF_np3_3files.prj b/Tests/Data/EllipticPETSc/cube_1e3_XDMF_np3_3files.prj new file mode 100644 index 00000000000..470bf91b822 --- /dev/null +++ b/Tests/Data/EllipticPETSc/cube_1e3_XDMF_np3_3files.prj @@ -0,0 +1,136 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<OpenGeoSysProject> + <mesh>cube_1x1x1_hex_1e3.vtu</mesh> + <geometry>cube_1x1x1.gml</geometry> + <processes> + <process> + <name>GW23</name> + <type>STEADY_STATE_DIFFUSION</type> + <integration_order>2</integration_order> + <process_variables> + <process_variable>pressure</process_variable> + </process_variables> + <secondary_variables> + <secondary_variable internal_name="darcy_velocity" output_name="v"/> + </secondary_variables> + </process> + </processes> + <media> + <medium id="0"> + <phases/> + <properties> + <property> + <name>diffusion</name> + <type>Constant</type> + <value>1</value> + </property> + <property> + <name>reference_temperature</name> + <type>Constant</type> + <value>293.15</value> + </property> + </properties> + </medium> + </media> + <time_loop> + <processes> + <process ref="GW23"> + <nonlinear_solver>basic_picard</nonlinear_solver> + <convergence_criterion> + <type>DeltaX</type> + <norm_type>NORM2</norm_type> + <abstol>1.e-6</abstol> + </convergence_criterion> + <time_discretization> + <type>BackwardEuler</type> + </time_discretization> + <time_stepping> + <type>FixedTimeStepping</type> + <t_initial>0.0</t_initial> + <t_end>1e-1</t_end> + <timesteps> + <pair> + <repeat>1</repeat> + <delta_t>1e-1</delta_t> + </pair> + </timesteps> + </time_stepping> + </process> + </processes> + <output> + <type>XDMF</type> + <prefix>cube_1e3_np3</prefix> + <variables> + <variable> pressure </variable> + <variable> v </variable> + </variables> + <suffix>_ts_{:timestep}_t_{:time}</suffix> + <hdf> + <number_of_files>3</number_of_files> + </hdf> + </output> + </time_loop> + <parameters> + <parameter> + <name>p0</name> + <type>Constant</type> + <value>0</value> + </parameter> + <parameter> + <name>p_Dirichlet_left</name> + <type>Constant</type> + <value>1</value> + </parameter> + <parameter> + <name>p_Dirichlet_right</name> + <type>Constant</type> + <value>-1</value> + </parameter> + </parameters> + <process_variables> + <process_variable> + <name>pressure</name> + <components>1</components> + <order>1</order> + <initial_condition>p0</initial_condition> + <boundary_conditions> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>left</geometry> + <type>Dirichlet</type> + <parameter>p_Dirichlet_left</parameter> + </boundary_condition> + <boundary_condition> + <geometrical_set>cube_1x1x1_geometry</geometrical_set> + <geometry>right</geometry> + <type>Dirichlet</type> + <parameter>p_Dirichlet_right</parameter> + </boundary_condition> + </boundary_conditions> + </process_variable> + </process_variables> + <nonlinear_solvers> + <nonlinear_solver> + <name>basic_picard</name> + <type>Picard</type> + <max_iter>10</max_iter> + <linear_solver>general_linear_solver</linear_solver> + </nonlinear_solver> + </nonlinear_solvers> + <linear_solvers> + <linear_solver> + <name>general_linear_solver</name> + <lis>-i cg -p jacobi -tol 1e-16 -maxiter 10000</lis> + <eigen> + <solver_type>CG</solver_type> + <precon_type>DIAGONAL</precon_type> + <max_iteration_step>10000</max_iteration_step> + <error_tolerance>1e-16</error_tolerance> + </eigen> + <petsc> + <prefix>gw</prefix> + <parameters>-gw_ksp_type bcgs -gw_pc_type mg -gw_ksp_rtol 1.e-16 -gw_ksp_max_it 10000</parameters> + </petsc> + </linear_solver> + </linear_solvers> +</OpenGeoSysProject> -- GitLab