arfc / moltres

Repository for Moltres, a code for simulating Molten Salt Reactors
GNU Lesser General Public License v2.1
66 stars 41 forks source link

Add support for `Eigenvalue` eigensolver #177

Closed smpark7 closed 6 months ago

smpark7 commented 2 years ago

This issue can be closed when NtAction supports using the Eigenvalue executioner and new tests are added for criticality search using Eigenvalue.

Our existing framework for solving criticality search problems involve using the NonlinearEigen or InversePowerMethod executioners. These executioners require EigenKernels for the neutron source terms, namely the CoupledFissionEigenKernel and DelayedNeutronEigenSource.

NonlinearEigen and InversePowerMethod still exist, but are now deprecated in favor of the new Eigenvalue executioner. However, the Eigenvalue executioner requires:

  1. SLEPc and PETSc version > 3.13 for optimal solve convergence performance (The cray-optimized PETSc on Blue Waters is only 3.9.3.0)
  2. regular Kernels for the neutron source terms with extra_vector_tags = 'eigen', which means we have to edit our automated initializer NtAction.

While it's technically possible to use the Eigenvalue executioner in Moltres right now, it would be a tedious process of manually writing the variable, kernel, BC, etc. objects for all neutron groups because NtAction does not support the right format for Eigenvalue.

We can't completely remove support for the deprecated Executioners at this moment because cray-petsc on Blue Waters is only at 3.9.3.0 and we need Blue Waters for large simulations which need more memory/computing power.

smpark7 commented 1 year ago

PETSc compatibility is no longer an issue since Blue Waters was decommissioned.

PR #228 fixes this issue, but it will not be merged until issues with the new Eigenvalue executioner are ironed out.