From eca0a45352ddccc0e720d5f87982235413e4d594 Mon Sep 17 00:00:00 2001 From: kanschat Date: Fri, 8 Sep 2006 14:42:11 +0000 Subject: [PATCH] fix makefile git-svn-id: https://svn.dealii.org/trunk@13855 0785d39b-7218-0410-832d-ea1e28bc413d --- tests/umfpack/Makefile | 45 ++++++ tests/umfpack/umfpack_01.cc | 114 +++++++++++++++ tests/umfpack/umfpack_01/cmp/generic | 25 ++++ .../cmp/x86_64-unknown-linux-gnu+gcc3.3 | 25 ++++ .../cmp/x86_64-unknown-linux-gnu+gcc4.1 | 25 ++++ tests/umfpack/umfpack_02.cc | 120 ++++++++++++++++ tests/umfpack/umfpack_02/cmp/generic | 25 ++++ .../cmp/x86_64-unknown-linux-gnu+gcc3.3 | 25 ++++ .../cmp/x86_64-unknown-linux-gnu+gcc4.1 | 25 ++++ tests/umfpack/umfpack_03.cc | 131 ++++++++++++++++++ tests/umfpack/umfpack_03/cmp/generic | 25 ++++ .../cmp/x86_64-unknown-linux-gnu+gcc3.3 | 25 ++++ .../cmp/x86_64-unknown-linux-gnu+gcc4.1 | 25 ++++ 13 files changed, 635 insertions(+) create mode 100644 tests/umfpack/Makefile create mode 100644 tests/umfpack/umfpack_01.cc create mode 100644 tests/umfpack/umfpack_01/cmp/generic create mode 100644 tests/umfpack/umfpack_01/cmp/x86_64-unknown-linux-gnu+gcc3.3 create mode 100644 tests/umfpack/umfpack_01/cmp/x86_64-unknown-linux-gnu+gcc4.1 create mode 100644 tests/umfpack/umfpack_02.cc create mode 100644 tests/umfpack/umfpack_02/cmp/generic create mode 100644 tests/umfpack/umfpack_02/cmp/x86_64-unknown-linux-gnu+gcc3.3 create mode 100644 tests/umfpack/umfpack_02/cmp/x86_64-unknown-linux-gnu+gcc4.1 create mode 100644 tests/umfpack/umfpack_03.cc create mode 100644 tests/umfpack/umfpack_03/cmp/generic create mode 100644 tests/umfpack/umfpack_03/cmp/x86_64-unknown-linux-gnu+gcc3.3 create mode 100644 tests/umfpack/umfpack_03/cmp/x86_64-unknown-linux-gnu+gcc4.1 diff --git a/tests/umfpack/Makefile b/tests/umfpack/Makefile new file mode 100644 index 0000000000..562bf6a91e --- /dev/null +++ b/tests/umfpack/Makefile @@ -0,0 +1,45 @@ +############################################################ +# $Id: Makefile 13843 2006-09-06 21:29:34Z kanschat $ +# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 by the deal.II authors +############################################################ + +############################################################ +# Include general settings for including DEAL libraries +############################################################ + +include ../Makefile.paths +include $D/common/Make.global_options +debug-mode = on + +libraries = $(lib-deal2-1d.g) \ + $(lib-deal2-2d.g) \ + $(lib-deal2-3d.g) \ + $(lib-lac.g) \ + $(lib-base.g) +libraries_o = $(lib-deal2-1d.o) \ + $(lib-deal2-2d.o) \ + $(lib-deal2-3d.o) \ + $(lib-lac.o) \ + $(lib-base.o) + +default: run-tests + +############################################################ + +tests_x = umfpack* + + +# from above list of regular expressions, generate the real set of +# tests +expand = $(shell echo $(addsuffix .cc,$(1)) \ + | $(PERL) -pi -e 's/\.cc//g;') +tests = $(call expand,$(tests_x)) + +############################################################ + + +include ../Makefile.rules +include Makefile.depend +include Makefile.tests + +.PHONY: default \ No newline at end of file diff --git a/tests/umfpack/umfpack_01.cc b/tests/umfpack/umfpack_01.cc new file mode 100644 index 0000000000..fcf0b587da --- /dev/null +++ b/tests/umfpack/umfpack_01.cc @@ -0,0 +1,114 @@ +//---------------------------------------------------------------------- +// $Id$ +// Version: $Name$ +// +// Copyright (C) 2002, 2003, 2004, 2005, 2006 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. +// +//---------------------------------------------------------------------- + +// test the umfpack sparse direct solver on a mass matrix + +#include "../tests.h" +#include +#include +#include + +#include +#include + +#include +#include + +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include + + +template +void test () +{ + deallog << dim << 'd' << std::endl; + + Triangulation tria; + GridGenerator::hyper_cube (tria,0,1); + tria.refine_global (1); + + // destroy the uniformity of the matrix by + // refining one cell + tria.begin_active()->set_refine_flag (); + tria.execute_coarsening_and_refinement (); + tria.refine_global(8-2*dim); + + FE_Q fe (1); + DoFHandler dof_handler (tria); + dof_handler.distribute_dofs (fe); + + deallog << "Number of dofs = " << dof_handler.n_dofs() << std::endl; + + SparsityPattern sparsity_pattern; + sparsity_pattern.reinit (dof_handler.n_dofs(), + dof_handler.n_dofs(), + dof_handler.max_couplings_between_dofs()); + DoFTools::make_sparsity_pattern (dof_handler, sparsity_pattern); + sparsity_pattern.compress (); + + SparseMatrix B; + B.reinit (sparsity_pattern); + + QGauss qr (2); + MatrixTools::create_mass_matrix (dof_handler, qr, B); + + // for a number of different solution + // vectors, make up a matching rhs vector + // and check what the UMFPACK solver finds + for (unsigned int i=0; i<3; ++i) + { + Vector solution (dof_handler.n_dofs()); + Vector x (dof_handler.n_dofs()); + Vector b (dof_handler.n_dofs()); + + for (unsigned int j=0; j (); + test<2> (); + test<3> (); +} diff --git a/tests/umfpack/umfpack_01/cmp/generic b/tests/umfpack/umfpack_01/cmp/generic new file mode 100644 index 0000000000..5c2530a7fb --- /dev/null +++ b/tests/umfpack/umfpack_01/cmp/generic @@ -0,0 +1,25 @@ + +DEAL::1d +DEAL::Number of dofs = 193 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 3084.00 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 7709.99 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 15420.0 +DEAL::2d +DEAL::Number of dofs = 1889 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 94764.3 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 236911. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.92069e-10 473822. +DEAL::3d +DEAL::Number of dofs = 1333 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 56165.6 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.33426e-10 140414. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.66851e-10 280828. diff --git a/tests/umfpack/umfpack_01/cmp/x86_64-unknown-linux-gnu+gcc3.3 b/tests/umfpack/umfpack_01/cmp/x86_64-unknown-linux-gnu+gcc3.3 new file mode 100644 index 0000000000..bbe8247965 --- /dev/null +++ b/tests/umfpack/umfpack_01/cmp/x86_64-unknown-linux-gnu+gcc3.3 @@ -0,0 +1,25 @@ + +DEAL::1d +DEAL::Number of dofs = 193 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 3084.00 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 7709.99 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 15420.0 +DEAL::2d +DEAL::Number of dofs = 1889 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 94764.3 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.05902e-10 236911. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.11804e-10 473822. +DEAL::3d +DEAL::Number of dofs = 1333 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 56165.6 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.07335e-10 140414. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 4.14670e-10 280828. diff --git a/tests/umfpack/umfpack_01/cmp/x86_64-unknown-linux-gnu+gcc4.1 b/tests/umfpack/umfpack_01/cmp/x86_64-unknown-linux-gnu+gcc4.1 new file mode 100644 index 0000000000..1040168d75 --- /dev/null +++ b/tests/umfpack/umfpack_01/cmp/x86_64-unknown-linux-gnu+gcc4.1 @@ -0,0 +1,25 @@ + +DEAL::1d +DEAL::Number of dofs = 193 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 3084.00 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 7709.99 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 15420.0 +DEAL::2d +DEAL::Number of dofs = 1889 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 94764.3 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.09141e-10 236911. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.18281e-10 473822. +DEAL::3d +DEAL::Number of dofs = 1333 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 56165.6 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.18393e-10 140414. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 4.36785e-10 280828. diff --git a/tests/umfpack/umfpack_02.cc b/tests/umfpack/umfpack_02.cc new file mode 100644 index 0000000000..f6d6a06ce3 --- /dev/null +++ b/tests/umfpack/umfpack_02.cc @@ -0,0 +1,120 @@ +//---------------------------------------------------------------------- +// $Id$ +// Version: $Name$ +// +// Copyright (C) 2002, 2003, 2004, 2005, 2006 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. +// +//---------------------------------------------------------------------- + +// test the umfpack sparse direct solver on a mass matrix; test that the +// functions that allow for repeated solves yield the correct result even +// though the matrix is decomposed only once + +#include "../tests.h" +#include +#include +#include + +#include +#include + +#include +#include + +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include + + +template +void test () +{ + deallog << dim << 'd' << std::endl; + + Triangulation tria; + GridGenerator::hyper_cube (tria,0,1); + tria.refine_global (1); + + // destroy the uniformity of the matrix by + // refining one cell + tria.begin_active()->set_refine_flag (); + tria.execute_coarsening_and_refinement (); + tria.refine_global(8-2*dim); + + FE_Q fe (1); + DoFHandler dof_handler (tria); + dof_handler.distribute_dofs (fe); + + deallog << "Number of dofs = " << dof_handler.n_dofs() << std::endl; + + SparsityPattern sparsity_pattern; + sparsity_pattern.reinit (dof_handler.n_dofs(), + dof_handler.n_dofs(), + dof_handler.max_couplings_between_dofs()); + DoFTools::make_sparsity_pattern (dof_handler, sparsity_pattern); + sparsity_pattern.compress (); + + SparseMatrix B; + B.reinit (sparsity_pattern); + + QGauss qr (2); + MatrixTools::create_mass_matrix (dof_handler, qr, B); + + // compute a decomposition of the matrix + SparseDirectUMFPACK Binv; + Binv.factorize (B); + + // for a number of different solution + // vectors, make up a matching rhs vector + // and check what the UMFPACK solver finds + for (unsigned int i=0; i<3; ++i) + { + Vector solution (dof_handler.n_dofs()); + Vector x (dof_handler.n_dofs()); + Vector b (dof_handler.n_dofs()); + + for (unsigned int j=0; j (); + test<2> (); + test<3> (); +} diff --git a/tests/umfpack/umfpack_02/cmp/generic b/tests/umfpack/umfpack_02/cmp/generic new file mode 100644 index 0000000000..5c2530a7fb --- /dev/null +++ b/tests/umfpack/umfpack_02/cmp/generic @@ -0,0 +1,25 @@ + +DEAL::1d +DEAL::Number of dofs = 193 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 3084.00 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 7709.99 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 15420.0 +DEAL::2d +DEAL::Number of dofs = 1889 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 94764.3 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 236911. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.92069e-10 473822. +DEAL::3d +DEAL::Number of dofs = 1333 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 56165.6 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.33426e-10 140414. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.66851e-10 280828. diff --git a/tests/umfpack/umfpack_02/cmp/x86_64-unknown-linux-gnu+gcc3.3 b/tests/umfpack/umfpack_02/cmp/x86_64-unknown-linux-gnu+gcc3.3 new file mode 100644 index 0000000000..bbe8247965 --- /dev/null +++ b/tests/umfpack/umfpack_02/cmp/x86_64-unknown-linux-gnu+gcc3.3 @@ -0,0 +1,25 @@ + +DEAL::1d +DEAL::Number of dofs = 193 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 3084.00 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 7709.99 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 15420.0 +DEAL::2d +DEAL::Number of dofs = 1889 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 94764.3 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.05902e-10 236911. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.11804e-10 473822. +DEAL::3d +DEAL::Number of dofs = 1333 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 56165.6 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.07335e-10 140414. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 4.14670e-10 280828. diff --git a/tests/umfpack/umfpack_02/cmp/x86_64-unknown-linux-gnu+gcc4.1 b/tests/umfpack/umfpack_02/cmp/x86_64-unknown-linux-gnu+gcc4.1 new file mode 100644 index 0000000000..1040168d75 --- /dev/null +++ b/tests/umfpack/umfpack_02/cmp/x86_64-unknown-linux-gnu+gcc4.1 @@ -0,0 +1,25 @@ + +DEAL::1d +DEAL::Number of dofs = 193 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 3084.00 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 7709.99 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 15420.0 +DEAL::2d +DEAL::Number of dofs = 1889 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 94764.3 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.09141e-10 236911. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.18281e-10 473822. +DEAL::3d +DEAL::Number of dofs = 1333 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 56165.6 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.18393e-10 140414. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 4.36785e-10 280828. diff --git a/tests/umfpack/umfpack_03.cc b/tests/umfpack/umfpack_03.cc new file mode 100644 index 0000000000..b177650a76 --- /dev/null +++ b/tests/umfpack/umfpack_03.cc @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------- +// $Id$ +// Version: $Name$ +// +// Copyright (C) 2002, 2003, 2004, 2005, 2006 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. +// +//---------------------------------------------------------------------- + +// test the umfpack sparse direct solver on a mass matrix that is slightly modified to make it nonsymmetric + +#include "../tests.h" +#include +#include +#include + +#include +#include + +#include +#include + +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include + + +template +void test () +{ + deallog << dim << 'd' << std::endl; + + Triangulation tria; + GridGenerator::hyper_cube (tria,0,1); + tria.refine_global (1); + + // destroy the uniformity of the matrix by + // refining one cell + tria.begin_active()->set_refine_flag (); + tria.execute_coarsening_and_refinement (); + tria.refine_global(8-2*dim); + + FE_Q fe (1); + DoFHandler dof_handler (tria); + dof_handler.distribute_dofs (fe); + + deallog << "Number of dofs = " << dof_handler.n_dofs() << std::endl; + + SparsityPattern sparsity_pattern; + sparsity_pattern.reinit (dof_handler.n_dofs(), + dof_handler.n_dofs(), + dof_handler.max_couplings_between_dofs()); + DoFTools::make_sparsity_pattern (dof_handler, sparsity_pattern); + sparsity_pattern.compress (); + + SparseMatrix B; + B.reinit (sparsity_pattern); + + QGauss qr (2); + MatrixTools::create_mass_matrix (dof_handler, qr, B); + + // scale lower left part of the matrix by + // 1/2 and upper right part by 2 to make + // matrix nonsymmetric + for (SparseMatrix::iterator p=B.begin(); + p!=B.end(); ++p) + if (p->column() < p->row()) + p->value() = p->value()/2; + else if (p->column() > p->row()) + p->value() = p->value() * 2; + + // check that we've done it right + for (SparseMatrix::iterator p=B.begin(); + p!=B.end(); ++p) + if (p->column() != p->row()) + Assert (B(p->row(),p->column()) != B(p->column(),p->row()), + ExcInternalError()); + + // for a number of different solution + // vectors, make up a matching rhs vector + // and check what the UMFPACK solver finds + for (unsigned int i=0; i<3; ++i) + { + Vector solution (dof_handler.n_dofs()); + Vector x (dof_handler.n_dofs()); + Vector b (dof_handler.n_dofs()); + + for (unsigned int j=0; j (); + test<2> (); + test<3> (); +} diff --git a/tests/umfpack/umfpack_03/cmp/generic b/tests/umfpack/umfpack_03/cmp/generic new file mode 100644 index 0000000000..b9cb7d0d35 --- /dev/null +++ b/tests/umfpack/umfpack_03/cmp/generic @@ -0,0 +1,25 @@ + +DEAL::1d +DEAL::Number of dofs = 193 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 3084.00 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 7709.99 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 15420.0 +DEAL::2d +DEAL::Number of dofs = 1889 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 94764.3 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.17531e-10 236911. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.35062e-10 473822. +DEAL::3d +DEAL::Number of dofs = 1333 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.26673e-10 56165.6 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.98388e-10 140414. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 5.96775e-10 280828. diff --git a/tests/umfpack/umfpack_03/cmp/x86_64-unknown-linux-gnu+gcc3.3 b/tests/umfpack/umfpack_03/cmp/x86_64-unknown-linux-gnu+gcc3.3 new file mode 100644 index 0000000000..f43549af77 --- /dev/null +++ b/tests/umfpack/umfpack_03/cmp/x86_64-unknown-linux-gnu+gcc3.3 @@ -0,0 +1,25 @@ + +DEAL::1d +DEAL::Number of dofs = 193 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 3084.00 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 7709.99 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 15420.0 +DEAL::2d +DEAL::Number of dofs = 1889 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 94764.3 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.71176e-10 236911. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 3.42352e-10 473822. +DEAL::3d +DEAL::Number of dofs = 1333 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.41911e-10 56165.6 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 6.85859e-10 140414. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.37172e-09 280828. diff --git a/tests/umfpack/umfpack_03/cmp/x86_64-unknown-linux-gnu+gcc4.1 b/tests/umfpack/umfpack_03/cmp/x86_64-unknown-linux-gnu+gcc4.1 new file mode 100644 index 0000000000..13242fcd4e --- /dev/null +++ b/tests/umfpack/umfpack_03/cmp/x86_64-unknown-linux-gnu+gcc4.1 @@ -0,0 +1,25 @@ + +DEAL::1d +DEAL::Number of dofs = 193 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 3084.00 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 7709.99 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 15420.0 +DEAL::2d +DEAL::Number of dofs = 1889 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 94764.3 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.71117e-10 236911. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 3.42234e-10 473822. +DEAL::3d +DEAL::Number of dofs = 1333 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 2.49029e-10 56165.6 +DEAL::relative norm distance = 0 +DEAL::absolute norms = 5.14587e-10 140414. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 1.02917e-09 280828. -- 2.39.5