Skip to content

#1467 GMRes an MINRes broken for complex in master

Metadata

Property Value
Reported by Markus Blatt (markus@dr-blatt.de)
Reported at May 22, 2014 13:46
Type Bug Report
Version Git (pre2.4) [autotools]
Operating System Unspecified / All
Last edited by Steffen Müthing (steffen.muething@iwr.uni-heidelberg.de)
Last edited at Jun 12, 2014 09:45
Closed by Steffen Müthing (steffen.muething@iwr.uni-heidelberg.de)
Closed at Jun 12, 2014 09:45
Closed in version Unknown
Resolution Fixed
Comment Fixed in 1fdbfda22f94c604fd3a4d526535000bf6ef176f

Description

at least with g++4.4 the tests do not compile any more. Might this have to do with merging the gmres-fix branch?

In file included from complexrhstest.cc:18: ../../../dune/istl/solvers.hh: In member function ‘void Dune::MINRESSolver::apply(X&, X&, Dune::InverseOperatorResult&) [with X = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >]’: complexrhstest.cc:78: instantiated from ‘bool SolverTest<Operator, Vector>::operator()(Solver&) [with Solver = main(int, char**)::MINRES, Operator = Dune::MatrixAdapter<Dune::BCRSMatrix<Dune::FieldMatrix<std::complex, 1, 1>, std::allocator<Dune::FieldMatrix<std::complex, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >, Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > > >, Vector = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >]’ complexrhstest.cc:239: instantiated from here ../../../dune/istl/solvers.hh:869: error: no match for ‘operator<’ in ‘def0 < 1.00000000000000008333642060758598535093133602686865450236e-30’ complexrhstest.cc:78: instantiated from ‘bool SolverTest<Operator, Vector>::operator()(Solver&) [with Solver = main(int, char**)::MINRES, Operator = Dune::MatrixAdapter<Dune::BCRSMatrix<Dune::FieldMatrix<std::complex, 1, 1>, std::allocator<Dune::FieldMatrix<std::complex, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >, Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > > >, Vector = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >]’ complexrhstest.cc:239: instantiated from here ../../../dune/istl/solvers.hh:989: error: no match for ‘operator<’ in ‘def < 1.00000000000000008333642060758598535093133602686865450236e-30’ complexrhstest.cc:78: instantiated from ‘bool SolverTest<Operator, Vector>::operator()(Solver&) [with Solver = main(int, char**)::MINRES, Operator = Dune::MatrixAdapter<Dune::BCRSMatrix<Dune::FieldMatrix<std::complex, 1, 1>, std::allocator<Dune::FieldMatrix<std::complex, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >, Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > > >, Vector = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >]’ complexrhstest.cc:239: instantiated from here ../../../dune/istl/solvers.hh:989: error: no match for ‘operator<’ in ‘def < std::operator* [with _Tp = double](((const std::complex&)((const std::complex*)(& def0))), ((const double&)((const double*)(&((Dune::MINRESSolver<Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > > >*)this)->Dune::MINRESSolver<Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > > >::_reduction))))’ complexrhstest.cc:78: instantiated from ‘bool SolverTest<Operator, Vector>::operator()(Solver&) [with Solver = main(int, char**)::MINRES, Operator = Dune::MatrixAdapter<Dune::BCRSMatrix<Dune::FieldMatrix<std::complex, 1, 1>, std::allocator<Dune::FieldMatrix<std::complex, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >, Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > > >, Vector = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >]’ complexrhstest.cc:239: instantiated from here ../../../dune/istl/solvers.hh:1002: error: cannot convert ‘std::complex’ to ‘double’ in assignment ../../../dune/istl/solvers.hh: In member function ‘void Dune::MINRESSolver::generateGivensRotation(typename X::field_type&, typename X::field_type&, typename X::field_type&, typename X::field_type&) [with X = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >]’: ../../../dune/istl/solvers.hh:962: instantiated from ‘void Dune::MINRESSolver::apply(X&, X&, Dune::InverseOperatorResult&) [with X = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >]’ complexrhstest.cc:78: instantiated from ‘bool SolverTest<Operator, Vector>::operator()(Solver&) [with Solver = main(int, char**)::MINRES, Operator = Dune::MatrixAdapter<Dune::BCRSMatrix<Dune::FieldMatrix<std::complex, 1, 1>, std::allocator<Dune::FieldMatrix<std::complex, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >, Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > > >, Vector = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >]’ complexrhstest.cc:239: instantiated from here ../../../dune/istl/solvers.hh:1032: error: no match for ‘operator<’ in ‘temp < 9.99999999999999979097786724034603561841114940846736436342e-17’ ../../../dune/istl/solvers.hh:1036: error: no match for ‘operator>’ in ‘temp > std::abs [with _Tp = double](((const std::complex&)((const std::complex*)dx)))’ ../../../dune/istl/solvers.hh: In member function ‘void Dune::RestartedGMResSolver<X, Y, F>::generatePlaneRotation(typename X::field_type&, typename X::field_type&, typename X::field_type&, typename X::field_type&) [with X = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >, Y = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >, F = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >]’: ../../../dune/istl/solvers.hh:1247: instantiated from ‘void Dune::RestartedGMResSolver<X, Y, F>::apply(X&, Y&, double, Dune::InverseOperatorResult&) [with X = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >, Y = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >, F = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >]’ ../../../dune/istl/solvers.hh:1159: instantiated from ‘void Dune::RestartedGMResSolver<X, Y, F>::apply(X&, Y&, Dune::InverseOperatorResult&) [with X = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >, Y = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >, F = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >]’ complexrhstest.cc:78: instantiated from ‘bool SolverTest<Operator, Vector>::operator()(Solver&) [with Solver = main(int, char**)::GMRES, Operator = Dune::MatrixAdapter<Dune::BCRSMatrix<Dune::FieldMatrix<std::complex, 1, 1>, std::allocator<Dune::FieldMatrix<std::complex, 1, 1> > >, Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >, Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > > >, Vector = Dune::BlockVector<Dune::FieldVector<std::complex, 1>, std::allocator<Dune::FieldVector<std::complex, 1> > >]’ complexrhstest.cc:243: instantiated from here ../../../dune/istl/solvers.hh:1346: error: no match for ‘operator>’ in ‘temp > std::abs [with _Tp = double](((const std::complex&)((const std::complex*)dx)))’ make[4]: *** [complexrhstest-complexrhstest.o] Fehler 1 make[4]: Leaving directory /home/mblatt/buildbot-slave1/DUNE-1/git/master/dune-istl/dune/istl/test' make[3]: *** [check-am] Fehler 2 make[3]: Leaving directory /home/mblatt/buildbot-slave1/DUNE-1/git/master/dune-istl/dune/istl/test' make[2]: *** [check-recursive] Fehler 1