Employ the eigenvalue solver to seek eigenmodes using SLEPc
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(gs2_program_state_type), | intent(inout) | :: | state |
subroutine run_eigensolver(state)
#ifdef WITH_EIG
#ifdef FIELDS_EIG
use fields_eigval, only: init_eigval, finish_eigval, BasicSolve
#else
use eigval, only: init_eigval, finish_eigval, BasicSolve
#endif
#endif
use job_manage, only: time_message
use mp, only: mp_abort
type(gs2_program_state_type), intent(inout) :: state
if (.not. state%included) return
#ifdef WITH_EIG
call time_message(.false.,state%timers%total,' Total')
!Start timer
call time_message(.false.,state%timers%eigval,' Eigensolver')
!Initialise slepc and the default/input eigensolver parameters
call init_eigval
!Create a solver based on input paramters, use it to solve and
!then destroy it.
call BasicSolve
!Tidy up
call finish_eigval
!Stop timer
call time_message(.false.,state%timers%eigval,' Eigensolver')
#else
call mp_abort("Eigensolver requires GS2 to be built with slepc/petsc", .true.)
#endif
call time_message(.false.,state%timers%total,' Total')
end subroutine run_eigensolver