Revision 9bb8d4c293dc1ada656d026f555dcadf56c50806 authored by Lars Bilke on 08 February 2021, 21:03:00 UTC, committed by Lars Bilke on 15 February 2021, 14:13:00 UTC
1 parent abd935b
TestSwmmInterface.cpp
/**
* \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
*
*
*/
#include <memory>
#include "gtest/gtest.h"
#include "InfoLib/TestInfo.h"
#include "Applications/FileIO/SWMM/SwmmInterface.h"
#include "GeoLib/GeoObjects.h"
#include "MeshLib/Mesh.h"
#include "MeshLib/MeshInformation.h"
TEST(FileIO, TestSwmmInterface)
{
std::string const base_name ("swmm_input_example");
std::string const file_name (TestInfoLib::TestInfo::data_path + "/FileIO/" + base_name + ".inp");
// testing geo conversion
GeoLib::GEOObjects geo_objects;
bool const result =
FileIO::SwmmInterface::convertSwmmInputToGeometry(file_name, geo_objects, true);
ASSERT_TRUE(result);
std::vector<GeoLib::Point*> const*const pnts (geo_objects.getPointVec(base_name));
std::size_t const n_pnts (259);
ASSERT_EQ(n_pnts, pnts->size());
for (std::size_t i=0; i<21; i++)
ASSERT_TRUE((*(*pnts)[i])[2] > 0);
for (std::size_t i=21; i<n_pnts; i++)
ASSERT_NEAR(0, (*(*pnts)[i])[2], std::numeric_limits<double>::epsilon());
std::vector<GeoLib::Polyline*> const*const lines (geo_objects.getPolylineVec(base_name));
std::size_t n_lines (79);
ASSERT_EQ(n_lines, lines->size());
for (std::size_t i=0; i<58; ++i)
ASSERT_TRUE((*lines)[i]->getNumberOfPoints() > 3 && (*lines)[i]->getNumberOfPoints() < 7);
for (std::size_t i=58; i<n_lines; ++i)
ASSERT_TRUE(2 == (*lines)[i]->getNumberOfPoints());
// testing mesh conversion
std::unique_ptr<FileIO::SwmmInterface> swmm = FileIO::SwmmInterface::create(file_name);
ASSERT_TRUE(swmm != nullptr);
MeshLib::Mesh const& mesh (swmm->getMesh());
std::size_t const n_nodes (22);
std::size_t const n_elems (21);
ASSERT_EQ(n_nodes, mesh.getNumberOfNodes());
ASSERT_EQ(n_elems, mesh.getNumberOfElements());
auto const* const depth =
mesh.getProperties().getPropertyVector<double>("Max Depth");
ASSERT_TRUE(n_nodes == depth->size());
ASSERT_NEAR((*depth)[1], 2*(*depth)[0], std::numeric_limits<double>::epsilon());
ASSERT_NEAR((*depth)[2], 2*(*depth)[1], std::numeric_limits<double>::epsilon());
for (std::size_t i=3; i<n_nodes; ++i)
ASSERT_NEAR(0, (*depth)[i], std::numeric_limits<double>::epsilon());
auto const& types = MeshLib::MeshInformation::getNumberOfElementTypes(mesh);
ASSERT_EQ(n_elems,
types.at(MeshLib::MeshElemType::LINE)); // all elems are lines
auto const bounds =
MeshLib::MeshInformation::getValueBounds(*materialIDs(mesh));
ASSERT_TRUE(bounds.has_value());
ASSERT_EQ(0, bounds->first);
ASSERT_EQ(0, bounds->second);
ASSERT_NEAR(186.06, mesh.getMinEdgeLength(), 0.01);
ASSERT_NEAR(3171.42, mesh.getMaxEdgeLength(), 0.01);
}
Computing file changes ...