#1661 parallelamgtest fails with ParMETIS present
Metadata
Property | Value |
---|---|
Reported by | Dominic Kempf (dominic.r.kempf@gmail.com) |
Reported at | Jun 8, 2015 12:20 |
Type | Bug Report |
Version | 2.3 |
Operating System | Unspecified / All |
Last edited by | Dominic Kempf (dominic.r.kempf@gmail.com) |
Last edited at | Aug 5, 2015 09:37 |
Closed by | Dominic Kempf (dominic.r.kempf@gmail.com) |
Closed at | Aug 5, 2015 09:37 |
Closed in version | Unknown |
Resolution | Fixed |
Comment |
Description
With ParMETIS 3.1 installed and enabled, the parallelamgtest in dune-istl fails to build. The build system is cmake. I have seen this occur on at least 3 different systems by now.
The error is the following:
In file included from /home/dominic/dune/dune-istl/dune/istl/matrixredistribute.hh:5:0, from /home/dominic/dune/dune-istl/dune/istl/paamg/transfer.hh:7, from /home/dominic/dune/dune-istl/dune/istl/paamg/amg.hh:9, from /home/dominic/dune/dune-istl/dune/istl/paamg/test/parallelamgtest.cc:12: /home/dominic/dune/dune-istl/dune/istl/repartition.hh: In instantiation of ‘bool Dune::graphRepartition(const G&, Dune::OwnerOverlapCopyCommunication<T1, T2>&, int, Dune::OwnerOverlapCopyCommunication<T1, T2>*&, Dune::RedistributeInterface&, bool) [with G = Dune::Amg::PropertiesGraph<Dune::Amg::MatrixGraph<const Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > > >, Dune::Amg::VertexProperties, Dune::Amg::EdgeProperties, Dune::IdentityMap, Dune::IdentityMap>; T1 = int; T2 = int]’: /home/dominic/dune/dune-istl/dune/istl/paamg/hierarchy.hh:621:76: required from ‘bool Dune::Amg::repartitionAndDistributeMatrix(const M&, M&, C&, C*&, Dune::RedistributeInformation&, int, C1&) [with M = Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >; C = Dune::OwnerOverlapCopyCommunication; C1 = const Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >, Dune::Amg::FirstDiagonal> >]’ /home/dominic/dune/dune-istl/dune/istl/paamg/hierarchy.hh:742:53: required from ‘void Dune::Amg::MatrixHierarchy<M, PI, A>::build(const T&) [with O = Dune::NegateSet<Dune::EnumItem<Dune::OwnerOverlapCopyAttributeSet::AttributeSet, 1> >; T = Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >, Dune::Amg::FirstDiagonal> >; M = Dune::OverlappingSchwarzOperator<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::OwnerOverlapCopyCommunication >; PI = Dune::OwnerOverlapCopyCommunication; A = std::allocator<Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > > >]’ /home/dominic/dune/dune-istl/dune/istl/paamg/amg.hh:472:7: required from ‘void Dune::Amg::AMG<M, X, S, PI, A>::createHierarchies(C&, Dune::Amg::AMG<M, X, S, PI, A>::Operator&, const PI&) [with C = const Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >, Dune::Amg::FirstDiagonal> >; M = Dune::OverlappingSchwarzOperator<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::OwnerOverlapCopyCommunication >; X = Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >; S = Dune::BlockPreconditioner<Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::OwnerOverlapCopyCommunication, Dune::SeqSSOR<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, 1> >; PI = Dune::OwnerOverlapCopyCommunication; A = std::allocator<Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > > >; Dune::Amg::AMG<M, X, S, PI, A>::Operator = Dune::OverlappingSchwarzOperator<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::OwnerOverlapCopyCommunication >]’ /home/dominic/dune/dune-istl/dune/istl/paamg/amg.hh:418:72: required from ‘Dune::Amg::AMG<M, X, S, PI, A>::AMG(const Operator&, const C&, const SmootherArgs&, std::size_t, std::size_t, std::size_t, bool, const PI&) [with C = Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >, Dune::Amg::FirstDiagonal> >; M = Dune::OverlappingSchwarzOperator<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::OwnerOverlapCopyCommunication >; X = Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >; S = Dune::BlockPreconditioner<Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::OwnerOverlapCopyCommunication, Dune::SeqSSOR<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, 1> >; PI = Dune::OwnerOverlapCopyCommunication; A = std::allocator<Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > > >; Dune::Amg::AMG<M, X, S, PI, A>::Operator = Dune::OverlappingSchwarzOperator<Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::BlockVector<Dune::FieldVector<double, 1>, std::allocator<Dune::FieldVector<double, 1> > >, Dune::OwnerOverlapCopyCommunication >; Dune::Amg::AMG<M, X, S, PI, A>::SmootherArgs = Dune::Amg::DefaultSmootherArgs; std::size_t = long unsigned int]’ /home/dominic/dune/dune-istl/dune/istl/paamg/test/parallelamgtest.cc:154:61: required from ‘void testAmg(int, int) [with int BS = 1]’ /home/dominic/dune/dune-istl/dune/istl/paamg/test/parallelamgtest.cc:208:38: required from ‘static void AMGTester<BSStart, BSStart, BSStep>::test(int, int) [with int BSStart = 1; int BSStep = 1]’ /home/dominic/dune/dune-istl/dune/istl/paamg/test/parallelamgtest.cc:233:19: required from here /home/dominic/dune/dune-istl/dune/istl/repartition.hh:1317:58: error: no matching function for call to ‘Dune::{anonymous}::EdgeFunctor<Dune::Amg::PropertiesGraph<Dune::Amg::MatrixGraph<const Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > > >, Dune::Amg::VertexProperties, Dune::Amg::EdgeProperties, Dune::IdentityMap, Dune::IdentityMap> >::EdgeFunctor(Dune::idxtype*&, Dune::{anonymous}::ParmetisDuneIndexMap&, std::size_t)’ EdgeFunctor ef(adjncy, indexMap, graph.noEdges()); ^ /home/dominic/dune/dune-istl/dune/istl/repartition.hh:1317:58: note: candidates are: /home/dominic/dune/dune-istl/dune/istl/repartition.hh:684:7: note: Dune::{anonymous}::EdgeFunctor<Dune::Amg::PropertiesGraph<G, V, E, VM, EM> >::EdgeFunctor(int*, const Dune::{anonymous}::ParmetisDuneIndexMap&, std::size_t) [with G = Dune::Amg::MatrixGraph<const Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > > >; V = Dune::Amg::VertexProperties; E = Dune::Amg::EdgeProperties; VM = Dune::IdentityMap; EM = Dune::IdentityMap; std::size_t = long unsigned int] EdgeFunctor(int* adj, const ParmetisDuneIndexMap& data, std::size_t s) ^ /home/dominic/dune/dune-istl/dune/istl/repartition.hh:684:7: note: no known conversion for argument 1 from ‘Dune::idxtype* {aka long unsigned int*}’ to ‘int*’ /home/dominic/dune/dune-istl/dune/istl/repartition.hh:680:11: note: constexpr Dune::{anonymous}::EdgeFunctor<Dune::Amg::PropertiesGraph<Dune::Amg::MatrixGraph<const Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > > >, Dune::Amg::VertexProperties, Dune::Amg::EdgeProperties, Dune::IdentityMap, Dune::IdentityMap> >::EdgeFunctor(const Dune::{anonymous}::EdgeFunctor<Dune::Amg::PropertiesGraph<Dune::Amg::MatrixGraph<const Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > > >, Dune::Amg::VertexProperties, Dune::Amg::EdgeProperties, Dune::IdentityMap, Dune::IdentityMap> >&) class EdgeFunctor<Dune::Amg::PropertiesGraph<G,V,E,VM,EM> > ^ /home/dominic/dune/dune-istl/dune/istl/repartition.hh:680:11: note: candidate expects 1 argument, 3 provided /home/dominic/dune/dune-istl/dune/istl/repartition.hh:680:11: note: constexpr Dune::{anonymous}::EdgeFunctor<Dune::Amg::PropertiesGraph<Dune::Amg::MatrixGraph<const Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > > >, Dune::Amg::VertexProperties, Dune::Amg::EdgeProperties, Dune::IdentityMap, Dune::IdentityMap> >::EdgeFunctor(Dune::{anonymous}::EdgeFunctor<Dune::Amg::PropertiesGraph<Dune::Amg::MatrixGraph<const Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > > >, Dune::Amg::VertexProperties, Dune::Amg::EdgeProperties, Dune::IdentityMap, Dune::IdentityMap> >&&) /home/dominic/dune/dune-istl/dune/istl/repartition.hh:680:11: note: candidate expects 1 argument, 3 provided /home/dominic/dune/dune-istl/dune/istl/repartition.hh:1318:68: error: no matching function for call to ‘getAdjArrays(const Dune::Amg::PropertiesGraph<Dune::Amg::MatrixGraph<const Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > > >, Dune::Amg::VertexProperties, Dune::Amg::EdgeProperties, Dune::IdentityMap, Dune::IdentityMap>&, const GlobalLookupIndexSet&, Dune::idxtype*&, Dune::{anonymous}::EdgeFunctor<Dune::Amg::PropertiesGraph<Dune::Amg::MatrixGraph<const Dune::BCRSMatrix<Dune::FieldMatrix<double, 1, 1>, std::allocator<Dune::FieldMatrix<double, 1, 1> > > >, Dune::Amg::VertexProperties, Dune::Amg::EdgeProperties, Dune::IdentityMap, Dune::IdentityMap> >&)’ getAdjArrays(graph, oocomm.globalLookup(), xadj, ef); ^ /home/dominic/dune/dune-istl/dune/istl/repartition.hh:1318:68: note: candidate is: /home/dominic/dune/dune-istl/dune/istl/repartition.hh:726:10: note: template<class F, class G, class IS, class EW> void Dune::{anonymous}::getAdjArrays(G&, IS&, int*, EW&) void getAdjArrays(G& graph, IS& indexSet, int xadj, ^ /home/dominic/dune/dune-istl/dune/istl/repartition.hh:726:10: note: template argument deduction/substitution failed: /home/dominic/dune/dune-istl/dune/istl/repartition.hh:1318:68: note: cannot convert ‘xadj’ (type ‘Dune::idxtype {aka long unsigned int*}’) to type ‘int*’ getAdjArrays(graph, oocomm.globalLookup(), xadj, ef); ^ /home/dominic/dune/dune-istl/dune/istl/repartition.hh:1370:122: error: cannot convert ‘Dune::idxtype* {aka long unsigned int*}’ to ‘idxtype* {aka int*}’ for argument ‘2’ to ‘void ParMETIS_V3_PartKway(idxtype*, idxtype*, idxtype*, idxtype*, idxtype*, int*, int*, int*, int*, float*, float*, int*, int*, idxtype*, ompi_communicator_t**)’ &numflag, &ncon, &nparts, tpwgts, ubvec, options, &edgecut, part, &const_cast<MPI_Comm&>(comm)); ^ make[4]: *** [dune/istl/paamg/test/CMakeFiles/pamgtest.dir/parallelamgtest.cc.o] Error 1 make[3]: *** [dune/istl/paamg/test/CMakeFiles/pamgtest.dir/all] Error 2 make[2]: *** [dune/istl/paamg/test/CMakeFiles/_dune_istl_paamg_test.dir/rule] Error 2