linalg_inv_triang.f90 Source File


Source Code

!-------------------------------------------------------------------------------------------
!PURPOSE  : Invert a general triangular m*n matrix using LAPACK library 
! M is destroyed and replaces by its inverse M^-1
! M on output is the square matrix n*n
!-------------------------------------------------------------------------------------------
subroutine Dinv_triang(A,uplo,diag)
  real(8),dimension(:,:)           :: A
  character(len=1),optional        :: uplo,diag
  character(len=1)                 :: uplo_
  character(len=1)                 :: diag_
  integer                          :: n,lda,info
  uplo_="U";if(present(uplo))uplo_=uplo
  diag_="N";if(present(diag))diag_=diag !not a unit triangular matrix
  lda = max(1,size(A,1))
  n   = size(A,2)
  call dtrtri(uplo_,diag_,n,A,lda,info)
  if(info/=0)stop "Error MATRIX/D_mat_invertTRIANG: dtrtri"
end subroutine Dinv_triang
!
subroutine Zinv_triang(A,uplo,diag)
  complex(8),dimension(:,:)           :: A
  character(len=1),optional        :: uplo,diag
  character(len=1)                 :: uplo_
  character(len=1)                 :: diag_
  integer                          :: ndim1,ndim2
  integer                          :: n,lda,info
  uplo_="U";if(present(uplo))uplo_=uplo
  diag_="N";if(present(diag))diag_=diag !not a unit triangular matrix
  lda = max(1,size(A,1))
  n   = size(A,2)
  call ztrtri(uplo_,diag_,n,A,lda,info)
  if(info/=0)stop "Error MATRIX/D_mat_invertTRIANG: ztrtri"
end subroutine Zinv_triang