linalg_check_tridiag.f90 Source File


Source Code

!+-----------------------------------------------------------------------------+!
!PURPOSE:  comment
!+-----------------------------------------------------------------------------+!
function d_check_tridiag(Amat) result(Mcheck)
  real(8),dimension(:,:)                       :: Amat
  logical,dimension(size(Amat,1),size(Amat,2)) :: Lmat
  logical                                      :: Mcheck
  integer                                      :: i,j,N
  N=size(Amat,1)
  call assert_shape(Amat,[N,N],"d_check_tridiag","Amat")
  Lmat=.true.
  forall(i=1:N-1)
     Lmat(i+1,i)=.false.
     Lmat(i,i)  =.false.
     Lmat(i,i+1)=.false.
  end forall
  Lmat(N,N)=.false.
  Mcheck = .not.(sum(abs(Amat),mask=Lmat)>0d0)
end function d_check_tridiag
function c_check_tridiag(Amat) result(Mcheck)
  complex(8),dimension(:,:)                    :: Amat
  logical,dimension(size(Amat,1),size(Amat,2)) :: Lmat
  logical                                      :: Mcheck
  integer                                      :: i,N
  N=size(Amat,1)
  call assert_shape(Amat,[N,N],"c_check_tridiag","Amat")
  Lmat=.true.
  forall(i=1:N-1)
     Lmat(i+1,i)=.false.
     Lmat(i,i)  =.false.
     Lmat(i,i+1)=.false.
  end forall
  Lmat(N,N)=.false.
  Mcheck = .not.(sum(abs(Amat),mask=Lmat)>0d0)
end function c_check_tridiag
function d_check_tridiag_block(Nblock,Nsize,Amat) result(Mcheck)
  integer                                          :: Nblock
  integer                                          :: Nsize
  real(8),dimension(Nblock*Nsize,Nblock*Nsize)     :: Amat
  logical,dimension(Nblock*Nsize,Nblock*Nsize)     :: Lmat
  integer                                          :: i,j,iblock,is,js
  logical                                          :: Mcheck
  Lmat=.true.
  do iblock=1,Nblock-1
     do i=1,Nsize
        do j=1,Nsize
           is = i + (iblock-1)*Nsize
           js = j + (iblock-1)*Nsize
           Lmat(Nsize+is,js) =.false.
           Lmat(is,js)       =.false.
           Lmat(is,Nsize+js) =.false.
        enddo
     enddo
  enddo
  do i=1,Nsize
     do j=1,Nsize
        is = i + (Nblock-1)*Nsize
        js = j + (Nblock-1)*Nsize
        Lmat(is,js)=.false.
     enddo
  enddo
  Mcheck = .not.(sum(abs(Amat),mask=Lmat)>0d0)
end function d_check_tridiag_block
function c_check_tridiag_block(Nblock,Nsize,Amat) result(Mcheck)
  integer                                         :: Nblock
  integer                                         :: Nsize
  complex(8),dimension(Nblock*Nsize,Nblock*Nsize) :: Amat
  logical,dimension(Nblock*Nsize,Nblock*Nsize)    :: Lmat
  integer                                         :: i,j,iblock,is,js
  logical                                         :: Mcheck
  Lmat=.true.
  do iblock=1,Nblock-1
     do i=1,Nsize
        do j=1,Nsize
           is = i + (iblock-1)*Nsize
           js = j + (iblock-1)*Nsize
           Lmat(Nsize+is,js) =.false.
           Lmat(is,js)       =.false.
           Lmat(is,Nsize+js) =.false.
        enddo
     enddo
  enddo
  do i=1,Nsize
     do j=1,Nsize
        is = i + (Nblock-1)*Nsize
        js = j + (Nblock-1)*Nsize
        Lmat(is,js)=.false.
     enddo
  enddo
  Mcheck = .not.(sum(abs(Amat),mask=Lmat)>0d0)
end function c_check_tridiag_block