fffc_linalg_inv.F90 Source File


Contents

Source Code


Source Code

#ifdef REAL64
#define sgetrf dgetrf
#define sgetri dgetri
#define cgetrf zgetrf
#define cgetri zgetri
#endif
submodule(fffc_linalg) fffc_linalg_inv
contains
    module procedure inv_real_kind
        integer :: ipiv(size(a, 1)), info
        real(kind=fffc_real_kind) :: work(size(a, 2))
        call sgetrf(size(a, 1), size(a, 2), a, size(a, 1), ipiv, info)
        call sgetri(size(a, 2), a, size(a, 1), ipiv, work, size(work), info)
    end procedure inv_real_kind
    module procedure inv_complex_kind
        integer :: ipiv(size(a, 1)), info
        complex(kind=fffc_complex_kind) :: work(size(a, 2))
        call cgetrf(size(a, 1), size(a, 2), a, size(a, 1), ipiv, info)
        call cgetri(size(a, 2), a, size(a, 1), ipiv, work, size(work), info)
    end procedure inv_complex_kind
end submodule fffc_linalg_inv