NAFPack_Iterative_types.f90 Source File


This file depends on

sourcefile~~nafpack_iterative_types.f90~~EfferentGraph sourcefile~nafpack_iterative_types.f90 NAFPack_Iterative_types.f90 sourcefile~nafpack_kinds.f90 NAFPack_kinds.f90 sourcefile~nafpack_iterative_types.f90->sourcefile~nafpack_kinds.f90

Files dependent on this one

sourcefile~~nafpack_iterative_types.f90~~AfferentGraph sourcefile~nafpack_iterative_types.f90 NAFPack_Iterative_types.f90 sourcefile~nafpack_iterative_methods.f90 NAFPack_Iterative_methods.f90 sourcefile~nafpack_iterative_methods.f90->sourcefile~nafpack_iterative_types.f90 sourcefile~nafpack_iterative_params.f90 NAFPack_Iterative_Params.f90 sourcefile~nafpack_iterative_methods.f90->sourcefile~nafpack_iterative_params.f90 sourcefile~nafpack_iterative_params.f90->sourcefile~nafpack_iterative_types.f90 sourcefile~nafpack_linalg.f90 NAFPack_linalg.f90 sourcefile~nafpack_linalg.f90->sourcefile~nafpack_iterative_types.f90 sourcefile~nafpack_linalg.f90->sourcefile~nafpack_iterative_methods.f90 sourcefile~nafpack_linalg.f90->sourcefile~nafpack_iterative_params.f90

Source Code

module NAFPack_Iterative_types

    use NAFPack_kinds, only: dp, ucs4

    implicit none(type, external)

    private

    public :: MethodTypeIterative
    public :: METHOD_ITERATIVE_NONE
    public :: METHOD_Jacobi, METHOD_JOR
    public :: METHOD_GAUSS_SEIDEL, METHOD_SOR, METHOD_SSOR
    public :: METHOD_SIP_ILU, METHOD_SIP_ICF
    public :: METHOD_RICHARDSON
    public :: METHOD_CONJUGATE_GRADIENT
    public :: METHOD_CONJUGATE_RESIDUAL
    public :: METHOD_CGNE, METHOD_CGNR
    public :: METHOD_GMRES

    public :: IterativeMethodRequirements

    public :: Norm_used
    public :: NORM_2, NORM_1, NORM_INF

    public :: relaxation_factor_used
    public :: RELAXATION_FACTOR_NONE, RELAXATION_FACTOR_OMEGA, RELAXATION_FACTOR_ALPHA

    integer, parameter :: CK = selected_char_kind('ISO_10646')
    character(KIND=ucs4, LEN=4), parameter :: none = "None"
    character(KIND=ucs4, LEN=1), parameter :: omega = char(int(z'03C9'), ucs4)
    character(KIND=ucs4, LEN=1), parameter :: alpha = char(int(z'03B1'), ucs4)

    type :: MethodTypeIterative
        integer :: id
        character(LEN=64) :: name
        character(LEN=64) :: name2 = ""
    end type MethodTypeIterative

    type :: IterativeMethodRequirements
        logical :: needs_SPD = .false.
        logical :: needs_diag_dom = .false.
        logical :: needs_square = .false.
        logical :: needs_symetric = .false.
    end type IterativeMethodRequirements

    type :: Norm_used
        integer :: id
        character(LEN=64) :: name
    end type Norm_used

    type :: relaxation_factor_used
        integer :: id
        character(KIND=ucs4, LEN=64) :: name
    end type relaxation_factor_used

    type(MethodTypeIterative), parameter :: METHOD_ITERATIVE_NONE = &
                                            MethodTypeIterative(0, &
                                                                "None")
    type(MethodTypeIterative), parameter :: METHOD_Jacobi = &
                                            MethodTypeIterative(1, &
                                                                "Jacobi")
    type(MethodTypeIterative), parameter :: METHOD_GAUSS_SEIDEL = &
                                            MethodTypeIterative(2, &
                                                                "Gauss-Seidel")
    type(MethodTypeIterative), parameter :: METHOD_SOR = &
                                            MethodTypeIterative(3, &
                                                                "Successive Over-Relaxation")
    type(MethodTypeIterative), parameter :: METHOD_JOR = &
                                            MethodTypeIterative(4, &
                                                                "Jacobi Over-Relaxation")
    type(MethodTypeIterative), parameter :: METHOD_SIP_ILU = &
                                            MethodTypeIterative(5, &
                                                                "Strongly Implicit Procedure", &
                                                                "ILU")
    type(MethodTypeIterative), parameter :: METHOD_SIP_ICF = &
                                            MethodTypeIterative(6, &
                                                                "Strongly Implicit Procedure", &
                                                                "ICF")
    type(MethodTypeIterative), parameter :: METHOD_SSOR = &
                                            MethodTypeIterative(7, &
                                                                "Symmetric Successive &
                                                                &Over-Relaxation")
    type(MethodTypeIterative), parameter :: METHOD_RICHARDSON = &
                                            MethodTypeIterative(8, &
                                                                "Richardson")
    type(MethodTypeIterative), parameter :: METHOD_CONJUGATE_GRADIENT = &
                                            MethodTypeIterative(9, &
                                                                "Conjugate Gradient")
    type(MethodTypeIterative), parameter :: METHOD_CONJUGATE_RESIDUAL = &
                                            MethodTypeIterative(10, &
                                                                "Conjugate Residual")
    type(MethodTypeIterative), parameter :: METHOD_CGNE = &
                                            MethodTypeIterative(11, &
                                                                "Conjugate Gradient on &
                                                                &Normal Equations")
    type(MethodTypeIterative), parameter :: METHOD_CGNR = &
                                            MethodTypeIterative(12, &
                                                                "Conjugate Gradient on &
                                                                &Normal Residual")
    type(MethodTypeIterative), parameter :: METHOD_GMRES = &
                                            MethodTypeIterative(13, &
                                                                "Generalized Minimal Residual")

    type(Norm_used), parameter :: NORM_2 = Norm_used(1, "Norm L2 or Euclidean")
    type(Norm_used), parameter :: NORM_1 = Norm_used(2, "Norm L1 or Manhattan")
    type(Norm_used), parameter :: NORM_INF = Norm_used(3, "Norm LInfini or Maximum")

    type(relaxation_factor_used), parameter :: RELAXATION_FACTOR_NONE = &
                                               relaxation_factor_used(0, none)
    type(relaxation_factor_used), parameter :: RELAXATION_FACTOR_OMEGA = &
                                               relaxation_factor_used(1, omega)
    type(relaxation_factor_used), parameter :: RELAXATION_FACTOR_ALPHA = &
                                               relaxation_factor_used(2, alpha)

end module NAFPack_Iterative_types