c_build_tridiag Function

function c_build_tridiag(sub, diag, over) result(Amat)

Arguments

Type IntentOptional Attributes Name
complex(kind=8), dimension(size(diag)-1) :: sub
complex(kind=8), dimension(:) :: diag
complex(kind=8), optional, dimension(size(diag)-1) :: over

Return Value complex(kind=8), dimension(size(diag),size(diag))


Source Code

function c_build_tridiag(sub,diag,over) result(Amat)
  complex(8),dimension(:)                     :: diag
  complex(8),dimension(size(diag)-1)          :: sub
  complex(8),dimension(size(diag)-1),optional :: over
  complex(8),dimension(size(diag),size(diag)) :: Amat
  complex(8),dimension(size(diag)-1)          :: over_
  integer                                     :: i,N
  over_=sub;if(present(over))over_=over
  N=size(diag)
  Amat=dcmplx(0d0,0d0)
  forall(i=1:N-1)
     Amat(i+1,i) = sub(i)
     Amat(i,i)   = diag(i)
     Amat(i,i+1) = over_(i)
  end forall
  Amat(N,N)=diag(N)
end function c_build_tridiag