Dear Bruno,
I've used ARPACK and the computation time has dropped signifficantly. But I have some strange results, I have following code:
IterationNumberControl arpack_control(30, 1e-8);
typename ArpackSolver::AdditionalData arpack_data_smallest(30,
ArpackSolver:: smallest_magnitude,
false);
typename ArpackSolver::AdditionalData arpack_data_largest(30,
ArpackSolver:: largest_magnitude,
false);
ArpackSolver arpack_smallest (arpack_control,arpack_data_smallest);
arpack_smallest.solve(shat,mass, s_hatS_inverse, eigenvalues, eigenvectors_small, 1 );
pcout<<"\t Aparck small "<<"coverged in "
<<arpack_control.last_step()<<"\t "
<<" Residual: "
<< arpack_control.last_value()<< " \t eigenvalue: "<< eigenvalues[0]<<std::endl;
std::vector< LevelVectorType > eigenvectors_large(2, rhs);
ArpackSolver arpack_largest (arpack_control,arpack_data_largest);
arpack_largest.solve(shat,mass, s_hatS_inverse, eigenvalues, eigenvectors_large, 1 );
pcout<<"\t Aparck large "<<"coverged in "
<<arpack_control.last_step()<<"\t "
<<" Residual: "
<< arpack_control.last_value()<< " \t eigenvalue: "<< eigenvalues[0]<<std::endl;
typename EigenPower<LevelVectorType>::AdditionalData data(0.);
EigenPower<LevelVectorType> eigen(solver_control_eigen,mem,data );
double l_max=1;
double l_min=0;
// rhs=1; //starting from 1 gives same results
rhs= eigenvectors_large[0];
internal::PreconditionChebyshevImplementation::set_initial_guess(rhs);
eigen.solve(l_max,shat, rhs );
sol=1;
pcout<<"\t Eigen power "<<"coverged in "
<<solver_control_eigen.last_step()<<"\t "
<<" Residual: "
<< solver_control_eigen.last_value()<<std::endl;
The output is:
Aparck small coverged in 4294967295 Residual: nan eigenvalue: (1.17207,0)
Aparck large coverged in 4294967295 Residual: nan eigenvalue: (0.714841,0)
Eigen power coverged in 29 Residual: 8.71076e-05
Eigen value:1.17147
1) The number of iterations and residual are obviously strange. I guess that ARPACK solver does not update SlolverControl object
2) The largest eigenvalue is computed instead of the largest one, and, I guess, the smallest eigenvalue is computed instead of the largest one.
3) I get complex eigenvalues in some cases and I am quite sure, that all eigenvalues of the system are real.
Michał