Changed: Use createFEMmodel instead of preprocess when testing FE topology.
Added: Some static helper functions for doing identical tasks in the test.
This commit is contained in:
parent
e0bfbe7247
commit
161aceaac2
@ -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<int,2> c1;
|
||||
@ -31,16 +31,29 @@ class TestASMu2D : public testing::Test,
|
||||
};
|
||||
|
||||
|
||||
TEST(TestASMu2D, BoundaryNodesE1)
|
||||
static void getBoundaryNodes (const char* edgeName, std::vector<int>& 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<ASMu2D*>(sim.getPatch(1));
|
||||
}
|
||||
|
||||
|
||||
TEST(TestASMu2D, BoundaryNodesE1)
|
||||
{
|
||||
std::vector<int> 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<int> 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<int> 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<int> 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<ASMu2D*>(sim.getPatch(1));
|
||||
ASMu2D* pch = getPatch(sim);
|
||||
ASSERT_TRUE(pch != nullptr);
|
||||
pch->constrainEdge(GetParam().edgeIdx, false, 1, 1, 1);
|
||||
std::vector<int> 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<ASMu2D*>(sim.getPatch(1));
|
||||
ASMu2D* pch = getPatch(sim);
|
||||
ASSERT_TRUE(pch != nullptr);
|
||||
pch->constrainEdge(GetParam().edgeIdx, true, 1, 1, 1);
|
||||
std::vector<int> 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<EdgeTest> edgeTestData =
|
||||
{4, 2, {-1, 1}, { 1, 1}}};
|
||||
|
||||
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(TestASMu2D, TestASMu2D,
|
||||
testing::ValuesIn(edgeTestData));
|
||||
|
@ -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<int>& 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<int> 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<int> 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<int> 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<int> 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<int> 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<int> 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);
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "DomainDecomposition.h"
|
||||
#include "SAM.h"
|
||||
#include "SIM2D.h"
|
||||
#include "IntegrandBase.h"
|
||||
#include "gtest/gtest.h"
|
||||
#include <fstream>
|
||||
|
||||
@ -21,8 +22,7 @@ typedef std::vector< std::vector<int> > IntMat;
|
||||
|
||||
static IntMat readIntMatrix(size_t r, const std::string& file)
|
||||
{
|
||||
std::vector< std::vector<int> > result;
|
||||
result.resize(r);
|
||||
IntMat result(r);
|
||||
std::ifstream f(file);
|
||||
for (size_t i=0;i<r;++i) {
|
||||
size_t size;
|
||||
@ -36,15 +36,13 @@ static IntMat readIntMatrix(size_t r, const std::string& file)
|
||||
}
|
||||
|
||||
|
||||
auto&& check_intmatrices_equal = [](const std::vector<std::vector<int>>& 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
|
||||
|
Loading…
Reference in New Issue
Block a user