Newer
Older
// This file is part of the dune-gdt project:
// http://users.dune-project.org/projects/dune-gdt
// Copyright holders: Felix Schindler
// License: BSD 2-Clause License (http://opensource.org/licenses/BSD-2-Clause)
//
// Contributors: Tobias Leibner
#ifndef DUNE_GDT_SPACES_PARALLEL_HH
#define DUNE_GDT_SPACES_PARALLEL_HH
#include <dune/common/parallel/communicator.hh>
#include <dune/istl/owneroverlapcopy.hh>
#if HAVE_DUNE_PDELAB
#include <dune/pdelab/backend/istl/parallelhelper.hh>
#endif
#include <dune/stuff/la/container/istl.hh>
#include <dune/stuff/common/parallel/helper.hh>
namespace Dune {
namespace GDT {

Dr. Felix Tobias Schindler
committed
template <class ViewImp,
bool is_parallel =
Dune::Stuff::UseParallelCommunication<typename ViewImp::Grid::CollectiveCommunication>::value>
struct CommunicationChooser
{
typedef Dune::Stuff::SequentialCommunication Type;
static Type* create(const ViewImp& /*gridView*/)
}
template <class SpaceBackend>
static bool prepare(const SpaceBackend& /*space_backend*/, Type& /*communicator*/)
{
return false;
}
}; // struct CommunicationChooser
#if HAVE_MPI
template <class ViewImp>
struct CommunicationChooser<ViewImp, true>
{
typedef OwnerOverlapCopyCommunication<bigunsignedint<96>, int> Type;
static Type* create(const ViewImp& gridView)
return new Type(gridView.comm());
static bool prepare(const Space&
#if HAVE_DUNE_PDELAB
space,
Type& communicator)
#else
/*space*/,
Type& /*communicator*/)
#endif
#if HAVE_DUNE_PDELAB
Stuff::LA::IstlRowMajorSparseMatrix<typename Space::RangeFieldType> matrix;
PDELab::istl::ParallelHelper<typename Space::BackendType>(space.backend(), 0)
.createIndexSetAndProjectForAMG(matrix.backend(), communicator);
#endif // HAVE_DUNE_PDELAB