numeric_matrices.f90 Source File


Contents

Source Code


Source Code

module foreng_numeric_matrices

use foreng_env

! This module provides an interface for a variety of different elimination methods
! to solve systems of linear equations.

INTERFACE gauss_elim

    MODULE PROCEDURE gauss_elim_sing_32
    MODULE PROCEDURE gauss_elim_sing_64
    MODULE PROCEDURE gauss_elim_sing_128

    MODULE PROCEDURE gauss_elim_mult_32
    MODULE PROCEDURE gauss_elim_mult_64
    MODULE PROCEDURE gauss_elim_mult_128

    ! ERROR RETURNS:
    !----------------
    ! 111 - Error allocating memory for augmented matrix
    ! 999 - Nonsingular matrix

END INTERFACE 

INTERFACE inverse

    MODULE PROCEDURE gauss_elim_inverse_32
    MODULE PROCEDURE gauss_elim_inverse_64
    MODULE PROCEDURE gauss_elim_inverse_128

END INTERFACE 

INTERFACE lu

    MODULE PROCEDURE lu_decomp_32
    MODULE PROCEDURE lu_decomp_64
    MODULE PROCEDURE lu_decomp_128

END INTERFACE

INTERFACE eliminate_column

    MODULE PROCEDURE eliminate_column_32
    MODULE PROCEDURE eliminate_column_64
    MODULE PROCEDURE eliminate_column_128 

END INTERFACE


INTERFACE  ! Explicit declaration of gauss elimination functions

    MODULE FUNCTION gauss_elim_sing_32(A, b) RESULT(x)

        REAL(real32), DIMENSION(:,:), INTENT(IN) :: A            ! System of linear equations
        REAL(real32), DIMENSION(size(A,DIM=1)), INTENT(IN) :: b  ! RHS of the equation Ax = b
        REAL(real32), DIMENSION(size(A,DIM=1)) :: x              ! Solution to the system of equations

    END FUNCTION

    MODULE FUNCTION gauss_elim_sing_64(A, b) RESULT(x)

        REAL(real64), DIMENSION(:,:), INTENT(IN) :: A            ! System of linear equations
        REAL(real64), DIMENSION(size(A,DIM=1)), INTENT(IN) :: b  ! RHS of the equation Ax = b
        REAL(real64), DIMENSION(size(A,DIM=1)) :: x              ! Solution to the system of equations

    END FUNCTION

    MODULE FUNCTION gauss_elim_sing_128(A, b) RESULT(x)

        REAL(real128), DIMENSION(:,:), INTENT(IN) :: A            ! System of linear equations
        REAL(real128), DIMENSION(size(A,DIM=1)), INTENT(IN) :: b  ! RHS of the equation Ax = b
        REAL(real128), DIMENSION(size(A,DIM=1)) :: x  ! Solution to the system of equations

    END FUNCTION

    MODULE FUNCTION gauss_elim_mult_32(A, b) RESULT(x)

        
        REAL(real32), DIMENSION(:,:), INTENT(IN) :: A               ! System of linear equations
        REAL(real32), DIMENSION(:,:), INTENT(IN) :: b               ! RHS of the equation Ax = b
        REAL(real32), DIMENSION(size(A,DIM=1), size(b,DIM=2)) :: x  ! Solution to the system of equations

    END FUNCTION

    MODULE FUNCTION gauss_elim_mult_64(A, b) RESULT(x)

        
        REAL(real64), DIMENSION(:,:), INTENT(IN) :: A               ! System of linear equations
        REAL(real64), DIMENSION(:,:), INTENT(IN) :: b               ! RHS of the equation Ax = b
        REAL(real64), DIMENSION(size(A,DIM=1), size(b,DIM=2)) :: x  ! Solution to the system of equations

    END FUNCTION

    MODULE FUNCTION gauss_elim_mult_128(A, b) RESULT(x)

        
        REAL(real128), DIMENSION(:,:), INTENT(IN) :: A              ! System of linear equations
        REAL(real128), DIMENSION(:,:), INTENT(IN) :: b              ! RHS of the equation Ax = b
        REAL(real128), DIMENSION(size(A,DIM=1), size(b,DIM=2)) :: x ! Solution to the system of equations

    END FUNCTION

    MODULE FUNCTION gauss_elim_inverse_32(A) RESULT(A_inv)

        REAL(real32), DIMENSION(:,:), INTENT(IN) :: A
        REAL(real32), DIMENSION(size(A, DIM=1), size(A,DIM=1)) :: A_inv

    END FUNCTION

    MODULE FUNCTION gauss_elim_inverse_64(A) RESULT(A_inv)

        REAL(real64), DIMENSION(:,:), INTENT(IN) :: A
        REAL(real64), DIMENSION(size(A, DIM=1), size(A,DIM=1)) :: A_inv

    END FUNCTION

    MODULE FUNCTION gauss_elim_inverse_128(A) RESULT(A_inv)

        REAL(real128), DIMENSION(:,:), INTENT(IN) :: A
        REAL(real128), DIMENSION(size(A, DIM=1), size(A,DIM=1)) :: A_inv

    END FUNCTION

    MODULE SUBROUTINE eliminate_column_32(A, icol, order)

        REAL(real32), DIMENSION(:,:), INTENT(INOUT) :: A
        INTEGER, INTENT(IN) :: icol
        INTEGER, DIMENSION(:), INTENT(INOUT) :: order

    END SUBROUTINE

    MODULE SUBROUTINE eliminate_column_64(A, icol, order)

        REAL(real64), DIMENSION(:,:), INTENT(INOUT) :: A
        INTEGER, INTENT(IN) :: icol
        INTEGER, DIMENSION(:), INTENT(INOUT) :: order

    END SUBROUTINE

    MODULE SUBROUTINE eliminate_column_128(A, icol, order)

        REAL(real128), DIMENSION(:,:), INTENT(INOUT) :: A
        INTEGER, INTENT(IN) :: icol
        INTEGER, DIMENSION(:), INTENT(INOUT) :: order

    END SUBROUTINE

    MODULE SUBROUTINE lu_decomp_32(A, L, U)

        REAL(real32), DIMENSION(:,:), INTENT(IN) :: A
        REAL(real32), DIMENSION(:,:), ALLOCATABLE, INTENT(OUT) :: L, U

    END SUBROUTINE

    MODULE SUBROUTINE lu_decomp_64(A, L, U)

        REAL(real64), DIMENSION(:,:), INTENT(IN) :: A
        REAL(real64), DIMENSION(:,:), ALLOCATABLE, INTENT(OUT) :: L, U

    END SUBROUTINE

    MODULE SUBROUTINE lu_decomp_128(A, L, U)

        REAL(real128), DIMENSION(:,:), INTENT(IN) :: A
        REAL(real128), DIMENSION(:,:), ALLOCATABLE, INTENT(OUT) :: L, U

    END SUBROUTINE

END INTERFACE

end module