d_build_tridiag Function

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

Arguments

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

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


Source Code

function d_build_tridiag(sub,diag,over) result(Amat)
  real(8),dimension(:)                     :: diag
  real(8),dimension(size(diag)-1)          :: sub
  real(8),dimension(size(diag)-1),optional :: over
  real(8),dimension(size(diag),size(diag)) :: Amat
  real(8),dimension(size(diag)-1)          :: over_
  integer                                  :: i,N
  over_=sub;if(present(over))over_=over
  N=size(diag)
  Amat=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 d_build_tridiag