Read the eigval_knobs namelist
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(eigval_config_type), | intent(in), | optional | :: | eigval_config_in |
subroutine read_parameters(eigval_config_in)
use file_utils, only: error_unit
use text_options, only: text_option, get_option_value
implicit none
type(eigval_config_type), intent(in), optional :: eigval_config_in
!NOTE: text_option is case sensitive (currently)
type(text_option), dimension(18), parameter :: solver_type_opts = &
(/&
text_option('slepc_default',SolverTypeNotSpecified),&
text_option('default',SolverTypeKrylovSchur),&
text_option('power',SolverTypePower),&
text_option('subspace',SolverTypeSubspace),&
text_option('arnoldi',SolverTypeArnoldi),&
text_option('lanczos',SolverTypeLanczos),&
text_option('krylov',SolverTypeKrylovSchur),&
text_option('GD',SolverTypeGD),&
text_option('JD',SolverTypeJD),&
text_option('RQCG',SolverTypeRQCG),&
text_option('CISS',SolverTypeCISS),&
text_option('lapack',SolverTypeLapack),&
text_option('arpack',SolverTypeArpack),&
text_option('blzpack',SolverTypeBlzpack),&
text_option('trlan',SolverTypeTrlan),&
text_option('blopex',SolverTypeBlopex),&
text_option('primme',SolverTypePrimme),&
text_option('feast',SolverTypeFeast)&
/)
type(text_option), dimension(9), parameter :: extraction_type_opts = &
(/&
text_option('slepc_default',ExtractionNotSpecified),&
text_option('default',ExtractionNotSpecified),&
text_option('ritz',ExtractionRitz),&
text_option('harmonic',ExtractionHarmonic),&
text_option('harmonic_relative',ExtractionHarmonicRelative),&
text_option('harmonic_right',ExtractionHarmonicRight),&
text_option('harmonic_largest',ExtractionHarmonicLargest),&
text_option('refined',ExtractionRefined),&
text_option('refined_harmonic',ExtractionRefinedHarmonic)&
/)
type(text_option), dimension(13), parameter :: which_type_opts = &
(/&
text_option('slepc_default',WhichNotSpecified),&
text_option('default',WhichTargetMagnitude),&
text_option('largest_magnitude',WhichLargestMagnitude),&
text_option('smallest_magnitude',WhichSmallestMagnitude),&
text_option('largest_real',WhichLargestReal),&
text_option('smallest_real',WhichSmallestReal),&
text_option('largest_imaginary',WhichLargestImaginary),&
text_option('smallest_imaginary',WhichSmallestImaginary),&
text_option('target_magnitude',WhichTargetMagnitude),&
text_option('target_real',WhichTargetReal),&
text_option('target_imaginary',WhichTargetImaginary),&
text_option('all',WhichAll),&
text_option('user',WhichUser)&
/)
type(text_option), dimension(8), parameter :: transform_type_opts = &
(/&
text_option('slepc_default',TransformNotSpecified),&
text_option('default',TransformNotSpecified),&
text_option('shell',TransformShell),&
text_option('shift',TransformShift),&
text_option('invert',TransformInvert),&
text_option('cayley',TransformCayley),&
text_option('fold',TransformFold),&
text_option('precond',TransformPrecond)&
/)
character(len=20) :: solver_option, extraction_option, which_option, transform_option
integer :: ierr
if (present(eigval_config_in)) eigval_config = eigval_config_in
call eigval_config%init(name = 'eigval_knobs', requires_index = .false.)
! Copy out internal values into module level parameters
associate(self => eigval_config)
#include "eigval_copy_out_auto_gen.inc"
end associate
!Get error unit for output
ierr = error_unit()
!Convert string options to integer flags
call get_option_value &
(solver_option,solver_type_opts,solver_option_switch,&
ierr,"solver_option in "//nml_name,.true.)
call get_option_value &
(extraction_option,extraction_type_opts,extraction_option_switch,&
ierr,"extraction_option in "//nml_name,.true.)
call get_option_value &
(which_option,which_type_opts,which_option_switch,&
ierr,"which_option in "//nml_name,.true.)
call get_option_value &
(transform_option,transform_type_opts,transform_option_switch,&
ierr,"transform_option in "//nml_name,.true.)
end subroutine read_parameters