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:
Knut Morten Okstad 2016-12-08 11:17:19 +01:00
parent e0bfbe7247
commit 161aceaac2
3 changed files with 54 additions and 93 deletions

View File

@ -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));

View File

@ -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,15 +48,8 @@ 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)
@ -69,14 +59,8 @@ TEST(TestASMu3D, BoundaryNodesF3)
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)
@ -86,14 +70,8 @@ TEST(TestASMu3D, BoundaryNodesF4)
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);

View File

@ -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