diff --git a/src/ASM/LR/Test/TestASMu2D.C b/src/ASM/LR/Test/TestASMu2D.C index 228648bf..556c98f0 100644 --- a/src/ASM/LR/Test/TestASMu2D.C +++ b/src/ASM/LR/Test/TestASMu2D.C @@ -11,13 +11,13 @@ //============================================================================== #include "ASMu2D.h" -#include "IFEM.h" #include "SIM2D.h" #include "gtest/gtest.h" -struct EdgeTest { +struct EdgeTest +{ int edge; int edgeIdx; std::array c1; @@ -31,16 +31,29 @@ class TestASMu2D : public testing::Test, }; -TEST(TestASMu2D, BoundaryNodesE1) +static void getBoundaryNodes (const char* edgeName, std::vector& nodes) { SIM2D sim(1); sim.opt.discretization = ASM::LRSpline; ASSERT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes.xinp")); - sim.preprocess(); + ASSERT_TRUE(sim.createFEMmodel()); + sim.getBoundaryNodes(sim.getUniquePropertyCode(edgeName,0),nodes); +} - int bcode = sim.getUniquePropertyCode("Edge1",0); + +static ASMu2D* getPatch (SIMinput& sim) +{ + sim.opt.discretization = ASM::LRSpline; + EXPECT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes.xinp")); + EXPECT_TRUE(sim.createFEMmodel()); + return static_cast(sim.getPatch(1)); +} + + +TEST(TestASMu2D, BoundaryNodesE1) +{ std::vector vec; - sim.getBoundaryNodes(bcode, vec); + getBoundaryNodes("Edge1",vec); ASSERT_EQ(vec.size(), 4U); for (int i = 0; i < 4; ++i) ASSERT_EQ(vec[i], 4*i+1); @@ -49,14 +62,8 @@ TEST(TestASMu2D, BoundaryNodesE1) TEST(TestASMu2D, BoundaryNodesE2) { - SIM2D sim(1); - sim.opt.discretization = ASM::LRSpline; - ASSERT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes.xinp")); - sim.preprocess(); - - int bcode = sim.getUniquePropertyCode("Edge2",0); std::vector vec; - sim.getBoundaryNodes(bcode, vec); + getBoundaryNodes("Edge2",vec); ASSERT_EQ(vec.size(), 4U); for (int i = 0; i < 4; ++i) ASSERT_EQ(vec[i], 2+4*i); @@ -65,14 +72,8 @@ TEST(TestASMu2D, BoundaryNodesE2) TEST(TestASMu2D, BoundaryNodesE3) { - SIM2D sim(1); - sim.opt.discretization = ASM::LRSpline; - ASSERT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes.xinp")); - sim.preprocess(); - - int bcode = sim.getUniquePropertyCode("Edge3",0); std::vector vec; - sim.getBoundaryNodes(bcode, vec); + getBoundaryNodes("Edge3",vec); ASSERT_EQ(vec.size(), 4U); for (int i = 0; i < 4; ++i) ASSERT_EQ(vec[i], i+1); @@ -81,14 +82,8 @@ TEST(TestASMu2D, BoundaryNodesE3) TEST(TestASMu2D, BoundaryNodesE4) { - SIM2D sim(1); - sim.opt.discretization = ASM::LRSpline; - ASSERT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes.xinp")); - sim.preprocess(); - - int bcode = sim.getUniquePropertyCode("Edge4",0); std::vector vec; - sim.getBoundaryNodes(bcode, vec); + getBoundaryNodes("Edge4",vec); ASSERT_EQ(vec.size(), 4U); for (int i = 0; i < 4; ++i) ASSERT_EQ(vec[i], 5+i); @@ -98,14 +93,12 @@ TEST(TestASMu2D, BoundaryNodesE4) TEST_P(TestASMu2D, ConstrainEdge) { SIM2D sim(1); - sim.opt.discretization = ASM::LRSpline; - ASSERT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes.xinp")); - sim.preprocess(); - ASMu2D* pch = static_cast(sim.getPatch(1)); + ASMu2D* pch = getPatch(sim); + ASSERT_TRUE(pch != nullptr); pch->constrainEdge(GetParam().edgeIdx, false, 1, 1, 1); std::vector glbNodes; pch->getBoundaryNodes(GetParam().edge, glbNodes, 1); - for (auto& it : glbNodes) + for (int& it : glbNodes) ASSERT_TRUE(pch->findMPC(it, 1) != nullptr); } @@ -113,10 +106,8 @@ TEST_P(TestASMu2D, ConstrainEdge) TEST_P(TestASMu2D, ConstrainEdgeOpen) { SIM2D sim(1); - sim.opt.discretization = ASM::LRSpline; - ASSERT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes.xinp")); - sim.preprocess(); - ASMu2D* pch = static_cast(sim.getPatch(1)); + ASMu2D* pch = getPatch(sim); + ASSERT_TRUE(pch != nullptr); pch->constrainEdge(GetParam().edgeIdx, true, 1, 1, 1); std::vector glbNodes; pch->getBoundaryNodes(GetParam().edge, glbNodes, 1); @@ -126,7 +117,7 @@ TEST_P(TestASMu2D, ConstrainEdgeOpen) crn = pch->getCorner(GetParam().c2[0], GetParam().c2[1], 1); ASSERT_TRUE(pch->findMPC(crn, 1) == nullptr); glbNodes.erase(std::find(glbNodes.begin(), glbNodes.end(), crn)); - for (auto& it : glbNodes) + for (int& it : glbNodes) ASSERT_TRUE(pch->findMPC(it, 1) != nullptr); } @@ -138,6 +129,5 @@ static const std::vector edgeTestData = {4, 2, {-1, 1}, { 1, 1}}}; - INSTANTIATE_TEST_CASE_P(TestASMu2D, TestASMu2D, testing::ValuesIn(edgeTestData)); diff --git a/src/ASM/LR/Test/TestASMu3D.C b/src/ASM/LR/Test/TestASMu3D.C index 19b5c68f..9909ddce 100644 --- a/src/ASM/LR/Test/TestASMu3D.C +++ b/src/ASM/LR/Test/TestASMu3D.C @@ -11,22 +11,25 @@ //============================================================================== #include "ASMu3D.h" -#include "IFEM.h" #include "SIM3D.h" #include "gtest/gtest.h" -TEST(TestASMu3D, BoundaryNodesF1) + +static void getBoundaryNodes (const char* faceName, std::vector& nodes) { SIM3D sim(1); sim.opt.discretization = ASM::LRSpline; ASSERT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes_3d.xinp")); - sim.preprocess(); + ASSERT_TRUE(sim.createFEMmodel()); + sim.getBoundaryNodes(sim.getUniquePropertyCode(faceName,0),nodes); +} - int bcode = sim.getUniquePropertyCode("Face1",0); + +TEST(TestASMu3D, BoundaryNodesF1) +{ std::vector vec; - sim.getBoundaryNodes(bcode, vec); - + getBoundaryNodes("Face1",vec); ASSERT_EQ(vec.size(), 16U); for (int i = 0; i < 16; ++i) ASSERT_EQ(vec[i], 1+4*i); @@ -35,14 +38,8 @@ TEST(TestASMu3D, BoundaryNodesF1) TEST(TestASMu3D, BoundaryNodesF2) { - SIM3D sim(1); - sim.opt.discretization = ASM::LRSpline; - ASSERT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes_3d.xinp")); - sim.preprocess(); - - int bcode = sim.getUniquePropertyCode("Face2",0); std::vector vec; - sim.getBoundaryNodes(bcode, vec); + getBoundaryNodes("Face2",vec); ASSERT_EQ(vec.size(), 16U); for (int i = 0; i < 16; ++i) ASSERT_EQ(vec[i], 2+4*i); @@ -51,49 +48,30 @@ TEST(TestASMu3D, BoundaryNodesF2) TEST(TestASMu3D, BoundaryNodesF3) { - SIM3D sim(1); - sim.opt.discretization = ASM::LRSpline; - ASSERT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes_3d.xinp")); - sim.preprocess(); - - int bcode = sim.getUniquePropertyCode("Face3",0); std::vector vec; - sim.getBoundaryNodes(bcode, vec); - + getBoundaryNodes("Face3",vec); ASSERT_EQ(vec.size(), 16U); for (int i = 0; i < 4; ++i) for (int j = 0; j < 4; ++j) - ASSERT_EQ(vec[4*i+j], 16*i+j+1); + ASSERT_EQ(vec[4*i+j], 16*i+j+1); } TEST(TestASMu3D, BoundaryNodesF4) { - SIM3D sim(1); - sim.opt.discretization = ASM::LRSpline; - ASSERT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes_3d.xinp")); - sim.preprocess(); - - int bcode = sim.getUniquePropertyCode("Face4",0); std::vector vec; - sim.getBoundaryNodes(bcode, vec); + getBoundaryNodes("Face4",vec); ASSERT_EQ(vec.size(), 16U); for (int i = 0; i < 4; ++i) for (int j = 0; j < 4; ++j) - ASSERT_EQ(vec[4*i+j], 5+16*i+j); + ASSERT_EQ(vec[4*i+j], 5+16*i+j); } TEST(TestASMu3D, BoundaryNodesF5) { - SIM3D sim(1); - sim.opt.discretization = ASM::LRSpline; - ASSERT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes_3d.xinp")); - sim.preprocess(); - - int bcode = sim.getUniquePropertyCode("Face5",0); std::vector vec; - sim.getBoundaryNodes(bcode, vec); + getBoundaryNodes("Face5",vec); ASSERT_EQ(vec.size(), 16U); for (int i = 0; i < 16; ++i) ASSERT_EQ(vec[i], i+1); @@ -102,14 +80,8 @@ TEST(TestASMu3D, BoundaryNodesF5) TEST(TestASMu3D, BoundaryNodesF6) { - SIM3D sim(1); - sim.opt.discretization = ASM::LRSpline; - ASSERT_TRUE(sim.read("src/ASM/LR/Test/refdata/boundary_nodes_3d.xinp")); - sim.preprocess(); - - int bcode = sim.getUniquePropertyCode("Face6",0); std::vector vec; - sim.getBoundaryNodes(bcode, vec); + getBoundaryNodes("Face6",vec); ASSERT_EQ(vec.size(), 16U); for (int i = 0; i < 16; ++i) ASSERT_EQ(vec[i], 17+i); diff --git a/src/ASM/Test/TestDomainDecomposition.C b/src/ASM/Test/TestDomainDecomposition.C index abdfd803..98b534ad 100644 --- a/src/ASM/Test/TestDomainDecomposition.C +++ b/src/ASM/Test/TestDomainDecomposition.C @@ -13,6 +13,7 @@ #include "DomainDecomposition.h" #include "SAM.h" #include "SIM2D.h" +#include "IntegrandBase.h" #include "gtest/gtest.h" #include @@ -21,8 +22,7 @@ typedef std::vector< std::vector > IntMat; static IntMat readIntMatrix(size_t r, const std::string& file) { - std::vector< std::vector > result; - result.resize(r); + IntMat result(r); std::ifstream f(file); for (size_t i=0;i>& subdomains, +auto&& check_intmatrices_equal = [](const IntMat& subdomains, const std::string& path) { IntMat B = readIntMatrix(subdomains.size(), path); - for (size_t i = 0; i < subdomains.size(); ++i) { - size_t j = 0; - for (const auto& it2 : subdomains[i]) - ASSERT_EQ(it2, B[i][j++]); - } + for (size_t i = 0; i < subdomains.size(); i++) + for (size_t j = 0; j < subdomains[i].size(); j++) + ASSERT_EQ(subdomains[i][j], B[i][j]); }; @@ -92,9 +90,10 @@ TEST(TestDomainDecomposition, LocalGroups3DO2) TEST(TestDomainDecomposition, Setup) { - SIM2D sim(1); - sim.read("src/ASM/Test/refdata/DomainDecomposition_2D_1P.xinp"); - sim.preprocess(); + class Dummy : public IntegrandBase {}; + SIM2D sim(new Dummy()); + ASSERT_TRUE(sim.read("src/ASM/Test/refdata/DomainDecomposition_2D_1P.xinp")); + ASSERT_TRUE(sim.preprocess()); DomainDecomposition dd; // TODO: Remove after integration