Skip to content

Commit 7ec31ae

Browse files
33 prolongation and restriction tests (#34)
Add tests for prolongation and restriction operators. Co-authored-by: Martin J. Kühn <[email protected]> Co-authored-by: Martin Joachim Kühn <[email protected]>
1 parent 4688f6f commit 7ec31ae

File tree

5 files changed

+675
-2
lines changed

5 files changed

+675
-2
lines changed

tests/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
enable_testing()
22

3-
set(TESTSOURCES comparetest.cpp)
3+
set(TESTSOURCES comparetest.cpp test_prolongation.cpp test_restriction.cpp mockgrid.cpp)
44

55
add_executable(
66
gmgpolar_tests
@@ -12,6 +12,7 @@ target_link_libraries(
1212
GMGPolar
1313
)
1414

15-
target_include_directories(gmgpolar_tests PRIVATE ../include ../include/test_cases)
15+
16+
target_include_directories(gmgpolar_tests PRIVATE . ../include ../include/test_cases)
1617
include(GoogleTest)
1718
gtest_discover_tests(gmgpolar_tests)

tests/mockgrid.cpp

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#include "mockgrid.h"
2+
void create_grid(gmgpolar& test_p)
3+
{
4+
time_t seed = 5000;
5+
std::default_random_engine gen(seed); //deterministic seed to reproduce
6+
std::uniform_real_distribution<double> dis(gyro::dcntl[Param::R0], gyro::dcntl[Param::R]);
7+
std::uniform_real_distribution<double> theta_distribution(0, 2 * PI);
8+
9+
std::cout << "creating randomized grid with std::default_random_engine seed " + std::to_string(seed) << std::endl;
10+
level* new_level = new level(0);
11+
new_level->nr = pow(2, gyro::icntl[Param::nr_exp]);
12+
new_level->r = std::vector<double>(new_level->nr + 1);
13+
14+
std::vector<double> rands(new_level->nr - 1);
15+
for (int j = 0; j < new_level->nr - 1; ++j) {
16+
rands[j] = dis(gen);
17+
}
18+
std::sort(rands.begin(), rands.end());
19+
new_level->r[0] = gyro::dcntl[Param::R0];
20+
for (int i = 1; i < new_level->nr; i++) {
21+
new_level->r[i] = rands[i - 1]; //random grid on coarser level
22+
}
23+
new_level->r[new_level->nr] = gyro::dcntl[Param::R];
24+
new_level->nr++;
25+
int ntmp = pow(2, ceil(log2(new_level->nr)));
26+
new_level->ntheta = gyro::icntl[Param::periodic] ? ntmp : ntmp + 1;
27+
28+
new_level->theta = std::vector<double>(new_level->ntheta);
29+
30+
std::vector<double> randst(ntmp - 1);
31+
for (int k = 0; k < ntmp - 1; ++k) {
32+
randst[k] = theta_distribution(gen);
33+
}
34+
std::sort(randst.begin(), randst.end());
35+
new_level->theta[0] = 0;
36+
for (int i = 1; i < ntmp; i++) {
37+
new_level->theta[i] = randst[i - 1];
38+
}
39+
if (!gyro::icntl[Param::periodic]) {
40+
new_level->theta[ntmp] = 2 * PI;
41+
}
42+
43+
new_level->ntheta_int = gyro::icntl[Param::periodic] ? new_level->ntheta : new_level->ntheta - 1;
44+
new_level->nr_int = new_level->nr - 1;
45+
46+
new_level->thetaplus = std::vector<double>(new_level->ntheta_int);
47+
for (int k = 0; k < new_level->ntheta_int - 1; k++) {
48+
new_level->thetaplus[k] = new_level->theta[k + 1] - new_level->theta[k];
49+
}
50+
new_level->thetaplus[new_level->ntheta_int - 1] = 2 * PI - new_level->theta[new_level->ntheta_int - 1];
51+
52+
new_level->hplus = std::vector<double>(new_level->nr_int);
53+
for (int k = 0; k < new_level->nr_int; k++) {
54+
new_level->hplus[k] = new_level->r[k + 1] - new_level->r[k];
55+
}
56+
57+
level* coarser_level = new level(1);
58+
coarser_level->nr = pow(2, gyro::icntl[Param::nr_exp] - 1) + 1;
59+
ntmp = pow(2, ceil(log2(coarser_level->nr)));
60+
coarser_level->ntheta = gyro::icntl[Param::periodic] ? ntmp : ntmp + 1;
61+
62+
coarser_level->ntheta_int = gyro::icntl[Param::periodic] ? coarser_level->ntheta : coarser_level->ntheta - 1;
63+
coarser_level->nr_int = coarser_level->nr - 1;
64+
test_p.v_level.push_back(new_level);
65+
test_p.v_level.push_back(coarser_level);
66+
test_p.levels_orig = 2;
67+
}

tests/mockgrid.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#include "gmgpolar.h"
2+
#include <random>
3+
#include <stdlib.h>
4+
#include <algorithm>
5+
6+
#ifndef MOCKGRID_H
7+
#define MOCKGRID_H
8+
9+
void create_grid(gmgpolar& test_p);
10+
11+
#endif

0 commit comments

Comments
 (0)