Calculate_SSOR_preconditioner Subroutine

public subroutine Calculate_SSOR_preconditioner(A, L, D, omega, alpha)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in), dimension(:, :) :: A
real(kind=dp), intent(out), dimension(size(A, 1), size(A, 2)) :: L
real(kind=dp), intent(out), dimension(size(A, 1), size(A, 2)) :: D
real(kind=dp), intent(in) :: omega
real(kind=dp), intent(in) :: alpha

Source Code

    subroutine Calculate_SSOR_preconditioner(A, L, D, omega, alpha)
        real(dp), dimension(:, :), intent(in) :: A
        real(dp), intent(in) :: omega, alpha
        real(dp), dimension(size(A, 1), size(A, 2)), intent(out) :: L, D
        integer :: N, i

        N = size(A, 1)

        L = 0.d0
        D = 0.d0

        do i = 1, size(A, 1)
            L(i, i) = 1.d0 / omega * A(i, i)
            L(i, 1:i - 1) = A(i, 1:i - 1)

            D(i, i) = A(i, i)
        end do

        L = (alpha * omega) / (2 - omega) * L

    end subroutine Calculate_SSOR_preconditioner