#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