#:include "common.fypp" submodule(stdlib_lapack_base) stdlib_lapack_blas_like_mnorm implicit none contains #:for ik,it,ii in LINALG_INT_KINDS_TYPES real(sp) module function stdlib${ii}$_slange( norm, m, n, a, lda, work ) !! SLANGE returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! real matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_sp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: lda, m, n ! Array Arguments real(sp), intent(in) :: a(lda,*) real(sp), intent(out) :: work(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j real(sp) :: scale, sum, value, temp ! Intrinsic Functions ! Executable Statements if( min( m, n )==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = 1, m temp = abs( a( i, j ) ) if( value<temp .or. stdlib${ii}$_sisnan( temp ) ) value = temp end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = 1, m sum = sum + abs( a( i, j ) ) end do if( value<sum .or. stdlib${ii}$_sisnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, m work( i ) = zero end do do j = 1, n do i = 1, m work( i ) = work( i ) + abs( a( i, j ) ) end do end do value = zero do i = 1, m temp = work( i ) if( value<temp .or. stdlib${ii}$_sisnan( temp ) ) value = temp end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n call stdlib${ii}$_slassq( m, a( 1_${ik}$, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_slange = value return end function stdlib${ii}$_slange real(dp) module function stdlib${ii}$_dlange( norm, m, n, a, lda, work ) !! DLANGE returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! real matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_dp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: lda, m, n ! Array Arguments real(dp), intent(in) :: a(lda,*) real(dp), intent(out) :: work(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j real(dp) :: scale, sum, value, temp ! Intrinsic Functions ! Executable Statements if( min( m, n )==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = 1, m temp = abs( a( i, j ) ) if( value<temp .or. stdlib${ii}$_disnan( temp ) ) value = temp end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = 1, m sum = sum + abs( a( i, j ) ) end do if( value<sum .or. stdlib${ii}$_disnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, m work( i ) = zero end do do j = 1, n do i = 1, m work( i ) = work( i ) + abs( a( i, j ) ) end do end do value = zero do i = 1, m temp = work( i ) if( value<temp .or. stdlib${ii}$_disnan( temp ) ) value = temp end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n call stdlib${ii}$_dlassq( m, a( 1_${ik}$, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_dlange = value return end function stdlib${ii}$_dlange #:for rk,rt,ri in REAL_KINDS_TYPES #:if not rk in ["sp","dp"] real(${rk}$) module function stdlib${ii}$_${ri}$lange( norm, m, n, a, lda, work ) !! DLANGE: returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! real matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_${rk}$, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: lda, m, n ! Array Arguments real(${rk}$), intent(in) :: a(lda,*) real(${rk}$), intent(out) :: work(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j real(${rk}$) :: scale, sum, value, temp ! Intrinsic Functions ! Executable Statements if( min( m, n )==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = 1, m temp = abs( a( i, j ) ) if( value<temp .or. stdlib${ii}$_${ri}$isnan( temp ) ) value = temp end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = 1, m sum = sum + abs( a( i, j ) ) end do if( value<sum .or. stdlib${ii}$_${ri}$isnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, m work( i ) = zero end do do j = 1, n do i = 1, m work( i ) = work( i ) + abs( a( i, j ) ) end do end do value = zero do i = 1, m temp = work( i ) if( value<temp .or. stdlib${ii}$_${ri}$isnan( temp ) ) value = temp end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n call stdlib${ii}$_${ri}$lassq( m, a( 1_${ik}$, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_${ri}$lange = value return end function stdlib${ii}$_${ri}$lange #:endif #:endfor real(sp) module function stdlib${ii}$_clange( norm, m, n, a, lda, work ) !! CLANGE returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! complex matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_sp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: lda, m, n ! Array Arguments real(sp), intent(out) :: work(*) complex(sp), intent(in) :: a(lda,*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j real(sp) :: scale, sum, value, temp ! Intrinsic Functions ! Executable Statements if( min( m, n )==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = 1, m temp = abs( a( i, j ) ) if( value<temp .or. stdlib${ii}$_sisnan( temp ) ) value = temp end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = 1, m sum = sum + abs( a( i, j ) ) end do if( value<sum .or. stdlib${ii}$_sisnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, m work( i ) = zero end do do j = 1, n do i = 1, m work( i ) = work( i ) + abs( a( i, j ) ) end do end do value = zero do i = 1, m temp = work( i ) if( value<temp .or. stdlib${ii}$_sisnan( temp ) ) value = temp end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n call stdlib${ii}$_classq( m, a( 1_${ik}$, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_clange = value return end function stdlib${ii}$_clange real(dp) module function stdlib${ii}$_zlange( norm, m, n, a, lda, work ) !! ZLANGE returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! complex matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_dp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: lda, m, n ! Array Arguments real(dp), intent(out) :: work(*) complex(dp), intent(in) :: a(lda,*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j real(dp) :: scale, sum, value, temp ! Intrinsic Functions ! Executable Statements if( min( m, n )==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = 1, m temp = abs( a( i, j ) ) if( value<temp .or. stdlib${ii}$_disnan( temp ) ) value = temp end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = 1, m sum = sum + abs( a( i, j ) ) end do if( value<sum .or. stdlib${ii}$_disnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, m work( i ) = zero end do do j = 1, n do i = 1, m work( i ) = work( i ) + abs( a( i, j ) ) end do end do value = zero do i = 1, m temp = work( i ) if( value<temp .or. stdlib${ii}$_disnan( temp ) ) value = temp end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n call stdlib${ii}$_zlassq( m, a( 1_${ik}$, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_zlange = value return end function stdlib${ii}$_zlange #:for ck,ct,ci in CMPLX_KINDS_TYPES #:if not ck in ["sp","dp"] real(${ck}$) module function stdlib${ii}$_${ci}$lange( norm, m, n, a, lda, work ) !! ZLANGE: returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! complex matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_${ck}$, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: lda, m, n ! Array Arguments real(${ck}$), intent(out) :: work(*) complex(${ck}$), intent(in) :: a(lda,*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j real(${ck}$) :: scale, sum, value, temp ! Intrinsic Functions ! Executable Statements if( min( m, n )==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = 1, m temp = abs( a( i, j ) ) if( value<temp .or. stdlib${ii}$_${c2ri(ci)}$isnan( temp ) ) value = temp end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = 1, m sum = sum + abs( a( i, j ) ) end do if( value<sum .or. stdlib${ii}$_${c2ri(ci)}$isnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, m work( i ) = zero end do do j = 1, n do i = 1, m work( i ) = work( i ) + abs( a( i, j ) ) end do end do value = zero do i = 1, m temp = work( i ) if( value<temp .or. stdlib${ii}$_${c2ri(ci)}$isnan( temp ) ) value = temp end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n call stdlib${ii}$_${ci}$lassq( m, a( 1_${ik}$, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_${ci}$lange = value return end function stdlib${ii}$_${ci}$lange #:endif #:endfor real(sp) module function stdlib${ii}$_slangb( norm, n, kl, ku, ab, ldab,work ) !! SLANGB returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of an !! n by n band matrix A, with kl sub-diagonals and ku super-diagonals. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_sp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: kl, ku, ldab, n ! Array Arguments real(sp), intent(in) :: ab(ldab,*) real(sp), intent(out) :: work(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j, k, l real(sp) :: scale, sum, value, temp ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = max( ku+2-j, 1 ), min( n+ku+1-j, kl+ku+1 ) temp = abs( ab( i, j ) ) if( value<temp .or. stdlib${ii}$_sisnan( temp ) ) value = temp end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = max( ku+2-j, 1 ), min( n+ku+1-j, kl+ku+1 ) sum = sum + abs( ab( i, j ) ) end do if( value<sum .or. stdlib${ii}$_sisnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, n work( i ) = zero end do do j = 1, n k = ku + 1_${ik}$ - j do i = max( 1, j-ku ), min( n, j+kl ) work( i ) = work( i ) + abs( ab( k+i, j ) ) end do end do value = zero do i = 1, n temp = work( i ) if( value<temp .or. stdlib${ii}$_sisnan( temp ) ) value = temp end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n l = max( 1_${ik}$, j-ku ) k = ku + 1_${ik}$ - j + l call stdlib${ii}$_slassq( min( n, j+kl )-l+1, ab( k, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_slangb = value return end function stdlib${ii}$_slangb real(dp) module function stdlib${ii}$_dlangb( norm, n, kl, ku, ab, ldab,work ) !! DLANGB returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of an !! n by n band matrix A, with kl sub-diagonals and ku super-diagonals. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_dp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: kl, ku, ldab, n ! Array Arguments real(dp), intent(in) :: ab(ldab,*) real(dp), intent(out) :: work(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j, k, l real(dp) :: scale, sum, value, temp ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = max( ku+2-j, 1 ), min( n+ku+1-j, kl+ku+1 ) temp = abs( ab( i, j ) ) if( value<temp .or. stdlib${ii}$_disnan( temp ) ) value = temp end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = max( ku+2-j, 1 ), min( n+ku+1-j, kl+ku+1 ) sum = sum + abs( ab( i, j ) ) end do if( value<sum .or. stdlib${ii}$_disnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, n work( i ) = zero end do do j = 1, n k = ku + 1_${ik}$ - j do i = max( 1, j-ku ), min( n, j+kl ) work( i ) = work( i ) + abs( ab( k+i, j ) ) end do end do value = zero do i = 1, n temp = work( i ) if( value<temp .or. stdlib${ii}$_disnan( temp ) ) value = temp end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n l = max( 1_${ik}$, j-ku ) k = ku + 1_${ik}$ - j + l call stdlib${ii}$_dlassq( min( n, j+kl )-l+1, ab( k, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_dlangb = value return end function stdlib${ii}$_dlangb #:for rk,rt,ri in REAL_KINDS_TYPES #:if not rk in ["sp","dp"] real(${rk}$) module function stdlib${ii}$_${ri}$langb( norm, n, kl, ku, ab, ldab,work ) !! DLANGB: returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of an !! n by n band matrix A, with kl sub-diagonals and ku super-diagonals. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_${rk}$, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: kl, ku, ldab, n ! Array Arguments real(${rk}$), intent(in) :: ab(ldab,*) real(${rk}$), intent(out) :: work(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j, k, l real(${rk}$) :: scale, sum, value, temp ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = max( ku+2-j, 1 ), min( n+ku+1-j, kl+ku+1 ) temp = abs( ab( i, j ) ) if( value<temp .or. stdlib${ii}$_${ri}$isnan( temp ) ) value = temp end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = max( ku+2-j, 1 ), min( n+ku+1-j, kl+ku+1 ) sum = sum + abs( ab( i, j ) ) end do if( value<sum .or. stdlib${ii}$_${ri}$isnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, n work( i ) = zero end do do j = 1, n k = ku + 1_${ik}$ - j do i = max( 1, j-ku ), min( n, j+kl ) work( i ) = work( i ) + abs( ab( k+i, j ) ) end do end do value = zero do i = 1, n temp = work( i ) if( value<temp .or. stdlib${ii}$_${ri}$isnan( temp ) ) value = temp end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n l = max( 1_${ik}$, j-ku ) k = ku + 1_${ik}$ - j + l call stdlib${ii}$_${ri}$lassq( min( n, j+kl )-l+1, ab( k, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_${ri}$langb = value return end function stdlib${ii}$_${ri}$langb #:endif #:endfor real(sp) module function stdlib${ii}$_clangb( norm, n, kl, ku, ab, ldab,work ) !! CLANGB returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of an !! n by n band matrix A, with kl sub-diagonals and ku super-diagonals. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_sp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: kl, ku, ldab, n ! Array Arguments real(sp), intent(out) :: work(*) complex(sp), intent(in) :: ab(ldab,*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j, k, l real(sp) :: scale, sum, value, temp ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = max( ku+2-j, 1 ), min( n+ku+1-j, kl+ku+1 ) temp = abs( ab( i, j ) ) if( value<temp .or. stdlib${ii}$_sisnan( temp ) ) value = temp end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = max( ku+2-j, 1 ), min( n+ku+1-j, kl+ku+1 ) sum = sum + abs( ab( i, j ) ) end do if( value<sum .or. stdlib${ii}$_sisnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, n work( i ) = zero end do do j = 1, n k = ku + 1_${ik}$ - j do i = max( 1, j-ku ), min( n, j+kl ) work( i ) = work( i ) + abs( ab( k+i, j ) ) end do end do value = zero do i = 1, n temp = work( i ) if( value<temp .or. stdlib${ii}$_sisnan( temp ) ) value = temp end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n l = max( 1_${ik}$, j-ku ) k = ku + 1_${ik}$ - j + l call stdlib${ii}$_classq( min( n, j+kl )-l+1, ab( k, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_clangb = value return end function stdlib${ii}$_clangb real(dp) module function stdlib${ii}$_zlangb( norm, n, kl, ku, ab, ldab,work ) !! ZLANGB returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of an !! n by n band matrix A, with kl sub-diagonals and ku super-diagonals. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_dp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: kl, ku, ldab, n ! Array Arguments real(dp), intent(out) :: work(*) complex(dp), intent(in) :: ab(ldab,*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j, k, l real(dp) :: scale, sum, value, temp ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = max( ku+2-j, 1 ), min( n+ku+1-j, kl+ku+1 ) temp = abs( ab( i, j ) ) if( value<temp .or. stdlib${ii}$_disnan( temp ) ) value = temp end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = max( ku+2-j, 1 ), min( n+ku+1-j, kl+ku+1 ) sum = sum + abs( ab( i, j ) ) end do if( value<sum .or. stdlib${ii}$_disnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, n work( i ) = zero end do do j = 1, n k = ku + 1_${ik}$ - j do i = max( 1, j-ku ), min( n, j+kl ) work( i ) = work( i ) + abs( ab( k+i, j ) ) end do end do value = zero do i = 1, n temp = work( i ) if( value<temp .or. stdlib${ii}$_disnan( temp ) ) value = temp end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n l = max( 1_${ik}$, j-ku ) k = ku + 1_${ik}$ - j + l call stdlib${ii}$_zlassq( min( n, j+kl )-l+1, ab( k, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_zlangb = value return end function stdlib${ii}$_zlangb #:for ck,ct,ci in CMPLX_KINDS_TYPES #:if not ck in ["sp","dp"] real(${ck}$) module function stdlib${ii}$_${ci}$langb( norm, n, kl, ku, ab, ldab,work ) !! ZLANGB: returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of an !! n by n band matrix A, with kl sub-diagonals and ku super-diagonals. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_${ck}$, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: kl, ku, ldab, n ! Array Arguments real(${ck}$), intent(out) :: work(*) complex(${ck}$), intent(in) :: ab(ldab,*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j, k, l real(${ck}$) :: scale, sum, value, temp ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = max( ku+2-j, 1 ), min( n+ku+1-j, kl+ku+1 ) temp = abs( ab( i, j ) ) if( value<temp .or. stdlib${ii}$_${c2ri(ci)}$isnan( temp ) ) value = temp end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = max( ku+2-j, 1 ), min( n+ku+1-j, kl+ku+1 ) sum = sum + abs( ab( i, j ) ) end do if( value<sum .or. stdlib${ii}$_${c2ri(ci)}$isnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, n work( i ) = zero end do do j = 1, n k = ku + 1_${ik}$ - j do i = max( 1, j-ku ), min( n, j+kl ) work( i ) = work( i ) + abs( ab( k+i, j ) ) end do end do value = zero do i = 1, n temp = work( i ) if( value<temp .or. stdlib${ii}$_${c2ri(ci)}$isnan( temp ) ) value = temp end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n l = max( 1_${ik}$, j-ku ) k = ku + 1_${ik}$ - j + l call stdlib${ii}$_${ci}$lassq( min( n, j+kl )-l+1, ab( k, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_${ci}$langb = value return end function stdlib${ii}$_${ci}$langb #:endif #:endfor pure real(sp) module function stdlib${ii}$_slangt( norm, n, dl, d, du ) !! SLANGT returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! real tridiagonal matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_sp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: n ! Array Arguments real(sp), intent(in) :: d(*), dl(*), du(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i real(sp) :: anorm, scale, sum, temp ! Intrinsic Functions ! Executable Statements if( n<=0_${ik}$ ) then anorm = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). anorm = abs( d( n ) ) do i = 1, n - 1 if( anorm<abs( dl( i ) ) .or. stdlib${ii}$_sisnan( abs( dl( i ) ) ) )anorm = abs(dl(i)) if( anorm<abs( d( i ) ) .or. stdlib${ii}$_sisnan( abs( d( i ) ) ) )anorm = abs(d(i)) if( anorm<abs( du( i ) ) .or. stdlib${ii}$_sisnan (abs( du( i ) ) ) )anorm = abs(du(i)) end do else if( stdlib_lsame( norm, 'O' ) .or. norm=='1' ) then ! find norm1(a). if( n==1_${ik}$ ) then anorm = abs( d( 1_${ik}$ ) ) else anorm = abs( d( 1_${ik}$ ) )+abs( dl( 1_${ik}$ ) ) temp = abs( d( n ) )+abs( du( n-1 ) ) if( anorm < temp .or. stdlib${ii}$_sisnan( temp ) ) anorm = temp do i = 2, n - 1 temp = abs( d( i ) )+abs( dl( i ) )+abs( du( i-1 ) ) if( anorm < temp .or. stdlib${ii}$_sisnan( temp ) ) anorm = temp end do end if else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). if( n==1_${ik}$ ) then anorm = abs( d( 1_${ik}$ ) ) else anorm = abs( d( 1_${ik}$ ) )+abs( du( 1_${ik}$ ) ) temp = abs( d( n ) )+abs( dl( n-1 ) ) if( anorm < temp .or. stdlib${ii}$_sisnan( temp ) ) anorm = temp do i = 2, n - 1 temp = abs( d( i ) )+abs( du( i ) )+abs( dl( i-1 ) ) if( anorm < temp .or. stdlib${ii}$_sisnan( temp ) ) anorm = temp end do end if else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one call stdlib${ii}$_slassq( n, d, 1_${ik}$, scale, sum ) if( n>1_${ik}$ ) then call stdlib${ii}$_slassq( n-1, dl, 1_${ik}$, scale, sum ) call stdlib${ii}$_slassq( n-1, du, 1_${ik}$, scale, sum ) end if anorm = scale*sqrt( sum ) end if stdlib${ii}$_slangt = anorm return end function stdlib${ii}$_slangt pure real(dp) module function stdlib${ii}$_dlangt( norm, n, dl, d, du ) !! DLANGT returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! real tridiagonal matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_dp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: n ! Array Arguments real(dp), intent(in) :: d(*), dl(*), du(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i real(dp) :: anorm, scale, sum, temp ! Intrinsic Functions ! Executable Statements if( n<=0_${ik}$ ) then anorm = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). anorm = abs( d( n ) ) do i = 1, n - 1 if( anorm<abs( dl( i ) ) .or. stdlib${ii}$_disnan( abs( dl( i ) ) ) )anorm = abs(dl(i)) if( anorm<abs( d( i ) ) .or. stdlib${ii}$_disnan( abs( d( i ) ) ) )anorm = abs(d(i)) if( anorm<abs( du( i ) ) .or. stdlib${ii}$_disnan (abs( du( i ) ) ) )anorm = abs(du(i)) end do else if( stdlib_lsame( norm, 'O' ) .or. norm=='1' ) then ! find norm1(a). if( n==1_${ik}$ ) then anorm = abs( d( 1_${ik}$ ) ) else anorm = abs( d( 1_${ik}$ ) )+abs( dl( 1_${ik}$ ) ) temp = abs( d( n ) )+abs( du( n-1 ) ) if( anorm < temp .or. stdlib${ii}$_disnan( temp ) ) anorm = temp do i = 2, n - 1 temp = abs( d( i ) )+abs( dl( i ) )+abs( du( i-1 ) ) if( anorm < temp .or. stdlib${ii}$_disnan( temp ) ) anorm = temp end do end if else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). if( n==1_${ik}$ ) then anorm = abs( d( 1_${ik}$ ) ) else anorm = abs( d( 1_${ik}$ ) )+abs( du( 1_${ik}$ ) ) temp = abs( d( n ) )+abs( dl( n-1 ) ) if( anorm < temp .or. stdlib${ii}$_disnan( temp ) ) anorm = temp do i = 2, n - 1 temp = abs( d( i ) )+abs( du( i ) )+abs( dl( i-1 ) ) if( anorm < temp .or. stdlib${ii}$_disnan( temp ) ) anorm = temp end do end if else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one call stdlib${ii}$_dlassq( n, d, 1_${ik}$, scale, sum ) if( n>1_${ik}$ ) then call stdlib${ii}$_dlassq( n-1, dl, 1_${ik}$, scale, sum ) call stdlib${ii}$_dlassq( n-1, du, 1_${ik}$, scale, sum ) end if anorm = scale*sqrt( sum ) end if stdlib${ii}$_dlangt = anorm return end function stdlib${ii}$_dlangt #:for rk,rt,ri in REAL_KINDS_TYPES #:if not rk in ["sp","dp"] pure real(${rk}$) module function stdlib${ii}$_${ri}$langt( norm, n, dl, d, du ) !! DLANGT: returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! real tridiagonal matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_${rk}$, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: n ! Array Arguments real(${rk}$), intent(in) :: d(*), dl(*), du(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i real(${rk}$) :: anorm, scale, sum, temp ! Intrinsic Functions ! Executable Statements if( n<=0_${ik}$ ) then anorm = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). anorm = abs( d( n ) ) do i = 1, n - 1 if( anorm<abs( dl( i ) ) .or. stdlib${ii}$_${ri}$isnan( abs( dl( i ) ) ) )anorm = abs(dl(i)) if( anorm<abs( d( i ) ) .or. stdlib${ii}$_${ri}$isnan( abs( d( i ) ) ) )anorm = abs(d(i)) if( anorm<abs( du( i ) ) .or. stdlib${ii}$_${ri}$isnan (abs( du( i ) ) ) )anorm = abs(du(i)) end do else if( stdlib_lsame( norm, 'O' ) .or. norm=='1' ) then ! find norm1(a). if( n==1_${ik}$ ) then anorm = abs( d( 1_${ik}$ ) ) else anorm = abs( d( 1_${ik}$ ) )+abs( dl( 1_${ik}$ ) ) temp = abs( d( n ) )+abs( du( n-1 ) ) if( anorm < temp .or. stdlib${ii}$_${ri}$isnan( temp ) ) anorm = temp do i = 2, n - 1 temp = abs( d( i ) )+abs( dl( i ) )+abs( du( i-1 ) ) if( anorm < temp .or. stdlib${ii}$_${ri}$isnan( temp ) ) anorm = temp end do end if else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). if( n==1_${ik}$ ) then anorm = abs( d( 1_${ik}$ ) ) else anorm = abs( d( 1_${ik}$ ) )+abs( du( 1_${ik}$ ) ) temp = abs( d( n ) )+abs( dl( n-1 ) ) if( anorm < temp .or. stdlib${ii}$_${ri}$isnan( temp ) ) anorm = temp do i = 2, n - 1 temp = abs( d( i ) )+abs( du( i ) )+abs( dl( i-1 ) ) if( anorm < temp .or. stdlib${ii}$_${ri}$isnan( temp ) ) anorm = temp end do end if else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one call stdlib${ii}$_${ri}$lassq( n, d, 1_${ik}$, scale, sum ) if( n>1_${ik}$ ) then call stdlib${ii}$_${ri}$lassq( n-1, dl, 1_${ik}$, scale, sum ) call stdlib${ii}$_${ri}$lassq( n-1, du, 1_${ik}$, scale, sum ) end if anorm = scale*sqrt( sum ) end if stdlib${ii}$_${ri}$langt = anorm return end function stdlib${ii}$_${ri}$langt #:endif #:endfor pure real(sp) module function stdlib${ii}$_clangt( norm, n, dl, d, du ) !! CLANGT returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! complex tridiagonal matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_sp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: n ! Array Arguments complex(sp), intent(in) :: d(*), dl(*), du(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i real(sp) :: anorm, scale, sum, temp ! Intrinsic Functions ! Executable Statements if( n<=0_${ik}$ ) then anorm = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). anorm = abs( d( n ) ) do i = 1, n - 1 if( anorm<abs( dl( i ) ) .or. stdlib${ii}$_sisnan( abs( dl( i ) ) ) )anorm = abs(dl(i)) if( anorm<abs( d( i ) ) .or. stdlib${ii}$_sisnan( abs( d( i ) ) ) )anorm = abs(d(i)) if( anorm<abs( du( i ) ) .or. stdlib${ii}$_sisnan (abs( du( i ) ) ) )anorm = abs(du(i)) end do else if( stdlib_lsame( norm, 'O' ) .or. norm=='1' ) then ! find norm1(a). if( n==1_${ik}$ ) then anorm = abs( d( 1_${ik}$ ) ) else anorm = abs( d( 1_${ik}$ ) )+abs( dl( 1_${ik}$ ) ) temp = abs( d( n ) )+abs( du( n-1 ) ) if( anorm < temp .or. stdlib${ii}$_sisnan( temp ) ) anorm = temp do i = 2, n - 1 temp = abs( d( i ) )+abs( dl( i ) )+abs( du( i-1 ) ) if( anorm < temp .or. stdlib${ii}$_sisnan( temp ) ) anorm = temp end do end if else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). if( n==1_${ik}$ ) then anorm = abs( d( 1_${ik}$ ) ) else anorm = abs( d( 1_${ik}$ ) )+abs( du( 1_${ik}$ ) ) temp = abs( d( n ) )+abs( dl( n-1 ) ) if( anorm < temp .or. stdlib${ii}$_sisnan( temp ) ) anorm = temp do i = 2, n - 1 temp = abs( d( i ) )+abs( du( i ) )+abs( dl( i-1 ) ) if( anorm < temp .or. stdlib${ii}$_sisnan( temp ) ) anorm = temp end do end if else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one call stdlib${ii}$_classq( n, d, 1_${ik}$, scale, sum ) if( n>1_${ik}$ ) then call stdlib${ii}$_classq( n-1, dl, 1_${ik}$, scale, sum ) call stdlib${ii}$_classq( n-1, du, 1_${ik}$, scale, sum ) end if anorm = scale*sqrt( sum ) end if stdlib${ii}$_clangt = anorm return end function stdlib${ii}$_clangt pure real(dp) module function stdlib${ii}$_zlangt( norm, n, dl, d, du ) !! ZLANGT returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! complex tridiagonal matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_dp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: n ! Array Arguments complex(dp), intent(in) :: d(*), dl(*), du(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i real(dp) :: anorm, scale, sum, temp ! Intrinsic Functions ! Executable Statements if( n<=0_${ik}$ ) then anorm = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). anorm = abs( d( n ) ) do i = 1, n - 1 if( anorm<abs( dl( i ) ) .or. stdlib${ii}$_disnan( abs( dl( i ) ) ) )anorm = abs(dl(i)) if( anorm<abs( d( i ) ) .or. stdlib${ii}$_disnan( abs( d( i ) ) ) )anorm = abs(d(i)) if( anorm<abs( du( i ) ) .or. stdlib${ii}$_disnan (abs( du( i ) ) ) )anorm = abs(du(i)) end do else if( stdlib_lsame( norm, 'O' ) .or. norm=='1' ) then ! find norm1(a). if( n==1_${ik}$ ) then anorm = abs( d( 1_${ik}$ ) ) else anorm = abs( d( 1_${ik}$ ) )+abs( dl( 1_${ik}$ ) ) temp = abs( d( n ) )+abs( du( n-1 ) ) if( anorm < temp .or. stdlib${ii}$_disnan( temp ) ) anorm = temp do i = 2, n - 1 temp = abs( d( i ) )+abs( dl( i ) )+abs( du( i-1 ) ) if( anorm < temp .or. stdlib${ii}$_disnan( temp ) ) anorm = temp end do end if else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). if( n==1_${ik}$ ) then anorm = abs( d( 1_${ik}$ ) ) else anorm = abs( d( 1_${ik}$ ) )+abs( du( 1_${ik}$ ) ) temp = abs( d( n ) )+abs( dl( n-1 ) ) if( anorm < temp .or. stdlib${ii}$_disnan( temp ) ) anorm = temp do i = 2, n - 1 temp = abs( d( i ) )+abs( du( i ) )+abs( dl( i-1 ) ) if( anorm < temp .or. stdlib${ii}$_disnan( temp ) ) anorm = temp end do end if else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one call stdlib${ii}$_zlassq( n, d, 1_${ik}$, scale, sum ) if( n>1_${ik}$ ) then call stdlib${ii}$_zlassq( n-1, dl, 1_${ik}$, scale, sum ) call stdlib${ii}$_zlassq( n-1, du, 1_${ik}$, scale, sum ) end if anorm = scale*sqrt( sum ) end if stdlib${ii}$_zlangt = anorm return end function stdlib${ii}$_zlangt #:for ck,ct,ci in CMPLX_KINDS_TYPES #:if not ck in ["sp","dp"] pure real(${ck}$) module function stdlib${ii}$_${ci}$langt( norm, n, dl, d, du ) !! ZLANGT: returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! complex tridiagonal matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_${ck}$, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: n ! Array Arguments complex(${ck}$), intent(in) :: d(*), dl(*), du(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i real(${ck}$) :: anorm, scale, sum, temp ! Intrinsic Functions ! Executable Statements if( n<=0_${ik}$ ) then anorm = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). anorm = abs( d( n ) ) do i = 1, n - 1 if( anorm<abs( dl( i ) ) .or. stdlib${ii}$_${c2ri(ci)}$isnan( abs( dl( i ) ) ) )anorm = abs(dl(i)) if( anorm<abs( d( i ) ) .or. stdlib${ii}$_${c2ri(ci)}$isnan( abs( d( i ) ) ) )anorm = abs(d(i)) if( anorm<abs( du( i ) ) .or. stdlib${ii}$_${c2ri(ci)}$isnan (abs( du( i ) ) ) )anorm = abs(du(i)) end do else if( stdlib_lsame( norm, 'O' ) .or. norm=='1' ) then ! find norm1(a). if( n==1_${ik}$ ) then anorm = abs( d( 1_${ik}$ ) ) else anorm = abs( d( 1_${ik}$ ) )+abs( dl( 1_${ik}$ ) ) temp = abs( d( n ) )+abs( du( n-1 ) ) if( anorm < temp .or. stdlib${ii}$_${c2ri(ci)}$isnan( temp ) ) anorm = temp do i = 2, n - 1 temp = abs( d( i ) )+abs( dl( i ) )+abs( du( i-1 ) ) if( anorm < temp .or. stdlib${ii}$_${c2ri(ci)}$isnan( temp ) ) anorm = temp end do end if else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). if( n==1_${ik}$ ) then anorm = abs( d( 1_${ik}$ ) ) else anorm = abs( d( 1_${ik}$ ) )+abs( du( 1_${ik}$ ) ) temp = abs( d( n ) )+abs( dl( n-1 ) ) if( anorm < temp .or. stdlib${ii}$_${c2ri(ci)}$isnan( temp ) ) anorm = temp do i = 2, n - 1 temp = abs( d( i ) )+abs( du( i ) )+abs( dl( i-1 ) ) if( anorm < temp .or. stdlib${ii}$_${c2ri(ci)}$isnan( temp ) ) anorm = temp end do end if else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one call stdlib${ii}$_${ci}$lassq( n, d, 1_${ik}$, scale, sum ) if( n>1_${ik}$ ) then call stdlib${ii}$_${ci}$lassq( n-1, dl, 1_${ik}$, scale, sum ) call stdlib${ii}$_${ci}$lassq( n-1, du, 1_${ik}$, scale, sum ) end if anorm = scale*sqrt( sum ) end if stdlib${ii}$_${ci}$langt = anorm return end function stdlib${ii}$_${ci}$langt #:endif #:endfor real(sp) module function stdlib${ii}$_slanhs( norm, n, a, lda, work ) !! SLANHS returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! Hessenberg matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_sp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: lda, n ! Array Arguments real(sp), intent(in) :: a(lda,*) real(sp), intent(out) :: work(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j real(sp) :: scale, sum, value ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = 1, min( n, j+1 ) sum = abs( a( i, j ) ) if( value < sum .or. stdlib${ii}$_sisnan( sum ) ) value = sum end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = 1, min( n, j+1 ) sum = sum + abs( a( i, j ) ) end do if( value < sum .or. stdlib${ii}$_sisnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, n work( i ) = zero end do do j = 1, n do i = 1, min( n, j+1 ) work( i ) = work( i ) + abs( a( i, j ) ) end do end do value = zero do i = 1, n sum = work( i ) if( value < sum .or. stdlib${ii}$_sisnan( sum ) ) value = sum end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n call stdlib${ii}$_slassq( min( n, j+1 ), a( 1_${ik}$, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_slanhs = value return end function stdlib${ii}$_slanhs real(dp) module function stdlib${ii}$_dlanhs( norm, n, a, lda, work ) !! DLANHS returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! Hessenberg matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_dp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: lda, n ! Array Arguments real(dp), intent(in) :: a(lda,*) real(dp), intent(out) :: work(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j real(dp) :: scale, sum, value ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = 1, min( n, j+1 ) sum = abs( a( i, j ) ) if( value < sum .or. stdlib${ii}$_disnan( sum ) ) value = sum end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = 1, min( n, j+1 ) sum = sum + abs( a( i, j ) ) end do if( value < sum .or. stdlib${ii}$_disnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, n work( i ) = zero end do do j = 1, n do i = 1, min( n, j+1 ) work( i ) = work( i ) + abs( a( i, j ) ) end do end do value = zero do i = 1, n sum = work( i ) if( value < sum .or. stdlib${ii}$_disnan( sum ) ) value = sum end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n call stdlib${ii}$_dlassq( min( n, j+1 ), a( 1_${ik}$, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_dlanhs = value return end function stdlib${ii}$_dlanhs #:for rk,rt,ri in REAL_KINDS_TYPES #:if not rk in ["sp","dp"] real(${rk}$) module function stdlib${ii}$_${ri}$lanhs( norm, n, a, lda, work ) !! DLANHS: returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! Hessenberg matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_${rk}$, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: lda, n ! Array Arguments real(${rk}$), intent(in) :: a(lda,*) real(${rk}$), intent(out) :: work(*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j real(${rk}$) :: scale, sum, value ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = 1, min( n, j+1 ) sum = abs( a( i, j ) ) if( value < sum .or. stdlib${ii}$_${ri}$isnan( sum ) ) value = sum end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = 1, min( n, j+1 ) sum = sum + abs( a( i, j ) ) end do if( value < sum .or. stdlib${ii}$_${ri}$isnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, n work( i ) = zero end do do j = 1, n do i = 1, min( n, j+1 ) work( i ) = work( i ) + abs( a( i, j ) ) end do end do value = zero do i = 1, n sum = work( i ) if( value < sum .or. stdlib${ii}$_${ri}$isnan( sum ) ) value = sum end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n call stdlib${ii}$_${ri}$lassq( min( n, j+1 ), a( 1_${ik}$, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_${ri}$lanhs = value return end function stdlib${ii}$_${ri}$lanhs #:endif #:endfor real(sp) module function stdlib${ii}$_clanhs( norm, n, a, lda, work ) !! CLANHS returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! Hessenberg matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_sp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: lda, n ! Array Arguments real(sp), intent(out) :: work(*) complex(sp), intent(in) :: a(lda,*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j real(sp) :: scale, sum, value ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = 1, min( n, j+1 ) sum = abs( a( i, j ) ) if( value < sum .or. stdlib${ii}$_sisnan( sum ) ) value = sum end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = 1, min( n, j+1 ) sum = sum + abs( a( i, j ) ) end do if( value < sum .or. stdlib${ii}$_sisnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, n work( i ) = zero end do do j = 1, n do i = 1, min( n, j+1 ) work( i ) = work( i ) + abs( a( i, j ) ) end do end do value = zero do i = 1, n sum = work( i ) if( value < sum .or. stdlib${ii}$_sisnan( sum ) ) value = sum end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n call stdlib${ii}$_classq( min( n, j+1 ), a( 1_${ik}$, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_clanhs = value return end function stdlib${ii}$_clanhs real(dp) module function stdlib${ii}$_zlanhs( norm, n, a, lda, work ) !! ZLANHS returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! Hessenberg matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_dp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: lda, n ! Array Arguments real(dp), intent(out) :: work(*) complex(dp), intent(in) :: a(lda,*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j real(dp) :: scale, sum, value ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = 1, min( n, j+1 ) sum = abs( a( i, j ) ) if( value < sum .or. stdlib${ii}$_disnan( sum ) ) value = sum end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = 1, min( n, j+1 ) sum = sum + abs( a( i, j ) ) end do if( value < sum .or. stdlib${ii}$_disnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, n work( i ) = zero end do do j = 1, n do i = 1, min( n, j+1 ) work( i ) = work( i ) + abs( a( i, j ) ) end do end do value = zero do i = 1, n sum = work( i ) if( value < sum .or. stdlib${ii}$_disnan( sum ) ) value = sum end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n call stdlib${ii}$_zlassq( min( n, j+1 ), a( 1_${ik}$, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_zlanhs = value return end function stdlib${ii}$_zlanhs #:for ck,ct,ci in CMPLX_KINDS_TYPES #:if not ck in ["sp","dp"] real(${ck}$) module function stdlib${ii}$_${ci}$lanhs( norm, n, a, lda, work ) !! ZLANHS: returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! Hessenberg matrix A. ! -- lapack auxiliary routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_${ck}$, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm integer(${ik}$), intent(in) :: lda, n ! Array Arguments real(${ck}$), intent(out) :: work(*) complex(${ck}$), intent(in) :: a(lda,*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j real(${ck}$) :: scale, sum, value ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then value = zero else if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). value = zero do j = 1, n do i = 1, min( n, j+1 ) sum = abs( a( i, j ) ) if( value < sum .or. stdlib${ii}$_${c2ri(ci)}$isnan( sum ) ) value = sum end do end do else if( ( stdlib_lsame( norm, 'O' ) ) .or. ( norm=='1' ) ) then ! find norm1(a). value = zero do j = 1, n sum = zero do i = 1, min( n, j+1 ) sum = sum + abs( a( i, j ) ) end do if( value < sum .or. stdlib${ii}$_${c2ri(ci)}$isnan( sum ) ) value = sum end do else if( stdlib_lsame( norm, 'I' ) ) then ! find normi(a). do i = 1, n work( i ) = zero end do do j = 1, n do i = 1, min( n, j+1 ) work( i ) = work( i ) + abs( a( i, j ) ) end do end do value = zero do i = 1, n sum = work( i ) if( value < sum .or. stdlib${ii}$_${c2ri(ci)}$isnan( sum ) ) value = sum end do else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). scale = zero sum = one do j = 1, n call stdlib${ii}$_${ci}$lassq( min( n, j+1 ), a( 1_${ik}$, j ), 1_${ik}$, scale, sum ) end do value = scale*sqrt( sum ) end if stdlib${ii}$_${ci}$lanhs = value return end function stdlib${ii}$_${ci}$lanhs #:endif #:endfor real(sp) module function stdlib${ii}$_clanhf( norm, transr, uplo, n, a, work ) !! CLANHF returns the value of the one norm, or the Frobenius norm, or !! the infinity norm, or the element of largest absolute value of a !! complex Hermitian matrix A in RFP format. ! -- lapack computational routine -- ! -- lapack is a software package provided by univ. of tennessee, -- ! -- univ. of california berkeley, univ. of colorado denver and nag ltd..-- use stdlib_blas_constants_sp, only: negone, zero, half, one, two, three, four, eight, ten, czero, chalf, cone, cnegone ! Scalar Arguments character, intent(in) :: norm, transr, uplo integer(${ik}$), intent(in) :: n ! Array Arguments real(sp), intent(out) :: work(0_${ik}$:*) complex(sp), intent(in) :: a(0_${ik}$:*) ! ===================================================================== ! Local Scalars integer(${ik}$) :: i, j, ifm, ilu, noe, n1, k, l, lda real(sp) :: scale, s, value, aa, temp ! Intrinsic Functions ! Executable Statements if( n==0_${ik}$ ) then stdlib${ii}$_clanhf = zero return else if( n==1_${ik}$ ) then stdlib${ii}$_clanhf = abs(real(a(0_${ik}$),KIND=sp)) return end if ! set noe = 1 if n is odd. if n is even set noe=0 noe = 1_${ik}$ if( mod( n, 2_${ik}$ )==0_${ik}$ )noe = 0_${ik}$ ! set ifm = 0 when form='c' or 'c' and 1 otherwise ifm = 1_${ik}$ if( stdlib_lsame( transr, 'C' ) )ifm = 0_${ik}$ ! set ilu = 0 when uplo='u or 'u' and 1 otherwise ilu = 1_${ik}$ if( stdlib_lsame( uplo, 'U' ) )ilu = 0_${ik}$ ! set lda = (n+1)/2 when ifm = 0 ! set lda = n when ifm = 1 and noe = 1 ! set lda = n+1 when ifm = 1 and noe = 0 if( ifm==1_${ik}$ ) then if( noe==1_${ik}$ ) then lda = n else ! noe=0 lda = n + 1_${ik}$ end if else ! ifm=0 lda = ( n+1 ) / 2_${ik}$ end if if( stdlib_lsame( norm, 'M' ) ) then ! find max(abs(a(i,j))). k = ( n+1 ) / 2_${ik}$ value = zero if( noe==1_${ik}$ ) then ! n is odd if( ifm==1_${ik}$ ) then ! a is n by k if( ilu==1_${ik}$ ) then ! uplo ='l' j = 0_${ik}$ ! -> l(0,0) temp = abs( real( a( j+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = 1, n - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do do j = 1, k - 1 do i = 0, j - 2 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do i = j - 1_${ik}$ ! l(k+j,k+j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp i = j ! -> l(j,j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = j + 1, n - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end do else ! uplo = 'u' do j = 0, k - 2 do i = 0, k + j - 2 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do i = k + j - 1_${ik}$ ! -> u(i,i) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp i = i + 1_${ik}$ ! =k+j; i -> u(j,j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = k + j + 1, n - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end do do i = 0, n - 2 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp ! j=k-1 end do ! i=n-1 -> u(n-1,n-1) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end if else ! xpose case; a is k by n if( ilu==1_${ik}$ ) then ! uplo ='l' do j = 0, k - 2 do i = 0, j - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do i = j ! l(i,i) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp i = j + 1_${ik}$ ! l(j+k,j+k) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = j + 2, k - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end do j = k - 1_${ik}$ do i = 0, k - 2 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do i = k - 1_${ik}$ ! -> l(i,i) is at a(i,j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do j = k, n - 1 do i = 0, k - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end do else ! uplo = 'u' do j = 0, k - 2 do i = 0, k - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end do j = k - 1_${ik}$ ! -> u(j,j) is at a(0,j) temp = abs( real( a( 0_${ik}$+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = 1, k - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do do j = k, n - 1 do i = 0, j - k - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do i = j - k ! -> u(i,i) at a(i,j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp i = j - k + 1_${ik}$ ! u(j,j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = j - k + 2, k - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end do end if end if else ! n is even if( ifm==1_${ik}$ ) then ! a is n+1 by k if( ilu==1_${ik}$ ) then ! uplo ='l' j = 0_${ik}$ ! -> l(k,k) temp = abs( real( a( j+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp temp = abs( real( a( j+1+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = 2, n temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do do j = 1, k - 1 do i = 0, j - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do i = j ! l(k+j,k+j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp i = j + 1_${ik}$ ! -> l(j,j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = j + 2, n temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end do else ! uplo = 'u' do j = 0, k - 2 do i = 0, k + j - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do i = k + j ! -> u(i,i) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp i = i + 1_${ik}$ ! =k+j+1; i -> u(j,j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = k + j + 2, n temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end do do i = 0, n - 2 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp ! j=k-1 end do ! i=n-1 -> u(n-1,n-1) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp i = n ! -> u(k-1,k-1) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end if else ! xpose case; a is k by n+1 if( ilu==1_${ik}$ ) then ! uplo ='l' j = 0_${ik}$ ! -> l(k,k) at a(0,0) temp = abs( real( a( j+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = 1, k - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do do j = 1, k - 1 do i = 0, j - 2 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do i = j - 1_${ik}$ ! l(i,i) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp i = j ! l(j+k,j+k) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = j + 1, k - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end do j = k do i = 0, k - 2 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do i = k - 1_${ik}$ ! -> l(i,i) is at a(i,j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do j = k + 1, n do i = 0, k - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end do else ! uplo = 'u' do j = 0, k - 1 do i = 0, k - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end do j = k ! -> u(j,j) is at a(0,j) temp = abs( real( a( 0_${ik}$+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = 1, k - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do do j = k + 1, n - 1 do i = 0, j - k - 2 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do i = j - k - 1_${ik}$ ! -> u(i,i) at a(i,j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp i = j - k ! u(j,j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp do i = j - k + 1, k - 1 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end do j = n do i = 0, k - 2 temp = abs( a( i+j*lda ) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do i = k - 1_${ik}$ ! u(k,k) at a(i,j) temp = abs( real( a( i+j*lda ),KIND=sp) ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end if end if end if else if( ( stdlib_lsame( norm, 'I' ) ) .or. ( stdlib_lsame( norm, 'O' ) ) .or.( & norm=='1' ) ) then ! find normi(a) ( = norm1(a), since a is hermitian). if( ifm==1_${ik}$ ) then ! a is 'n' k = n / 2_${ik}$ if( noe==1_${ik}$ ) then ! n is odd if( ilu==0_${ik}$ ) then ! uplo = 'u' do i = 0, k - 1 work( i ) = zero end do do j = 0, k s = zero do i = 0, k + j - 1 aa = abs( a( i+j*lda ) ) ! -> a(i,j+k) s = s + aa work( i ) = work( i ) + aa end do aa = abs( real( a( i+j*lda ),KIND=sp) ) ! -> a(j+k,j+k) work( j+k ) = s + aa if( i==k+k )go to 10 i = i + 1_${ik}$ aa = abs( real( a( i+j*lda ),KIND=sp) ) ! -> a(j,j) work( j ) = work( j ) + aa s = zero do l = j + 1, k - 1 i = i + 1_${ik}$ aa = abs( a( i+j*lda ) ) ! -> a(l,j) s = s + aa work( l ) = work( l ) + aa end do work( j ) = work( j ) + s end do 10 continue value = work( 0_${ik}$ ) do i = 1, n-1 temp = work( i ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do else ! ilu = 1 k = k + 1_${ik}$ ! k=(n+1)/2 for n odd and ilu=1 do i = k, n - 1 work( i ) = zero end do do j = k - 1, 0, -1 s = zero do i = 0, j - 2 aa = abs( a( i+j*lda ) ) ! -> a(j+k,i+k) s = s + aa work( i+k ) = work( i+k ) + aa end do if( j>0_${ik}$ ) then aa = abs( real( a( i+j*lda ),KIND=sp) ) ! -> a(j+k,j+k) s = s + aa work( i+k ) = work( i+k ) + s ! i=j i = i + 1_${ik}$ end if aa = abs( real( a( i+j*lda ),KIND=sp) ) ! -> a(j,j) work( j ) = aa s = zero do l = j + 1, n - 1 i = i + 1_${ik}$ aa = abs( a( i+j*lda ) ) ! -> a(l,j) s = s + aa work( l ) = work( l ) + aa end do work( j ) = work( j ) + s end do value = work( 0_${ik}$ ) do i = 1, n-1 temp = work( i ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end if else ! n is even if( ilu==0_${ik}$ ) then ! uplo = 'u' do i = 0, k - 1 work( i ) = zero end do do j = 0, k - 1 s = zero do i = 0, k + j - 1 aa = abs( a( i+j*lda ) ) ! -> a(i,j+k) s = s + aa work( i ) = work( i ) + aa end do aa = abs( real( a( i+j*lda ),KIND=sp) ) ! -> a(j+k,j+k) work( j+k ) = s + aa i = i + 1_${ik}$ aa = abs( real( a( i+j*lda ),KIND=sp) ) ! -> a(j,j) work( j ) = work( j ) + aa s = zero do l = j + 1, k - 1 i = i + 1_${ik}$ aa = abs( a( i+j*lda ) ) ! -> a(l,j) s = s + aa work( l ) = work( l ) + aa end do work( j ) = work( j ) + s end do value = work( 0_${ik}$ ) do i = 1, n-1 temp = work( i ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do else ! ilu = 1 do i = k, n - 1 work( i ) = zero end do do j = k - 1, 0, -1 s = zero do i = 0, j - 1 aa = abs( a( i+j*lda ) ) ! -> a(j+k,i+k) s = s + aa work( i+k ) = work( i+k ) + aa end do aa = abs( real( a( i+j*lda ),KIND=sp) ) ! -> a(j+k,j+k) s = s + aa work( i+k ) = work( i+k ) + s ! i=j i = i + 1_${ik}$ aa = abs( real( a( i+j*lda ),KIND=sp) ) ! -> a(j,j) work( j ) = aa s = zero do l = j + 1, n - 1 i = i + 1_${ik}$ aa = abs( a( i+j*lda ) ) ! -> a(l,j) s = s + aa work( l ) = work( l ) + aa end do work( j ) = work( j ) + s end do value = work( 0_${ik}$ ) do i = 1, n-1 temp = work( i ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end if end if else ! ifm=0 k = n / 2_${ik}$ if( noe==1_${ik}$ ) then ! n is odd if( ilu==0_${ik}$ ) then ! uplo = 'u' n1 = k ! n/2 k = k + 1_${ik}$ ! k is the row size and lda do i = n1, n - 1 work( i ) = zero end do do j = 0, n1 - 1 s = zero do i = 0, k - 1 aa = abs( a( i+j*lda ) ) ! a(j,n1+i) work( i+n1 ) = work( i+n1 ) + aa s = s + aa end do work( j ) = s end do ! j=n1=k-1 is special s = abs( real( a( 0_${ik}$+j*lda ),KIND=sp) ) ! a(k-1,k-1) do i = 1, k - 1 aa = abs( a( i+j*lda ) ) ! a(k-1,i+n1) work( i+n1 ) = work( i+n1 ) + aa s = s + aa end do work( j ) = work( j ) + s do j = k, n - 1 s = zero do i = 0, j - k - 1 aa = abs( a( i+j*lda ) ) ! a(i,j-k) work( i ) = work( i ) + aa s = s + aa end do ! i=j-k aa = abs( real( a( i+j*lda ),KIND=sp) ) ! a(j-k,j-k) s = s + aa work( j-k ) = work( j-k ) + s i = i + 1_${ik}$ s = abs( real( a( i+j*lda ),KIND=sp) ) ! a(j,j) do l = j + 1, n - 1 i = i + 1_${ik}$ aa = abs( a( i+j*lda ) ) ! a(j,l) work( l ) = work( l ) + aa s = s + aa end do work( j ) = work( j ) + s end do value = work( 0_${ik}$ ) do i = 1, n-1 temp = work( i ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do else ! ilu=1 k = k + 1_${ik}$ ! k=(n+1)/2 for n odd and ilu=1 do i = k, n - 1 work( i ) = zero end do do j = 0, k - 2 ! process s = zero do i = 0, j - 1 aa = abs( a( i+j*lda ) ) ! a(j,i) work( i ) = work( i ) + aa s = s + aa end do aa = abs( real( a( i+j*lda ),KIND=sp) ) ! i=j so process of a(j,j) s = s + aa work( j ) = s ! is initialised here i = i + 1_${ik}$ ! i=j process a(j+k,j+k) aa = abs( real( a( i+j*lda ),KIND=sp) ) s = aa do l = k + j + 1, n - 1 i = i + 1_${ik}$ aa = abs( a( i+j*lda ) ) ! a(l,k+j) s = s + aa work( l ) = work( l ) + aa end do work( k+j ) = work( k+j ) + s end do ! j=k-1 is special :process col a(k-1,0:k-1) s = zero do i = 0, k - 2 aa = abs( a( i+j*lda ) ) ! a(k,i) work( i ) = work( i ) + aa s = s + aa end do ! i=k-1 aa = abs( real( a( i+j*lda ),KIND=sp) ) ! a(k-1,k-1) s = s + aa work( i ) = s ! done with col j=k+1 do j = k, n - 1 ! process col j of a = a(j,0:k-1) s = zero do i = 0, k - 1 aa = abs( a( i+j*lda ) ) ! a(j,i) work( i ) = work( i ) + aa s = s + aa end do work( j ) = work( j ) + s end do value = work( 0_${ik}$ ) do i = 1, n-1 temp = work( i ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end if else ! n is even if( ilu==0_${ik}$ ) then ! uplo = 'u' do i = k, n - 1 work( i ) = zero end do do j = 0, k - 1 s = zero do i = 0, k - 1 aa = abs( a( i+j*lda ) ) ! a(j,i+k) work( i+k ) = work( i+k ) + aa s = s + aa end do work( j ) = s end do ! j=k aa = abs( real( a( 0_${ik}$+j*lda ),KIND=sp) ) ! a(k,k) s = aa do i = 1, k - 1 aa = abs( a( i+j*lda ) ) ! a(k,k+i) work( i+k ) = work( i+k ) + aa s = s + aa end do work( j ) = work( j ) + s do j = k + 1, n - 1 s = zero do i = 0, j - 2 - k aa = abs( a( i+j*lda ) ) ! a(i,j-k-1) work( i ) = work( i ) + aa s = s + aa end do ! i=j-1-k aa = abs( real( a( i+j*lda ),KIND=sp) ) ! a(j-k-1,j-k-1) s = s + aa work( j-k-1 ) = work( j-k-1 ) + s i = i + 1_${ik}$ aa = abs( real( a( i+j*lda ),KIND=sp) ) ! a(j,j) s = aa do l = j + 1, n - 1 i = i + 1_${ik}$ aa = abs( a( i+j*lda ) ) ! a(j,l) work( l ) = work( l ) + aa s = s + aa end do work( j ) = work( j ) + s end do ! j=n s = zero do i = 0, k - 2 aa = abs( a( i+j*lda ) ) ! a(i,k-1) work( i ) = work( i ) + aa s = s + aa end do ! i=k-1 aa = abs( real( a( i+j*lda ),KIND=sp) ) ! a(k-1,k-1) s = s + aa work( i ) = work( i ) + s value = work( 0_${ik}$ ) do i = 1, n-1 temp = work( i ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do else ! ilu=1 do i = k, n - 1 work( i ) = zero end do ! j=0 is special :process col a(k:n-1,k) s = abs( real( a( 0_${ik}$ ),KIND=sp) ) ! a(k,k) do i = 1, k - 1 aa = abs( a( i ) ) ! a(k+i,k) work( i+k ) = work( i+k ) + aa s = s + aa end do work( k ) = work( k ) + s do j = 1, k - 1 ! process s = zero do i = 0, j - 2 aa = abs( a( i+j*lda ) ) ! a(j-1,i) work( i ) = work( i ) + aa s = s + aa end do aa = abs( real( a( i+j*lda ),KIND=sp) ) ! i=j-1 so process of a(j-1,j-1) s = s + aa work( j-1 ) = s ! is initialised here i = i + 1_${ik}$ ! i=j process a(j+k,j+k) aa = abs( real( a( i+j*lda ),KIND=sp) ) s = aa do l = k + j + 1, n - 1 i = i + 1_${ik}$ aa = abs( a( i+j*lda ) ) ! a(l,k+j) s = s + aa work( l ) = work( l ) + aa end do work( k+j ) = work( k+j ) + s end do ! j=k is special :process col a(k,0:k-1) s = zero do i = 0, k - 2 aa = abs( a( i+j*lda ) ) ! a(k,i) work( i ) = work( i ) + aa s = s + aa end do ! i=k-1 aa = abs( real( a( i+j*lda ),KIND=sp) ) ! a(k-1,k-1) s = s + aa work( i ) = s ! done with col j=k+1 do j = k + 1, n ! process col j-1 of a = a(j-1,0:k-1) s = zero do i = 0, k - 1 aa = abs( a( i+j*lda ) ) ! a(j-1,i) work( i ) = work( i ) + aa s = s + aa end do work( j-1 ) = work( j-1 ) + s end do value = work( 0_${ik}$ ) do i = 1, n-1 temp = work( i ) if( value < temp .or. stdlib${ii}$_sisnan( temp ) )value = temp end do end if end if end if else if( ( stdlib_lsame( norm, 'F' ) ) .or. ( stdlib_lsame( norm, 'E' ) ) ) & then ! find normf(a). k = ( n+1 ) / 2_${ik}$ scale = zero s = one if( noe==1_${ik}$ ) then ! n is odd if( ifm==1_${ik}$ ) then ! a is normal if( ilu==0_${ik}$ ) then ! a is upper do j = 0, k - 3 call stdlib${ii}$_classq( k-j-2, a( k+j+1+j*lda ), 1_${ik}$, scale, s ) ! l at a(k,0) end do do j = 0, k - 1 call stdlib${ii}$_classq( k+j-1, a( 0_${ik}$+j*lda ), 1_${ik}$, scale, s ) ! trap u at a(0,0) end do s = s + s ! double s for the off diagonal elements l = k - 1_${ik}$ ! -> u(k,k) at a(k-1,0) do i = 0, k - 2 aa = real( a( l ),KIND=sp) ! u(k+i,k+i) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if end if aa = real( a( l+1 ),KIND=sp) ! u(i,i) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if end if l = l + lda + 1_${ik}$ end do aa = real( a( l ),KIND=sp) ! u(n-1,n-1) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if end if else ! ilu=1 do j = 0, k - 1 call stdlib${ii}$_classq( n-j-1, a( j+1+j*lda ), 1_${ik}$, scale, s ) ! trap l at a(0,0) end do do j = 1, k - 2 call stdlib${ii}$_classq( j, a( 0_${ik}$+( 1_${ik}$+j )*lda ), 1_${ik}$, scale, s ) ! u at a(0,1) end do s = s + s ! double s for the off diagonal elements aa = real( a( 0_${ik}$ ),KIND=sp) ! l(0,0) at a(0,0) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if end if l = lda ! -> l(k,k) at a(0,1) do i = 1, k - 1 aa = real( a( l ),KIND=sp) ! l(k-1+i,k-1+i) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if end if aa = real( a( l+1 ),KIND=sp) ! l(i,i) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if end if l = l + lda + 1_${ik}$ end do end if else ! a is xpose if( ilu==0_${ik}$ ) then ! a**h is upper do j = 1, k - 2 call stdlib${ii}$_classq( j, a( 0_${ik}$+( k+j )*lda ), 1_${ik}$, scale, s ) ! u at a(0,k) end do do j = 0, k - 2 call stdlib${ii}$_classq( k, a( 0_${ik}$+j*lda ), 1_${ik}$, scale, s ) ! k by k-1 rect. at a(0,0) end do do j = 0, k - 2 call stdlib${ii}$_classq( k-j-1, a( j+1+( j+k-1 )*lda ), 1_${ik}$,scale, s ) ! l at a(0,k-1) end do s = s + s ! double s for the off diagonal elements l = 0_${ik}$ + k*lda - lda ! -> u(k-1,k-1) at a(0,k-1) aa = real( a( l ),KIND=sp) ! u(k-1,k-1) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if end if l = l + lda ! -> u(0,0) at a(0,k) do j = k, n - 1 aa = real( a( l ),KIND=sp) ! -> u(j-k,j-k) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if end if aa = real( a( l+1 ),KIND=sp) ! -> u(j,j) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if end if l = l + lda + 1_${ik}$ end do else ! a**h is lower do j = 1, k - 1 call stdlib${ii}$_classq( j, a( 0_${ik}$+j*lda ), 1_${ik}$, scale, s ) ! u at a(0,0) end do do j = k, n - 1 call stdlib${ii}$_classq( k, a( 0_${ik}$+j*lda ), 1_${ik}$, scale, s ) ! k by k-1 rect. at a(0,k) end do do j = 0, k - 3 call stdlib${ii}$_classq( k-j-2, a( j+2+j*lda ), 1_${ik}$, scale, s ) ! l at a(1,0) end do s = s + s ! double s for the off diagonal elements l = 0_${ik}$ ! -> l(0,0) at a(0,0) do i = 0, k - 2 aa = real( a( l ),KIND=sp) ! l(i,i) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if end if aa = real( a( l+1 ),KIND=sp) ! l(k+i,k+i) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if end if l = l + lda + 1_${ik}$ end do ! l-> k-1 + (k-1)*lda or l(k-1,k-1) at a(k-1,k-1) aa = real( a( l ),KIND=sp) ! l(k-1,k-1) at a(k-1,k-1) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if end if end if end if else ! n is even if( ifm==1_${ik}$ ) then ! a is normal if( ilu==0_${ik}$ ) then ! a is upper do j = 0, k - 2 call stdlib${ii}$_classq( k-j-1, a( k+j+2+j*lda ), 1_${ik}$, scale, s ) ! l at a(k+1,0) end do do j = 0, k - 1 call stdlib${ii}$_classq( k+j, a( 0_${ik}$+j*lda ), 1_${ik}$, scale, s ) ! trap u at a(0,0) end do s = s + s ! double s for the off diagonal elements l = k ! -> u(k,k) at a(k,0) do i = 0, k - 1 aa = real( a( l ),KIND=sp) ! u(k+i,k+i) if( aa/=zero ) then if( scale<aa ) then s = one + s*( scale / aa )**2_${ik}$ scale = aa else s = s + ( aa / scale )**2_${ik}$ end if