From 27ff7a1743cfdaeeb628aafe41b458f9b68a6ab3 Mon Sep 17 00:00:00 2001 From: Guido Kanschat Date: Tue, 20 Jul 2010 19:58:37 +0000 Subject: [PATCH] new test for relaxation methods and adjust results for SSOR git-svn-id: https://svn.dealii.org/trunk@21548 0785d39b-7218-0410-832d-ea1e28bc413d --- tests/lac/Makefile | 2 +- tests/lac/filtered_matrix.cc | 4 +- tests/lac/matrices.cc | 5 +- tests/lac/matrix_block_vector_01.cc | 39 +++++ tests/lac/matrix_block_vector_01/cmp/generic | 19 ++ tests/lac/solver.cc | 10 +- tests/lac/solver/cmp/generic | 24 +-- tests/lac/solver_relaxation_01.cc | 174 +++++++++++++++++++ tests/lac/solver_relaxation_01/cmp/generic | 43 +++++ tests/lac/sparse_matrices/cmp/generic | 16 +- 10 files changed, 304 insertions(+), 32 deletions(-) create mode 100644 tests/lac/matrix_block_vector_01.cc create mode 100644 tests/lac/matrix_block_vector_01/cmp/generic create mode 100644 tests/lac/solver_relaxation_01.cc create mode 100644 tests/lac/solver_relaxation_01/cmp/generic diff --git a/tests/lac/Makefile b/tests/lac/Makefile index c9f8e3c3d8..b13c42ad00 100644 --- a/tests/lac/Makefile +++ b/tests/lac/Makefile @@ -47,7 +47,7 @@ tests_x = vector-vector vector_memory \ matrix_out \ pointer_matrix \ pointer_matrix_vector \ - solver solver_selector_* \ + solver solver_selector_* solver_relaxation_* \ eigen \ filtered_matrix \ sparse_ilu* \ diff --git a/tests/lac/filtered_matrix.cc b/tests/lac/filtered_matrix.cc index dfb64b54f6..1426efca74 100644 --- a/tests/lac/filtered_matrix.cc +++ b/tests/lac/filtered_matrix.cc @@ -2,7 +2,7 @@ // $Id$ // Version: $Name$ // -// Copyright (C) 2007 by the deal.II authors +// Copyright (C) 2007, 2010 by the deal.II authors // // This file is subject to QPL and may not be distributed // without copyright and license information. Please refer @@ -83,7 +83,7 @@ int main() { std::ofstream logfile("filtered_matrix/output"); deallog.attach(logfile); - deallog.depth_console(10); + deallog.depth_console(0); PreconditionIdentity identity; ScaledMatrix > s(identity, 3.); diff --git a/tests/lac/matrices.cc b/tests/lac/matrices.cc index bfd6373aed..4feb2d0b2c 100644 --- a/tests/lac/matrices.cc +++ b/tests/lac/matrices.cc @@ -1,6 +1,5 @@ -//---------------------------- full_matrix.cc,v --------------------------- +//---------------------------------------------------------------------- // $Id$ -// Version: $Name$ // // Copyright (C) 2005 by the deal.II authors // @@ -9,7 +8,7 @@ // to the file deal.II/doc/license.html for the text and // further information on this license. // -//---------------------------- full_matrix.cc,v --------------------------- +//---------------------------------------------------------------------- // Test copying between matrices (copy_from and fill) diff --git a/tests/lac/matrix_block_vector_01.cc b/tests/lac/matrix_block_vector_01.cc new file mode 100644 index 0000000000..cdc116fb1d --- /dev/null +++ b/tests/lac/matrix_block_vector_01.cc @@ -0,0 +1,39 @@ +//---------------------------------------------------------------------- +// $Id$ +// +// Copyright (C) 2010 by the deal.II authors +// +// This file is subject to QPL and may not be distributed +// without copyright and license information. Please refer +// to the file deal.II/doc/license.html for the text and +// further information on this license. +// +//---------------------------------------------------------------------- + +#include +#include +#include +#include +#include + +#include +#include + +using namespace dealii; + +void test_sparse() +{ + MatrixBlockVector > v; +// v.add(0, 0, "A", +} + + +int main(int argc, char** argv) +{ + std::cerr << argv[0] << std::endl; + + std::ofstream logfile("matrices/output"); + deallog.attach(logfile); + deallog.depth_console(0); + deallog.threshold_double(1.e-10); +} diff --git a/tests/lac/matrix_block_vector_01/cmp/generic b/tests/lac/matrix_block_vector_01/cmp/generic new file mode 100644 index 0000000000..1301fd7b35 --- /dev/null +++ b/tests/lac/matrix_block_vector_01/cmp/generic @@ -0,0 +1,19 @@ + +DEAL::FullMatrix::copy_from SparseMatrixEZ +2. ~ 3. 4. +5. 6. ~ 7. +8. 9. 10. 11. +~ ~ ~ ~ +12. ~ 13. 14. +DEAL::LAPACKFullMatrix::copy_from SparseMatrixEZ +2. ~ 3. 4. +5. 6. ~ 7. +8. 9. 10. 11. +~ ~ ~ ~ +12. ~ 13. 14. +DEAL::LAPACKFullMatrix::fill SparseMatrixEZ +9. 10. 11. +~ ~ ~ +DEAL::LAPACKFullMatrix::fill SparseMatrixEZ +9. 10. 11. +~ 13. 14. diff --git a/tests/lac/solver.cc b/tests/lac/solver.cc index 35a88280b4..09aebf9dc5 100644 --- a/tests/lac/solver.cc +++ b/tests/lac/solver.cc @@ -1,23 +1,21 @@ -//---------------------------- solver.cc --------------------------- +//---------------------------------------------------------------------- // $Id$ -// Version: $Name$ // -// Copyright (C) 1998 - 2005 by the deal.II authors +// Copyright (C) 1998 - 2005, 2010 by the deal.II authors // // This file is subject to QPL and may not be distributed // without copyright and license information. Please refer // to the file deal.II/doc/license.html for the text and // further information on this license. // -//---------------------------- solver.cc --------------------------- +//---------------------------------------------------------------------- #include "../tests.h" +#include "testmatrix.h" #include #include #include -#include -#include "testmatrix.h" #include #include #include diff --git a/tests/lac/solver/cmp/generic b/tests/lac/solver/cmp/generic index 02ba0c9347..a5b623b562 100644 --- a/tests/lac/solver/cmp/generic +++ b/tests/lac/solver/cmp/generic @@ -36,17 +36,17 @@ DEAL:rich:GMRES::Convergence step 3 value 0 DEAL:rich:QMRS::Starting value 3.000 DEAL:rich:QMRS::Convergence step 3 value 0 DEAL:ssor:RichardsonT::Starting value 3.000 -DEAL:ssor:RichardsonT::Convergence step 10 value 0.0004418 +DEAL:ssor:RichardsonT::Convergence step 7 value 0.0006128 DEAL:ssor:Richardson::Starting value 3.000 -DEAL:ssor:Richardson::Convergence step 10 value 0.0004418 +DEAL:ssor:Richardson::Convergence step 7 value 0.0006128 DEAL:ssor:cg::Starting value 3.000 DEAL:ssor:cg::Convergence step 4 value 6.018e-05 DEAL:ssor:Bicgstab::Starting value 3.000 DEAL:ssor:Bicgstab::Convergence step 2 value 0.0003670 -DEAL:ssor:GMRES::Starting value 1.600 -DEAL:ssor:GMRES::Convergence step 3 value 0.0002978 -DEAL:ssor:GMRES::Starting value 1.600 -DEAL:ssor:GMRES::Convergence step 3 value 0.0002978 +DEAL:ssor:GMRES::Starting value 1.920 +DEAL:ssor:GMRES::Convergence step 3 value 0.0003574 +DEAL:ssor:GMRES::Starting value 1.920 +DEAL:ssor:GMRES::Convergence step 3 value 0.0003574 DEAL:ssor:QMRS::Starting value 3.000 DEAL:ssor:QMRS::Convergence step 4 value 0.0001345 DEAL:sor:RichardsonT::Starting value 3.000 @@ -118,17 +118,17 @@ DEAL:rich:GMRES::Convergence step 42 value 0.0007803 DEAL:rich:QMRS::Starting value 11.00 DEAL:rich:QMRS::Convergence step 16 value 0.0002583 DEAL:ssor:RichardsonT::Starting value 11.00 -DEAL:ssor:RichardsonT::Convergence step 59 value 0.0008892 +DEAL:ssor:RichardsonT::Convergence step 48 value 0.0009502 DEAL:ssor:Richardson::Starting value 11.00 -DEAL:ssor:Richardson::Convergence step 59 value 0.0008892 +DEAL:ssor:Richardson::Convergence step 48 value 0.0009502 DEAL:ssor:cg::Starting value 11.00 DEAL:ssor:cg::Convergence step 8 value 0.0005816 DEAL:ssor:Bicgstab::Starting value 11.00 DEAL:ssor:Bicgstab::Convergence step 4 value 0.0003834 -DEAL:ssor:GMRES::Starting value 11.05 -DEAL:ssor:GMRES::Convergence step 7 value 0.0006838 -DEAL:ssor:GMRES::Starting value 11.05 -DEAL:ssor:GMRES::Convergence step 7 value 0.0006838 +DEAL:ssor:GMRES::Starting value 13.27 +DEAL:ssor:GMRES::Convergence step 7 value 0.0008206 +DEAL:ssor:GMRES::Starting value 13.27 +DEAL:ssor:GMRES::Convergence step 7 value 0.0008206 DEAL:ssor:QMRS::Starting value 11.00 DEAL:ssor:QMRS::Convergence step 9 value 0.0004140 DEAL:sor:RichardsonT::Starting value 11.00 diff --git a/tests/lac/solver_relaxation_01.cc b/tests/lac/solver_relaxation_01.cc new file mode 100644 index 0000000000..eea254ef18 --- /dev/null +++ b/tests/lac/solver_relaxation_01.cc @@ -0,0 +1,174 @@ +//---------------------------------------------------------------------- +// $Id$ +// +// Copyright (C) 1998 - 2005, 2010 by the deal.II authors +// +// This file is subject to QPL and may not be distributed +// without copyright and license information. Please refer +// to the file deal.II/doc/license.html for the text and +// further information on this license. +// +//---------------------------------------------------------------------- + +// Compare preconditioned Richardson with relaxation. All output diffs +// should be zero. + +#include "../tests.h" +#include "testmatrix.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +template +double +check_solve( SOLVER& solver, const MATRIX& A, + VECTOR& u, VECTOR& f, const PRECONDITION& P) +{ + double result = 0.; + u = 0.; + f = 1.; + try + { + solver.solve(A,u,f,P); + } + catch (SolverControl::NoConvergence& e) + { + result = e.last_residual; + } + return result; +} + +int main() +{ + std::ofstream logfile("solver_relaxation_01/output"); +// logfile.setf(std::ios::fixed); + deallog << std::setprecision(4); + deallog.attach(logfile); + deallog.depth_console(0); + deallog.threshold_double(1.e-10); + + SolverControl control(10, 1.e-3); + SolverRichardson<> rich(control); + SolverRelaxation<> relax(control); + + for (unsigned int size=7; size <= 30; size *= 3) + { + unsigned int dim = (size-1)*(size-1); + + deallog << "Size " << size << " Unknowns " << dim << std::endl; + + // Make matrix + FDMatrix testproblem(size, size); + SparsityPattern structure(dim, dim, 5); + testproblem.five_point_structure(structure); + structure.compress(); + SparseMatrix A(structure); + testproblem.five_point(A); + + PreconditionJacobi<> prec_jacobi; + prec_jacobi.initialize(A, 0.6); + PreconditionSOR<> prec_sor; + prec_sor.initialize(A, 1.2); + PreconditionSSOR<> prec_ssor1; + prec_ssor1.initialize(A, 1.); + PreconditionSSOR<> prec_ssor2; + prec_ssor2.initialize(A, 1.2); + + Vector f(dim); + Vector u(dim); + Vector res(dim); + + f = 1.; + u = 1.; + + try + { + double r1, r2; + + r1 = check_solve(rich,A,u,f,prec_jacobi); + r2 = check_solve(relax,A,u,f,prec_jacobi); + deallog << "Jacobi diff " << std::fabs(r1-r2)/r1 << std::endl; + + r1 = check_solve(rich,A,u,f,prec_sor); + r2 = check_solve(relax,A,u,f,prec_sor); + deallog << "SOR diff " << std::fabs(r1-r2)/r1 << std::endl; + + r1 = check_solve(rich,A,u,f,prec_ssor1); + r2 = check_solve(relax,A,u,f,prec_ssor1); + deallog << "SSOR1 diff " << std::fabs(r1-r2)/r1 << std::endl; + + r1 = check_solve(rich,A,u,f,prec_ssor2); + r2 = check_solve(relax,A,u,f,prec_ssor2); + deallog << "SSOR1.2 diff " << std::fabs(r1-r2)/r1 << std::endl; + } + catch (std::exception& e) + { + std::cerr << "Exception: " << e.what() << std::endl; + } + }; + + // Solve advection problem + for (unsigned int size=4; size <= 3; size *= 3) + { + unsigned int dim = (size-1)*(size-1); + + deallog << "Size " << size << " Unknowns " << dim << std::endl; + + // Make matrix + FDMatrix testproblem(size, size); + SparsityPattern structure(dim, dim, 5); + testproblem.five_point_structure(structure); + structure.compress(); + SparseMatrix A(structure); + testproblem.upwind(A, true); + + PreconditionSOR<> prec_sor; + prec_sor.initialize(A, 1.); + + std::vector permutation(dim); + std::vector inverse_permutation(dim); + + // Create a permutation: Blocks + // backwards and every second + // block backwards + unsigned int k = 0; + for (unsigned int i=0;i prec_psor; + prec_psor.initialize(A, permutation, inverse_permutation, 1.); + + Vector f(dim); + Vector u(dim); + f = 1.; + u = 1.; + + std::cerr << "******************************" << std::endl; + + check_solve(rich,A,u,f,prec_sor); + check_solve(rich,A,u,f,prec_psor); + } +} + diff --git a/tests/lac/solver_relaxation_01/cmp/generic b/tests/lac/solver_relaxation_01/cmp/generic new file mode 100644 index 0000000000..b1b9eb9501 --- /dev/null +++ b/tests/lac/solver_relaxation_01/cmp/generic @@ -0,0 +1,43 @@ + +DEAL::Size 7 Unknowns 36 +DEAL:Richardson::Starting value 6.000 +DEAL:Richardson::Failure step 10 value 2.974 +DEAL:Relaxation::Starting value 6.000 +DEAL:Relaxation::Failure step 10 value 2.974 +DEAL::Jacobi diff 0 +DEAL:Richardson::Starting value 6.000 +DEAL:Richardson::Failure step 10 value 0.3010 +DEAL:Relaxation::Starting value 6.000 +DEAL:Relaxation::Failure step 10 value 0.3010 +DEAL::SOR diff 0 +DEAL:Richardson::Starting value 6.000 +DEAL:Richardson::Failure step 10 value 0.1343 +DEAL:Relaxation::Starting value 6.000 +DEAL:Relaxation::Failure step 10 value 0.1343 +DEAL::SSOR1 diff 0 +DEAL:Richardson::Starting value 6.000 +DEAL:Richardson::Failure step 10 value 0.03379 +DEAL:Relaxation::Starting value 6.000 +DEAL:Relaxation::Failure step 10 value 0.03379 +DEAL::SSOR1.2 diff 0 +DEAL::Size 21 Unknowns 400 +DEAL:Richardson::Starting value 20.00 +DEAL:Richardson::Failure step 10 value 16.98 +DEAL:Relaxation::Starting value 20.00 +DEAL:Relaxation::Failure step 10 value 16.98 +DEAL::Jacobi diff 0 +DEAL:Richardson::Starting value 20.00 +DEAL:Richardson::Failure step 10 value 12.36 +DEAL:Relaxation::Starting value 20.00 +DEAL:Relaxation::Failure step 10 value 12.36 +DEAL::SOR diff 0 +DEAL:Richardson::Starting value 20.00 +DEAL:Richardson::Failure step 10 value 10.93 +DEAL:Relaxation::Starting value 20.00 +DEAL:Relaxation::Failure step 10 value 10.93 +DEAL::SSOR1 diff 0 +DEAL:Richardson::Starting value 20.00 +DEAL:Richardson::Failure step 10 value 8.814 +DEAL:Relaxation::Starting value 20.00 +DEAL:Relaxation::Failure step 10 value 8.814 +DEAL::SSOR1.2 diff 0 diff --git a/tests/lac/sparse_matrices/cmp/generic b/tests/lac/sparse_matrices/cmp/generic index a81a59e894..338d0d7d3a 100644 --- a/tests/lac/sparse_matrices/cmp/generic +++ b/tests/lac/sparse_matrices/cmp/generic @@ -69,7 +69,7 @@ DEAL:5-SparseMatrix:identity:Richardson::Failure step 10 value 3.55 DEAL:5-SparseMatrix:jacobi:Richardson::Starting value 4.00 DEAL:5-SparseMatrix:jacobi:Richardson::Failure step 10 value 1.34 DEAL:5-SparseMatrix:ssor:Richardson::Starting value 4.00 -DEAL:5-SparseMatrix:ssor:Richardson::Failure step 10 value 0.00218 +DEAL:5-SparseMatrix:ssor:Richardson::Failure step 10 value 0.000169 DEAL:5-SparseMatrix:sor:Richardson::Starting value 4.00 DEAL:5-SparseMatrix:sor:Richardson::Failure step 10 value 0.00188 DEAL:5-SparseMatrix:block_jacobi:Richardson::Starting value 4.00 @@ -86,7 +86,7 @@ DEAL:5-SparseMatrix:identity:RichardsonT::Failure step 10 value 3.55 DEAL:5-SparseMatrix:jacobi:RichardsonT::Starting value 4.00 DEAL:5-SparseMatrix:jacobi:RichardsonT::Failure step 10 value 1.34 DEAL:5-SparseMatrix:ssor:RichardsonT::Starting value 4.00 -DEAL:5-SparseMatrix:ssor:RichardsonT::Failure step 10 value 0.0180 +DEAL:5-SparseMatrix:ssor:RichardsonT::Failure step 10 value 0.00836 DEAL:5-SparseMatrix:sor:RichardsonT::Starting value 4.00 DEAL:5-SparseMatrix:sor:RichardsonT::Failure step 10 value 0.230 DEAL:5-SparseMatrix:block_jacobi:RichardsonT::Starting value 4.00 @@ -256,7 +256,7 @@ DEAL:5-SparseMatrixEZ:identity:Richardson::Failure step 10 value 3.55 DEAL:5-SparseMatrixEZ:jacobi:Richardson::Starting value 4.00 DEAL:5-SparseMatrixEZ:jacobi:Richardson::Failure step 10 value 1.34 DEAL:5-SparseMatrixEZ:ssor:Richardson::Starting value 4.00 -DEAL:5-SparseMatrixEZ:ssor:Richardson::Failure step 10 value 0.00218 +DEAL:5-SparseMatrixEZ:ssor:Richardson::Failure step 10 value 0.000169 DEAL:5-SparseMatrixEZ:sor:Richardson::Starting value 4.00 DEAL:5-SparseMatrixEZ:sor:Richardson::Failure step 10 value 0.00188 DEAL:5-SparseMatrixEZ:block_jacobi:Richardson::Starting value 4.00 @@ -273,7 +273,7 @@ DEAL:5-SparseMatrixEZ:identity:RichardsonT::Failure step 10 value 3.55 DEAL:5-SparseMatrixEZ:jacobi:RichardsonT::Starting value 4.00 DEAL:5-SparseMatrixEZ:jacobi:RichardsonT::Failure step 10 value 1.34 DEAL:5-SparseMatrixEZ:ssor:RichardsonT::Starting value 4.00 -DEAL:5-SparseMatrixEZ:ssor:RichardsonT::Failure step 10 value 0.0180 +DEAL:5-SparseMatrixEZ:ssor:RichardsonT::Failure step 10 value 0.00836 DEAL:5-SparseMatrixEZ:sor:RichardsonT::Starting value 4.00 DEAL:5-SparseMatrixEZ:sor:RichardsonT::Failure step 10 value 0.230 DEAL:5-SparseMatrixEZ:block_jacobi:RichardsonT::Starting value 4.00 @@ -367,7 +367,7 @@ DEAL:9-SparseMatrix:identity:Richardson::Failure step 10 value 2.41 DEAL:9-SparseMatrix:jacobi:Richardson::Starting value 4.00 DEAL:9-SparseMatrix:jacobi:Richardson::Failure step 10 value 1.17 DEAL:9-SparseMatrix:ssor:Richardson::Starting value 4.00 -DEAL:9-SparseMatrix:ssor:Richardson::Failure step 10 value 0.00174 +DEAL:9-SparseMatrix:ssor:Richardson::Failure step 10 value 0.000124 DEAL:9-SparseMatrix:sor:Richardson::Starting value 4.00 DEAL:9-SparseMatrix:sor:Richardson::Failure step 10 value 0.00112 DEAL:9-SparseMatrix:block_jacobi:Richardson::Starting value 4.00 @@ -384,7 +384,7 @@ DEAL:9-SparseMatrix:identity:RichardsonT::Failure step 10 value 2.41 DEAL:9-SparseMatrix:jacobi:RichardsonT::Starting value 4.00 DEAL:9-SparseMatrix:jacobi:RichardsonT::Failure step 10 value 1.17 DEAL:9-SparseMatrix:ssor:RichardsonT::Starting value 4.00 -DEAL:9-SparseMatrix:ssor:RichardsonT::Failure step 10 value 0.00174 +DEAL:9-SparseMatrix:ssor:RichardsonT::Failure step 10 value 0.000124 DEAL:9-SparseMatrix:sor:RichardsonT::Starting value 4.00 DEAL:9-SparseMatrix:sor:RichardsonT::Failure step 10 value 0.00112 DEAL:9-SparseMatrix:block_jacobi:RichardsonT::Starting value 4.00 @@ -401,7 +401,7 @@ DEAL:9-SparseMatrixEZ:identity:Richardson::Failure step 10 value 2.41 DEAL:9-SparseMatrixEZ:jacobi:Richardson::Starting value 4.00 DEAL:9-SparseMatrixEZ:jacobi:Richardson::Failure step 10 value 1.17 DEAL:9-SparseMatrixEZ:ssor:Richardson::Starting value 4.00 -DEAL:9-SparseMatrixEZ:ssor:Richardson::Failure step 10 value 0.00174 +DEAL:9-SparseMatrixEZ:ssor:Richardson::Failure step 10 value 0.000124 DEAL:9-SparseMatrixEZ:sor:Richardson::Starting value 4.00 DEAL:9-SparseMatrixEZ:sor:Richardson::Failure step 10 value 0.00112 DEAL:9-SparseMatrixEZ:block_jacobi:Richardson::Starting value 4.00 @@ -418,7 +418,7 @@ DEAL:9-SparseMatrixEZ:identity:RichardsonT::Failure step 10 value 2.41 DEAL:9-SparseMatrixEZ:jacobi:RichardsonT::Starting value 4.00 DEAL:9-SparseMatrixEZ:jacobi:RichardsonT::Failure step 10 value 1.17 DEAL:9-SparseMatrixEZ:ssor:RichardsonT::Starting value 4.00 -DEAL:9-SparseMatrixEZ:ssor:RichardsonT::Failure step 10 value 0.00174 +DEAL:9-SparseMatrixEZ:ssor:RichardsonT::Failure step 10 value 0.000124 DEAL:9-SparseMatrixEZ:sor:RichardsonT::Starting value 4.00 DEAL:9-SparseMatrixEZ:sor:RichardsonT::Failure step 10 value 0.00112 DEAL:9-SparseMatrixEZ:block_jacobi:RichardsonT::Starting value 4.00 -- 2.39.5