From: Timo Heister Date: Mon, 25 Nov 2013 15:38:49 +0000 (+0000) Subject: add tests for mumps X-Git-Tag: v8.1.0~173 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3d723c8b7c0ef9930a1f5bd7fa4fdf9291b36f08;p=dealii.git add tests for mumps git-svn-id: https://svn.dealii.org/trunk@31795 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/tests/mumps/CMakeLists.txt b/tests/mumps/CMakeLists.txt new file mode 100644 index 0000000000..73e46fe29d --- /dev/null +++ b/tests/mumps/CMakeLists.txt @@ -0,0 +1,7 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8) +INCLUDE(${DEAL_II_SOURCE_DIR}/cmake/setup_testsubproject.cmake) +PROJECT(testsuite CXX) +INCLUDE(${DEAL_II_TARGET_CONFIG}) +IF(DEAL_II_WITH_MUMPS) + DEAL_II_PICKUP_TESTS() +ENDIF() diff --git a/tests/mumps/mumps_01.cc b/tests/mumps/mumps_01.cc new file mode 100644 index 0000000000..fdb70ad01d --- /dev/null +++ b/tests/mumps/mumps_01.cc @@ -0,0 +1,125 @@ +// --------------------------------------------------------------------- +// $Id$ +// +// Copyright (C) 2002 - 2013 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE at +// the top level of the deal.II distribution. +// +// --------------------------------------------------------------------- + + +// test the mumps sparse direct solver on a mass matrix +// - check solving multiple times with one factorization +// - check two ways to initialize 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); + + // compute a decomposition of the matrix + SparseDirectMUMPS Binv; + Binv.initialize (B); + + // for a number of different solution + // vectors, make up a matching rhs vector + // and check what the 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/mumps/mumps_01.output b/tests/mumps/mumps_01.output new file mode 100644 index 0000000000..5cbb5f8764 --- /dev/null +++ b/tests/mumps/mumps_01.output @@ -0,0 +1,49 @@ + +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 = 0 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 = 0 140414. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 280828. +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 = 0 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 = 0 140414. +DEAL::relative norm distance = 0 +DEAL::absolute norms = 0 280828.