Calculate_SOR_preconditioner Function

public function Calculate_SOR_preconditioner(A, omega, alpha) result(L)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in), DIMENSION(:, :) :: A
real(kind=dp), intent(in) :: omega
real(kind=dp), intent(in) :: alpha

Return Value real(kind=dp), DIMENSION(SIZE(A, 1), SIZE(A, 2))


Calls

proc~~calculate_sor_preconditioner~~CallsGraph proc~calculate_sor_preconditioner Calculate_SOR_preconditioner proc~diag Diag proc~calculate_sor_preconditioner->proc~diag

Source Code

    FUNCTION Calculate_SOR_preconditioner(A, omega, alpha) RESULT(L)
        REAL(dp), DIMENSION(:, :), INTENT(IN) :: A
        REAL(dp), INTENT(IN) :: omega, alpha
        REAL(dp), DIMENSION(SIZE(A, 1), SIZE(A, 2)) :: L
        INTEGER :: N, i

        N = SIZE(A, 1)

        L = 0.d0

        IF (ANY(Diag(A) < epsi)) STOP "ERROR :: Zero diagonal in SOR preconditioner"
        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)
        END DO

        L = alpha * L

    END FUNCTION Calculate_SOR_preconditioner