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