idaholab / moose

Multiphysics Object Oriented Simulation Environment
https://www.mooseframework.org
GNU Lesser General Public License v2.1
1.72k stars 1.04k forks source link

Move eigenvalue executioners from Yak to MOOSE #2350

Closed YaqiWang closed 9 years ago

YaqiWang commented 10 years ago

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!

YaqiWang commented 10 years ago

Andrew, the power method I mentioned here is actually the inverse power method, where the minimum eigenvalue is sought.

YaqiWang commented 10 years ago

Some comments on the B kernels (or rhsKernel in Yak):

  1. use auxiliary scalar variable to store the eigenvalue instead of the postprocessors.
  2. kernels corresponding to operator B needs to couple both the eigenvalue and the solution with their current, old and older copies.
  3. Free power iterations required by NonlinearEigenExecutioner means that we need to be able to turn the behavior of B kernels during the runtime, either operate on the old values or on the current values. Currently I am using a problem parameter "onRHS" for this control. The B kernels need to check this control flag during the runtime.
YaqiWang commented 10 years ago

I will be working on this. Hopefully you will see my PR shortly.

permcody commented 9 years ago

Completed