-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Enable an eigenvalue-solver package, SLEPc, in MOOSE #7398
Comments
Let's chat about this next week at the Tiger Team. |
@fdkong - you don't need to assign it to us. The assignees for an issue are the people who are working the issue. If you just want comments, tagging us is all you need. The assignee (is anyone) should probably be you if you are planning to work this. |
Thanks, @permcody. The assignee is me right now, and I am planning to work on this issue. |
Thanks for working on this! We do need a cleaner implementation of the eigen executioners. Also we want more solving options in case the existing two eigen solvers do not perform well for certain problems. In summary, this issue is very important to us! Should you have any questions, feel free to stop by. Once we finish this, we can create a patch in Rattlesnake. This patch is going to be big because Rattlesnake heavily relies on the MOOSE eigen executioners. I hope this refactoring will make the executioners more useful to other physics. |
There is already a class called EigenSystem in LibMesh. Renamed EigenSystem to MooseEigenSystem to resolve the name confict because we are going to bring the libmesh EigenSystem into moose. Refs idaholab#7398
to allow us to derive EigenSystem from Libmesh. To achieve this goal, the following steps will be taken: (1) Rename NonlinearSystem to NonlinearSystemBase (2) Create a new class NonlinearSystem deriving from the class NonlinearSystemBase (3) Change the inheritance of the class MooseEigenSystem. MooseEigenSystem should derive from the class NonlinearSystemBase instead of the class NonlinearSystem (4) Move some functions specified for the NonlinearSystem only from the NonlinearSystemBase to the class NonlinearSystem (5) Enable SystemTempl<EigenSystem> to bring SLEPc from Libmesh In this PR, we finished steps (1) and (2). Refs idaholab#7398
to allow us to derive EigenSystem from Libmesh. To achieve this goal, the following steps will be taken: (1) Rename NonlinearSystem to NonlinearSystemBase (2) Create a new class NonlinearSystem deriving from the class NonlinearSystemBase (3) Change the inheritance of the class MooseEigenSystem. MooseEigenSystem should derive from the class NonlinearSystemBase instead of the class NonlinearSystem (4) Move some functions specified for the NonlinearSystem only from the NonlinearSystemBase to the class NonlinearSystem (5) Enable SystemTempl<EigenSystem> to bring SLEPc from Libmesh In this PR, we finished steps (1) and (2). Refs idaholab#7398
ThreadedElementLoop does not necessarily depend on System. Refs idaholab#7398 idaholab#7654
Remove NonlinearSystem/AxiliarySystem from constructors as long as FEProblem is also an input parameter. Nonlinearsystem and AxiliarSystem can be retreived from FEProblem. Refs idaholab#7398 idaholab#7654
Remove NonlinearSystem/AxiliarySystem from constructors as long as FEProblem is also an input parameter. Nonlinearsystem and AxiliarSystem can be retreived from FEProblem. Refs idaholab#7398 idaholab#7654
Remove NonlinearSystem/AxiliarySystem from constructors as long as FEProblem is also an input parameter. Nonlinearsystem and AxiliarSystem can be retreived from FEProblem. Refs idaholab#7398 idaholab#7654
Remove NonlinearSystem/AxiliarySystem from constructors as long as FEProblem is also an input parameter. Nonlinearsystem and AxiliarSystem can be retreived from FEProblem. Refs idaholab#7398 idaholab#7654
Move SystemTempl into NonlinearSystem to make AssemblySystem independent. Any functions which depends on SysBase and SystemTempl, are moved back to NonlinearSystem. Refs idaholab#7398 idaholab#7654
Move SystemTempl into NonlinearSystem to make AssemblySystem independent. Any functions which depends on SysBase and SystemTempl, are moved back to NonlinearSystem. Refs idaholab#7398 idaholab#7654
Moved all functions which depends on System (libmesh) only into SystemBase Refs idaholab#7762 idaholab#7654 idaholab#7398
and restoreSolutions. In these functions, we do not directly use member variables any more, instead, we call member functions (pure functions) to access solutions (at current step, previous time steps). This allows sub-classes to specify their own implementation. Refs idaholab#7762 idaholab#7654 idaholab#7398
Removed SystemTmpl from NonlinearSystem, and implemented functions: solution(), solutionOld(), solutionOlder(), sys() and system(). Refs idaholab#7762 idaholab#7654 idaholab#7398
In order to get the best performance, users should use petsc-3.13 or higher Closes idaholab#7398
In order to get the best performance, users should use petsc-3.13 or higher Closes idaholab#7398
In order to get the best performance, users should use petsc-3.13 or higher Closes idaholab#7398
In order to get the best performance, users should use petsc-3.13 or higher Closes idaholab#7398
In order to get the best performance, users should use petsc-3.13 or higher Closes idaholab#7398
In order to get the best performance, users should use petsc-3.13 or higher Closes idaholab#7398
In order to get the best performance, users should use petsc-3.13 or higher Closes idaholab#7398
In order to get the best performance, users should use petsc-3.13 or higher Closes idaholab#7398
In order to get the best performance, users should use petsc-3.13 or higher Closes idaholab#7398
In order to get the best performance, users should use petsc-3.13 or higher Closes idaholab#7398
Description of the enhancement or error report
There are two eigenvalue solvers implemented by @YaqiWang in MOOSE right now; the power method and the nonlinear solver (forming the eigenvalue problem as a regular nonlinear problem). Two solvers work well for the largest/smallest eigenvalue, but they are not enough for other general problems that require more than one eigenpairs. There are also other issues regarding the implementation: (1) it is not easy to maintain because the eigenvalue solver messes up with physics; (2) Kernels are not organized well, which could result in many duplicated kernels for the left hand size operator A and the right hand size operator B (generalized eigenvalue problems Ax=\lambda Bx).
We are improving the implementation by separating the eigenvalue solver from MOOSE by taking advantage of SLEPc which has many eigenvalue algorithms for different problems. Kernel Warehouse should be somehow reorganized so that we compute the right kernels and the left kernels separately. We will allow to form A and B in a matrix-free manner. Users possibly just provide some similar functions as the nonlinear residual evaluations for the matrix-vector multiplication. To implement this, a subclass inheriting from ShellMatrix in Libmesh will be added.
Executioner should be improved so that we could either solve a nonlinear problem or an eigenvalue problem or both during each time step. Asking suggestions from @friedmud.
@YaqiWang possibly has more things to add here.
The system hierarchy and problem hierarchy will be like:
The text was updated successfully, but these errors were encountered: