Skip to content

Commit 5204783

Browse files
committed
Adding test case and CGeometry unit tests
1 parent d0e10f8 commit 5204783

3 files changed

Lines changed: 220 additions & 0 deletions

File tree

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
#include "catch.hpp"
2+
#include "../../UnitQuadTestCase.hpp"
3+
4+
std::unique_ptr<UnitQuadTestCase> TestCase;
5+
6+
TEST_CASE("Geometry constructor", "[Geometry]"){
7+
8+
cout.rdbuf(nullptr);
9+
10+
TestCase = std::unique_ptr<UnitQuadTestCase>(new UnitQuadTestCase());
11+
12+
TestCase->InitConfig();
13+
14+
auto aux_geometry = std::unique_ptr<CGeometry>(new CPhysicalGeometry(TestCase->config.get(), 0, 1));
15+
16+
CHECK(aux_geometry->GetnPoint() == 125);
17+
CHECK(aux_geometry->GetnElem() == 64);
18+
CHECK(aux_geometry->GetnElemHexa() == 64);
19+
CHECK(aux_geometry->GetnEdge() == 0);
20+
CHECK(aux_geometry->GetnElem_Bound(0) == 16);
21+
CHECK(aux_geometry->GetnElem_Bound(5) == 16);
22+
23+
TestCase->geometry = std::unique_ptr<CGeometry>(new CPhysicalGeometry(aux_geometry.get(), TestCase->config.get()));
24+
25+
CHECK(TestCase->geometry->GetnPoint() == 125);
26+
CHECK(TestCase->geometry->GetnElem() == 64);
27+
CHECK(TestCase->geometry->GetnElemHexa() == 64);
28+
CHECK(TestCase->geometry->GetnEdge() == 0);
29+
CHECK(TestCase->geometry->GetnElem_Bound(0) == 16);
30+
CHECK(TestCase->geometry->GetnElem_Bound(5) == 16);
31+
32+
cout.rdbuf(TestCase->orig_buf);
33+
34+
}
35+
36+
TEST_CASE("Set Send/Recv", "[Geometry]"){
37+
TestCase->geometry->SetSendReceive(TestCase->config.get());
38+
39+
/*---- No check yet, since unit tests run in serial at the moment ---*/
40+
}
41+
42+
TEST_CASE("Set Boundaries", "[Geometry]"){
43+
44+
TestCase->geometry->SetBoundaries(TestCase->config.get());
45+
46+
CHECK(TestCase->config->GetMarker_All_KindBC(0) == CUSTOM_BOUNDARY);
47+
CHECK(TestCase->config->GetMarker_All_KindBC(2) == HEAT_FLUX);
48+
CHECK(TestCase->config->GetSolid_Wall(2));
49+
CHECK(TestCase->config->GetSolid_Wall(3));
50+
}
51+
52+
TEST_CASE("Set Point Connectivity", "[Geometry]"){
53+
54+
TestCase->geometry->SetPoint_Connectivity();
55+
56+
CHECK(TestCase->geometry->nodes->GetnElem(55) == 4);
57+
CHECK(TestCase->geometry->nodes->GetElem(30, 2) == 16);
58+
CHECK(TestCase->geometry->nodes->GetnNeighbor(3) == 4);
59+
CHECK(TestCase->geometry->nodes->GetPoint(99, 2) == 98);
60+
}
61+
62+
TEST_CASE("Set elem connectivity", "[Geometry]"){
63+
64+
TestCase->geometry->SetElement_Connectivity();
65+
66+
CHECK(TestCase->geometry->elem[14]->GetnNeighbor_Elements() == 6);
67+
CHECK(TestCase->geometry->elem[14]->GetNeighbor_Elements(1) == 15);
68+
69+
}
70+
71+
TEST_CASE("Set bound volume", "[Geometry]"){
72+
73+
TestCase->geometry->SetBoundVolume();
74+
75+
CHECK(TestCase->geometry->bound[0][10]->GetDomainElement() == 40);
76+
CHECK(TestCase->geometry->bound[4][10]->GetDomainElement() == 10);
77+
78+
}
79+
80+
TEST_CASE("Set Edges", "[Geometry]"){
81+
82+
TestCase->geometry->SetEdges();
83+
84+
CHECK(TestCase->geometry->edges->GetnNodes() == 2);
85+
CHECK(TestCase->geometry->edges->GetNode(42,0) == 15);
86+
CHECK(TestCase->geometry->edges->GetNode(87,1) == 57);
87+
88+
}
89+
90+
TEST_CASE("Set vertex", "[Geometry]"){
91+
92+
TestCase->geometry->SetVertex(TestCase->config.get());
93+
94+
CHECK(TestCase->geometry->GetnVertex(0) == 25);
95+
CHECK(TestCase->geometry->vertex[0][20]->GetNode() == 100);
96+
CHECK(TestCase->geometry->nodes->GetVertex(100, 0) == 20);
97+
CHECK(TestCase->geometry->nodes->GetVertex(1, 0) == -1);
98+
99+
}
100+
101+
TEST_CASE("Set center of gravity", "[Geometry]"){
102+
103+
TestCase->geometry->SetCoord_CG();
104+
105+
CHECK(TestCase->geometry->elem[42]->GetCG(0) == 0.625);
106+
CHECK(TestCase->geometry->elem[3]->GetCG(1) == 0.125);
107+
CHECK(TestCase->geometry->elem[25]->GetCG(2) == 0.375);
108+
109+
CHECK(TestCase->geometry->bound[1][4]->GetCG(0) == 1.0);
110+
CHECK(TestCase->geometry->bound[3][2]->GetCG(1) == 1.0);
111+
CHECK(TestCase->geometry->bound[4][3]->GetCG(2) == 0.0);
112+
113+
CHECK(TestCase->geometry->edges->GetCG(10, 0) == 0.75);
114+
CHECK(TestCase->geometry->edges->GetCG(3, 1) == 0.125);
115+
CHECK(TestCase->geometry->edges->GetCG(22, 2) == 0.0);
116+
}
117+
118+
TEST_CASE("Set control volume", "[Geometry]"){
119+
120+
TestCase->geometry->SetControlVolume(TestCase->config.get(), ALLOCATE);
121+
122+
CHECK(TestCase->geometry->nodes->GetVolume(42) == Approx(0.015625));
123+
124+
CHECK(TestCase->geometry->edges->GetNormal(32)[0] == 0.03125);
125+
CHECK(TestCase->geometry->edges->GetNormal(5)[1] == 0.0);
126+
CHECK(TestCase->geometry->edges->GetNormal(10)[2] == 0.03125);
127+
128+
CHECK(TestCase->config->GetDomainVolume() == Approx(1.0));
129+
130+
}
131+
132+
TEST_CASE("Set bound control volume", "[Geometry]"){
133+
134+
TestCase->geometry->SetBoundControlVolume(TestCase->config.get(), ALLOCATE);
135+
136+
CHECK(TestCase->geometry->vertex[0][4]->GetNormal()[0] == -0.0625);
137+
CHECK(TestCase->geometry->vertex[3][2]->GetNormal()[1] == -0.0625);
138+
CHECK(TestCase->geometry->vertex[5][3]->GetNormal()[2] == 0.03125);
139+
140+
}

UnitTests/UnitQuadTestCase.hpp

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#pragma once
2+
3+
#include <string>
4+
5+
#include "../SU2_CFD/include/solvers/CSolverFactory.hpp"
6+
#include "../Common/include/geometry/CPhysicalGeometry.hpp"
7+
#include "../SU2_CFD/include/solvers/CNSSolver.hpp"
8+
9+
struct UnitQuadTestCase {
10+
11+
const std::string config_options = "SOLVER= NAVIER_STOKES\n"
12+
"KIND_VERIFICATION_SOLUTION=MMS_NS_UNIT_QUAD\n"
13+
"MESH_FORMAT= BOX\n"
14+
"INIT_OPTION=TD_CONDITIONS\n"
15+
"MACH_NUMBER=0.5\n"
16+
"MARKER_HEATFLUX= (y_minus, 0.0, y_plus, 0.0)\n"
17+
"MARKER_CUSTOM= ( x_minus, x_plus, z_plus, z_minus)\n"
18+
"VISCOSITY_MODEL= CONSTANT_VISCOSITY\n"
19+
"CONV_FIELD=RMS_DENSITY\n"
20+
"MESH_BOX_SIZE=5,5,5\n"
21+
"MESH_BOX_LENGTH=1,1,1\n"
22+
"MESH_BOX_OFFSET=0,0,0\n"
23+
"REF_ORIGIN_MOMENT_X=0.0\n"
24+
"REF_ORIGIN_MOMENT_Y=0.0\n"
25+
"REF_ORIGIN_MOMENT_Z=0.0\n";
26+
std::stringstream ss;
27+
std::unique_ptr<CConfig> config;
28+
std::unique_ptr<CGeometry> geometry;
29+
CSolver** solver{nullptr};
30+
streambuf* orig_buf{nullptr};
31+
UnitQuadTestCase() : ss(config_options), orig_buf(cout.rdbuf()) {}
32+
33+
void InitConfig(){
34+
cout.rdbuf(nullptr);
35+
config = std::unique_ptr<CConfig>(new CConfig(ss, SU2_CFD, false));
36+
cout.rdbuf(orig_buf);
37+
}
38+
39+
void InitSolver(){
40+
cout.rdbuf(nullptr);
41+
solver = new CSolver*[MAX_SOLS];
42+
solver[FLOW_SOL] = new CNSSolver(geometry.get(), config.get(), 0);
43+
cout.rdbuf(orig_buf);
44+
45+
}
46+
47+
void InitGeometry(){
48+
cout.rdbuf(nullptr);
49+
{
50+
auto aux_geometry = std::unique_ptr<CGeometry>(new CPhysicalGeometry(config.get(), 0, 1));
51+
geometry = std::unique_ptr<CGeometry>(new CPhysicalGeometry(aux_geometry.get(), config.get()));
52+
}
53+
geometry->SetSendReceive(config.get());
54+
geometry->SetBoundaries(config.get());
55+
geometry->SetPoint_Connectivity();
56+
geometry->SetElement_Connectivity();
57+
geometry->SetBoundVolume();
58+
59+
geometry->SetEdges();
60+
geometry->SetVertex(config.get());
61+
geometry->SetCoord_CG();
62+
geometry->SetControlVolume(config.get(), ALLOCATE);
63+
geometry->SetBoundControlVolume(config.get(), ALLOCATE);
64+
geometry->FindNormal_Neighbor(config.get());
65+
geometry->SetGlobal_to_Local_Point();
66+
geometry->PreprocessP2PComms(geometry.get(),config.get());
67+
68+
cout.rdbuf(orig_buf);
69+
70+
}
71+
72+
~UnitQuadTestCase(){
73+
if (solver != nullptr){
74+
delete solver[FLOW_SOL];
75+
delete [] solver;
76+
}
77+
}
78+
79+
};

UnitTests/meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
# Direct-mode tests:
77
su2_cfd_tests = files(['Common/geometry/primal_grid/CPrimalGrid_tests.cpp',
88
'Common/geometry/dual_grid/CDualGrid_tests.cpp',
9+
'Common/geometry/CGeometry_test.cpp',
910
'SU2_CFD/numerics/CNumerics_tests.cpp'])
1011

1112
# Reverse-mode (algorithmic differentiation) tests:

0 commit comments

Comments
 (0)