From f4b767d3c8f863650339f4ad52d3e084aafdcb80 Mon Sep 17 00:00:00 2001 From: Timo Heister Date: Fri, 1 Mar 2013 20:21:24 +0000 Subject: [PATCH] second test git-svn-id: https://svn.dealii.org/branches/branch_unify_linear_algebra@28705 0785d39b-7218-0410-832d-ea1e28bc413d --- tests/gla/gla.h | 8 +- tests/gla/vec_01.cc | 3 +- tests/gla/vec_02.cc | 135 +++++++++++++++++++++++++++ tests/gla/vec_02/ncpu_10/cmp/generic | 11 +++ tests/gla/vec_02/ncpu_4/cmp/generic | 11 +++ 5 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 tests/gla/vec_02.cc create mode 100644 tests/gla/vec_02/ncpu_10/cmp/generic create mode 100644 tests/gla/vec_02/ncpu_4/cmp/generic diff --git a/tests/gla/gla.h b/tests/gla/gla.h index dd511d9d8e..e50cd7559f 100644 --- a/tests/gla/gla.h +++ b/tests/gla/gla.h @@ -54,7 +54,13 @@ class LA_Dummy {return 0;} - const Vector & operator*=(const double factor) + const Vector & operator=(const double number) + { + return *this; + } + + + const Vector & operator*=(const double factor) { return *this; } diff --git a/tests/gla/vec_01.cc b/tests/gla/vec_01.cc index a97f7d7e03..187b80b762 100644 --- a/tests/gla/vec_01.cc +++ b/tests/gla/vec_01.cc @@ -12,6 +12,7 @@ //--------------------------------------------------------------------------- +// creation and size and ghost elements of LA::MPI::Vector #include "../tests.h" #include @@ -89,7 +90,7 @@ int main (int argc, char **argv) if (myid == 0) { - std::ofstream logfile(output_file_for_mpi("ghost_01").c_str()); + std::ofstream logfile(output_file_for_mpi("vec_01").c_str()); deallog.attach(logfile); deallog << std::setprecision(4); deallog.depth_console(0); diff --git a/tests/gla/vec_02.cc b/tests/gla/vec_02.cc new file mode 100644 index 0000000000..60d02e43b8 --- /dev/null +++ b/tests/gla/vec_02.cc @@ -0,0 +1,135 @@ +//--------------------------------------------------------------------------- +// $Id: ghost_01.cc 28440 2013-02-17 14:35:08Z heister $ +// Version: $Name$ +// +// Copyright (C) 2004, 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. +// +//--------------------------------------------------------------------------- + + +// assignment of ghost vectors + +#include "../tests.h" +#include +#include +#include +#include +#include +#include + +#include "gla.h" + +template +void test () +{ + unsigned int myid = Utilities::MPI::this_mpi_process (MPI_COMM_WORLD); + unsigned int numproc = Utilities::MPI::n_mpi_processes (MPI_COMM_WORLD); + + if (myid==0) + deallog << "numproc=" << numproc << std::endl; + + // each processor owns 2 indices and all + // are ghosting Element 1 (the second) + + IndexSet local_active(numproc*2); + local_active.add_range(myid*2,myid*2+2); + IndexSet local_relevant(numproc*2); + local_relevant.add_range(1,2); + + typename LA::MPI::Vector vb(MPI_COMM_WORLD, local_active); + typename LA::MPI::Vector v(MPI_COMM_WORLD, local_active, local_relevant); + typename LA::MPI::Vector v2(MPI_COMM_WORLD, local_active, local_relevant); + + vb = 1.0; + v2 = vb; + + // set local values + vb(myid*2)=myid*2.0; + vb(myid*2+1)=myid*2.0+1.0; + + vb.compress(VectorOperation::insert); + vb*=2.0; + v=vb; + + Assert(vb.size() == numproc*2, ExcInternalError()); + Assert(v.size() == numproc*2, ExcInternalError()); + + Assert(!vb.has_ghost_elements(), ExcInternalError()); + Assert(v.has_ghost_elements(), ExcInternalError()); + + // check local values + if (Utilities::MPI::this_mpi_process (MPI_COMM_WORLD) == 0) + { + deallog << myid*2 << ":" << v(myid*2) << std::endl; + deallog << myid*2+1 << ":" << v(myid*2+1) << std::endl; + } + + //assignment from ghosted to ghosted + v2 = v; + Assert(v2(1) == 2.0, ExcInternalError()); + Assert(v2(myid*2) == myid*4.0, ExcInternalError()); + Assert(v2(myid*2+1) == myid*4.0+2.0, ExcInternalError()); + + + + Assert(v(myid*2) == myid*4.0, ExcInternalError()); + Assert(v(myid*2+1) == myid*4.0+2.0, ExcInternalError()); + + + // check ghost values + if (Utilities::MPI::this_mpi_process (MPI_COMM_WORLD) == 0) + deallog << "ghost: " << v(1) << std::endl; + Assert(v(1) == 2.0, ExcInternalError()); + + // done + if (myid==0) + deallog << "OK" << std::endl; +} + + + +int main (int argc, char **argv) +{ + Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv); + unsigned int myid = Utilities::MPI::this_mpi_process (MPI_COMM_WORLD); + + deallog.push(Utilities::int_to_string(myid)); + + if (myid == 0) + { + std::ofstream logfile(output_file_for_mpi("vec_02").c_str()); + deallog.attach(logfile); + deallog << std::setprecision(4); + deallog.depth_console(0); + deallog.threshold_double(1.e-10); + + { + deallog.push("PETSc"); + test(); + deallog.pop(); + deallog.push("Trilinos"); + test(); + deallog.pop(); + } + + } + else + { + deallog.push("PETSc"); + test(); + deallog.pop(); + deallog.push("Trilinos"); + test(); + deallog.pop(); + } + + if (myid==9999) + test(); + + +} diff --git a/tests/gla/vec_02/ncpu_10/cmp/generic b/tests/gla/vec_02/ncpu_10/cmp/generic new file mode 100644 index 0000000000..eb8100b379 --- /dev/null +++ b/tests/gla/vec_02/ncpu_10/cmp/generic @@ -0,0 +1,11 @@ + +DEAL:0:PETSc::numproc=10 +DEAL:0:PETSc::0:0.000 +DEAL:0:PETSc::1:2.000 +DEAL:0:PETSc::ghost: 2.000 +DEAL:0:PETSc::OK +DEAL:0:Trilinos::numproc=10 +DEAL:0:Trilinos::0:0.000 +DEAL:0:Trilinos::1:2.000 +DEAL:0:Trilinos::ghost: 2.000 +DEAL:0:Trilinos::OK diff --git a/tests/gla/vec_02/ncpu_4/cmp/generic b/tests/gla/vec_02/ncpu_4/cmp/generic new file mode 100644 index 0000000000..391c391341 --- /dev/null +++ b/tests/gla/vec_02/ncpu_4/cmp/generic @@ -0,0 +1,11 @@ + +DEAL:0:PETSc::numproc=4 +DEAL:0:PETSc::0:0.000 +DEAL:0:PETSc::1:2.000 +DEAL:0:PETSc::ghost: 2.000 +DEAL:0:PETSc::OK +DEAL:0:Trilinos::numproc=4 +DEAL:0:Trilinos::0:0.000 +DEAL:0:Trilinos::1:2.000 +DEAL:0:Trilinos::ghost: 2.000 +DEAL:0:Trilinos::OK -- 2.39.5