Skip to content
Snippets Groups Projects
Commit 89723e23 authored by Elias Pipping's avatar Elias Pipping
Browse files

Tests: Clean up; use energy norm

parent 54dd6440
No related branches found
No related tags found
No related merge requests found
...@@ -51,9 +51,8 @@ struct GSTestSuite { ...@@ -51,9 +51,8 @@ struct GSTestSuite {
using LoopSolver = ::LoopSolver<Vector>; using LoopSolver = ::LoopSolver<Vector>;
using Step = LinearIterationStep<Matrix, Vector>; using Step = LinearIterationStep<Matrix, Vector>;
auto solve = [&](Step* step, double stepTol, size_t maxIterations) { auto solve = [&](Step* step, Vector u_init, double stepTol, size_t maxIterations) {
Vector u_copy = p.u; step->setProblem(p.A, u_init, p.rhs);
step->setProblem(p.A, u_copy, p.rhs);
step->setIgnore(p.ignore); step->setIgnore(p.ignore);
LoopSolver solver(step, maxIterations, stepTol, &p.energyNorm, verbosity, LoopSolver solver(step, maxIterations, stepTol, &p.energyNorm, verbosity,
...@@ -62,7 +61,7 @@ struct GSTestSuite { ...@@ -62,7 +61,7 @@ struct GSTestSuite {
solver.preprocess(); solver.preprocess();
solver.solve(); solver.solve();
return u_copy; return u_init;
}; };
auto analyse = auto analyse =
...@@ -80,20 +79,20 @@ struct GSTestSuite { ...@@ -80,20 +79,20 @@ struct GSTestSuite {
}; };
auto test = [&](Step* step, std::string name) { auto test = [&](Step* step, std::string name) {
auto result = solve(step, 1e-12, 2000); auto result = solve(step, p.u_ex, 1e-12, 2000);
passed &= analyse(result, name, 1e-7); passed &= analyse(result, name, 1e-7);
}; };
auto diffTest = [&](Step* step1, std::string name1, Step* step2, auto diffTest = [&](Step* step1, std::string name1, Step* step2,
std::string name2, double maxDiff = 0.0) { std::string name2, double maxDiff = 0.0) {
auto result1 = solve(step1, 0.0, 5); auto result1 = solve(step1, p.u_ex, 0.0, 5);
auto result2 = solve(step2, 0.0, 5); auto result2 = solve(step2, p.u_ex, 0.0, 5);
result1 -= result2; auto normDiff = p.energyNorm.diff(result1, result2);
if (result1.two_norm() > maxDiff) { if (normDiff > maxDiff) {
passed = false; passed = false;
std::cerr << name1 << " and " << name2 << " differ with norm " std::cerr << name1 << " and " << name2 << " differ with norm "
<< result1.two_norm() << "." << std::endl; << normDiff << "." << std::endl;
return; return;
} }
std::cout << Dune::formatString("%*s", -60, name1.c_str()) << " and " std::cout << Dune::formatString("%*s", -60, name1.c_str()) << " and "
...@@ -167,13 +166,7 @@ struct GSTestSuite { ...@@ -167,13 +166,7 @@ struct GSTestSuite {
if (p.ignore[i][j]) if (p.ignore[i][j])
u_copy[i][j] += 1.0; u_copy[i][j] += 1.0;
gsStep.setProblem(p.A, u_copy, p.rhs); solve(&gsStep, u_copy, 1e-12, 2000);
gsStep.setIgnore(p.ignore);
LoopSolver solver(&gsStep, 2000, 1e-8, &p.energyNorm, Solver::QUIET,
relativeErrors);
solver.check();
solver.preprocess();
solver.solve();
for (size_t i = 0; i < p.u.size(); ++i) for (size_t i = 0; i < p.u.size(); ++i)
for (size_t j = 0; j < blocksize; ++j) for (size_t j = 0; j < blocksize; ++j)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment