Closed YaqiWang closed 9 years ago
Andrew, the power method I mentioned here is actually the inverse power method, where the minimum eigenvalue is sought.
Some comments on the B kernels (or rhsKernel in Yak):
I will be working on this. Hopefully you will see my PR shortly.
Completed
The generalized eigenvalue problem can be expressed as A_x = k_B*x, where k is the eigenvalue, x is the solution vector, matrix A and B correspond two sets of kernels.
There are essentially two eigenvalue executioners inside Yak right now: PowerMethodExeutioner and NonlinearEigenExecutioner. As the name suggested, PowerMethodExecutioner uses the inverse power method to find the minimum eigenvalue and the corresponding eigenvector, and NonlinearEigenExecutioner uses JFNK to solve the eigenvalue problem.
While PowerMethodExeucitioner is simple, in which we just need to make the set of kernels corresponding to B operates on the old solution vector, NonlinearEigenExecutioner is not that simple. NonlinearEigenExecutioner requires a good initial guess on k and x, so that the converged solution is the minimum eigenvalue and its eigenvector. This initial guess is typically obtained by doing few power iterations at the beginning. This poses a difficulty on the implementation with MOOSE, because now the set of kernels for B will operate on old solution vector at the beginning during the free power iterations and operate on the current solution during the nonlinear solve later. We need this NonlinearEigenExecutioner to get the solution faster than PowerMethodExecutioner most of times.
Another option on eigenvalue executioner is using arpack or Slepsc. But power method and nonlinear executioners still have their merit because they runs faster by considering only the fundamental mode (the minimum eigenvalue).
These executioners are frequently affected by MOOSE updates and are hard to maintain by developers other than MOOSE developers. Also having these executioners inside MOOSE will benefit lots of users who may be also interested in solving eigenvalue problems.
Thanks!