subroutine caxpy(n,ca,cx,incx,cy,incy) ! COMMENT --file caxpy.3m_blas.man !> \brief \b CAXPY ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CAXPY(N,CA,CX,INCX,CY,INCY) ! ! .. Scalar Arguments .. ! COMPLEX CA ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! COMPLEX CX(*),CY(*) ! .. ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CAXPY constant times a vector plus a vector. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] CA !> \verbatim !> CA is COMPLEX !> On entry, CA specifies the scalar alpha. !> \endverbatim !> !> \param[in] CX !> \verbatim !> CX is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of CX !> \endverbatim !> !> \param[in,out] CY !> \verbatim !> CY is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of CY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! ! code for both increments equal to 1 ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! ! END use m_blas, only : caxpy_=>caxpy implicit none complex :: ca integer :: incx,incy,n complex :: cx(*) complex :: cy(*) call caxpy_(n,ca,cx,incx,cy,incy) end subroutine caxpy subroutine CCOPY(N,CX,INCX,CY,INCY) ! COMMENT --file ccopy.3m_blas.man !> \brief \b CCOPY ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CCOPY(N,CX,INCX,CY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! COMPLEX CX(*),CY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CCOPY copies a vector x to a vector y. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] CX !> \verbatim !> CX is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of CX !> \endverbatim !> !> \param[out] CY !> \verbatim !> CY is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of CY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! ! code for both increments equal to 1 ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! END use M_blas, only : ccopy_=>CCOPY implicit none INTEGER INCX,INCY,N COMPLEX CX(*),CY(*) call CCOPY_(N,CX,INCX,CY,INCY) end subroutine CCOPY COMPLEX FUNCTION CDOTC(N,CX,INCX,CY,INCY) ! COMMENT --file cdotc.3m_blas.man !> \brief \b CDOTC ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! COMPLEX FUNCTION CDOTC(N,CX,INCX,CY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! COMPLEX CX(*),CY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CDOTC forms the dot product of two complex vectors !> CDOTC = X^H * Y !> !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] CX !> \verbatim !> CX is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of CX !> \endverbatim !> !> \param[in] CY !> \verbatim !> CY is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of CY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for both increments equal to 1 ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! END use M_blas, only : cdotc_=>CDOTC implicit none INTEGER INCX,INCY,N COMPLEX CX(*),CY(*) cdotc=CDOTC_(N,CX,INCX,CY,INCY) END FUNCTION CDOTC COMPLEX FUNCTION CDOTU(N,CX,INCX,CY,INCY) ! COMMENT --file cdotu.3m_blas.man !> \brief \b CDOTU ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! COMPLEX FUNCTION CDOTU(N,CX,INCX,CY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! COMPLEX CX(*),CY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CDOTU forms the dot product of two complex vectors !> CDOTU = X^T * Y !> !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] CX !> \verbatim !> CX is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of CX !> \endverbatim !> !> \param[in] CY !> \verbatim !> CY is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of CY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! ! code for both increments equal to 1 ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! END use M_blas, only : cdotu_=>CDOTU implicit none INTEGER INCX,INCY,N COMPLEX CX(*),CY(*) cdotu=CDOTU_(N,CX,INCX,CY,INCY) END FUNCTION CDOTU subroutine CGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file cgbmv.3m_blas.man !> \brief \b CGBMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA,BETA ! INTEGER INCX,INCY,KL,KU,LDA,M,N ! CHARACTER TRANS ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CGBMV performs one of the matrix-vector operations !> !> y := alpha*A*x + beta*y, or y := alpha*A**T*x + beta*y, or !> !> y := alpha*A**H*x + beta*y, !> !> where alpha and beta are scalars, x and y are vectors and A is an !> m by n band matrix, with kl sub-diagonals and ku super-diagonals. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' y := alpha*A*x + beta*y. !> !> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y. !> !> TRANS = 'C' or 'c' y := alpha*A**H*x + beta*y. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] KL !> \verbatim !> KL is INTEGER !> On entry, KL specifies the number of sub-diagonals of the !> matrix A. KL must satisfy 0 .le. KL. !> \endverbatim !> !> \param[in] KU !> \verbatim !> KU is INTEGER !> On entry, KU specifies the number of super-diagonals of the !> matrix A. KU must satisfy 0 .le. KU. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, N ) !> Before entry, the leading ( kl + ku + 1 ) by n part of the !> array A must contain the matrix of coefficients, supplied !> column by column, with the leading diagonal of the matrix in !> row ( ku + 1 ) of the array, the first super-diagonal !> starting at position 2 in row ku, the first sub-diagonal !> starting at position 1 in row ( ku + 2 ), and so on. !> Elements in the array A that do not correspond to elements !> in the band matrix (such as the top left ku by ku triangle) !> are not referenced. !> The following program segment will transfer a band matrix !> from conventional full matrix storage to band storage: !> !> DO 20, J = 1, N !> K = KU + 1 - J !> DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL ) !> A( K + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( kl + ku + 1 ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. !> Before entry, the incremented array X must contain the !> vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is COMPLEX array, dimension at least !> ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. !> Before entry, the incremented array Y must contain the !> vector y. On exit, Y is overwritten by the updated vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set LENX and LENY, the lengths of the vectors x and y, and set ! up the start points in X and Y. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the band part of A. ! ! First form y := beta*y. ! ! ! Form y := alpha*A*x + y. ! ! ! Form y := alpha*A**T*x + y or y := alpha*A**H*x + y. ! ! ! ! End of CGBMV . ! ! END use M_blas, only : cgbmv_=>CGBMV implicit none COMPLEX ALPHA,BETA INTEGER INCX,INCY,KL,KU,LDA,M,N CHARACTER TRANS COMPLEX A(LDA,*),X(*),Y(*) call CGBMV_(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine CGBMV subroutine CGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file cgemm.3m_blas.man !> \brief \b CGEMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA,BETA ! INTEGER K,LDA,LDB,LDC,M,N ! CHARACTER TRANSA,TRANSB ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CGEMM performs one of the matrix-matrix operations !> !> C := alpha*op( A )*op( B ) + beta*C, !> !> where op( X ) is one of !> !> op( X ) = X or op( X ) = X**T or op( X ) = X**H, !> !> alpha and beta are scalars, and A, B and C are matrices, with op( A ) !> an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] TRANSA !> \verbatim !> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n', op( A ) = A. !> !> TRANSA = 'T' or 't', op( A ) = A**T. !> !> TRANSA = 'C' or 'c', op( A ) = A**H. !> \endverbatim !> !> \param[in] TRANSB !> \verbatim !> TRANSB is CHARACTER*1 !> On entry, TRANSB specifies the form of op( B ) to be used in !> the matrix multiplication as follows: !> !> TRANSB = 'N' or 'n', op( B ) = B. !> !> TRANSB = 'T' or 't', op( B ) = B**T. !> !> TRANSB = 'C' or 'c', op( B ) = B**H. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix !> op( A ) and of the matrix C. M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix !> op( B ) and the number of columns of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry, K specifies the number of columns of the matrix !> op( A ) and the number of rows of the matrix op( B ). K must !> be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, ka ), where ka is !> k when TRANSA = 'N' or 'n', and is m otherwise. !> Before entry with TRANSA = 'N' or 'n', the leading m by k !> part of the array A must contain the matrix A, otherwise !> the leading k by m part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANSA = 'N' or 'n' then !> LDA must be at least max( 1, m ), otherwise LDA must be at !> least max( 1, k ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is COMPLEX array, dimension ( LDB, kb ), where kb is !> n when TRANSB = 'N' or 'n', and is k otherwise. !> Before entry with TRANSB = 'N' or 'n', the leading k by n !> part of the array B must contain the matrix B, otherwise !> the leading n by k part of the array B must contain the !> matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. When TRANSB = 'N' or 'n' then !> LDB must be at least max( 1, k ), otherwise LDB must be at !> least max( 1, n ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then C need not be set on input. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX array, dimension ( LDC, N ) !> Before entry, the leading m by n part of the array C must !> contain the matrix C, except when beta is zero, in which !> case C need not be set on entry. !> On exit, the array C is overwritten by the m by n matrix !> ( alpha*op( A )*op( B ) + beta*C ). !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Set NOTA and NOTB as true if A and B respectively are not ! conjugated or transposed, set CONJA and CONJB as true if A and ! B respectively are to be transposed but not conjugated and set ! NROWA and NROWB as the number of rows of A and B respectively. ! ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B + beta*C. ! ! ! Form C := alpha*A**H*B + beta*C. ! ! ! Form C := alpha*A**T*B + beta*C ! ! ! Form C := alpha*A*B**H + beta*C. ! ! ! Form C := alpha*A*B**T + beta*C ! ! ! Form C := alpha*A**H*B**H + beta*C. ! ! ! Form C := alpha*A**H*B**T + beta*C ! ! ! Form C := alpha*A**T*B**H + beta*C ! ! ! Form C := alpha*A**T*B**T + beta*C ! ! ! ! End of CGEMM . ! ! END use M_blas, only : cgemm_=>CGEMM implicit none COMPLEX ALPHA,BETA INTEGER K,LDA,LDB,LDC,M,N CHARACTER TRANSA,TRANSB COMPLEX A(LDA,*),B(LDB,*),C(LDC,*) call CGEMM_(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine CGEMM subroutine CGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file cgemv.3m_blas.man !> \brief \b CGEMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA,BETA ! INTEGER INCX,INCY,LDA,M,N ! CHARACTER TRANS ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CGEMV performs one of the matrix-vector operations !> !> y := alpha*A*x + beta*y, or y := alpha*A**T*x + beta*y, or !> !> y := alpha*A**H*x + beta*y, !> !> where alpha and beta are scalars, x and y are vectors and A is an !> m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' y := alpha*A*x + beta*y. !> !> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y. !> !> TRANS = 'C' or 'c' y := alpha*A**H*x + beta*y. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, N ) !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, m ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. !> Before entry, the incremented array X must contain the !> vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is COMPLEX array, dimension at least !> ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. !> Before entry with BETA non-zero, the incremented array Y !> must contain the vector y. On exit, Y is overwritten by the !> updated vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set LENX and LENY, the lengths of the vectors x and y, and set ! up the start points in X and Y. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! First form y := beta*y. ! ! ! Form y := alpha*A*x + y. ! ! ! Form y := alpha*A**T*x + y or y := alpha*A**H*x + y. ! ! ! ! End of CGEMV . ! ! END use M_blas, only : cgemv_=>CGEMV implicit none COMPLEX ALPHA,BETA INTEGER INCX,INCY,LDA,M,N CHARACTER TRANS COMPLEX A(LDA,*),X(*),Y(*) call CGEMV_(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine CGEMV subroutine CGERC(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! COMMENT --file cgerc.3m_blas.man !> \brief \b CGERC ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CGERC(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA ! INTEGER INCX,INCY,LDA,M,N ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CGERC performs the rank 1 operation !> !> A := alpha*x*y**H + A, !> !> where alpha is a scalar, x is an m element vector, y is an n element !> vector and A is an m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( m - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the m !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, N ) !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. On exit, A is !> overwritten by the updated matrix. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! ! End of CGERC . ! ! END use M_blas, only : cgerc_=>CGERC implicit none COMPLEX ALPHA INTEGER INCX,INCY,LDA,M,N COMPLEX A(LDA,*),X(*),Y(*) call CGERC_(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) end subroutine CGERC subroutine CGERU(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! COMMENT --file cgeru.3m_blas.man !> \brief \b CGERU ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CGERU(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA ! INTEGER INCX,INCY,LDA,M,N ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CGERU performs the rank 1 operation !> !> A := alpha*x*y**T + A, !> !> where alpha is a scalar, x is an m element vector, y is an n element !> vector and A is an m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( m - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the m !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, N ) !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. On exit, A is !> overwritten by the updated matrix. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! ! End of CGERU . ! ! END use M_blas, only : cgeru_=>CGERU implicit none COMPLEX ALPHA INTEGER INCX,INCY,LDA,M,N COMPLEX A(LDA,*),X(*),Y(*) call CGERU_(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) end subroutine CGERU subroutine CHBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file chbmv.3m_blas.man !> \brief \b CHBMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CHBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA,BETA ! INTEGER INCX,INCY,K,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CHBMV performs the matrix-vector operation !> !> y := alpha*A*x + beta*y, !> !> where alpha and beta are scalars, x and y are n element vectors and !> A is an n by n hermitian band matrix, with k super-diagonals. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the band matrix A is being supplied as !> follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> being supplied. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> being supplied. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry, K specifies the number of super-diagonals of the !> matrix A. K must satisfy 0 .le. K. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) !> by n part of the array A must contain the upper triangular !> band part of the hermitian matrix, supplied column by !> column, with the leading diagonal of the matrix in row !> ( k + 1 ) of the array, the first super-diagonal starting at !> position 2 in row k, and so on. The top left k by k triangle !> of the array A is not referenced. !> The following program segment will transfer the upper !> triangular part of a hermitian band matrix from conventional !> full matrix storage to band storage: !> !> DO 20, J = 1, N !> M = K + 1 - J !> DO 10, I = MAX( 1, J - K ), J !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) !> by n part of the array A must contain the lower triangular !> band part of the hermitian matrix, supplied column by !> column, with the leading diagonal of the matrix in row 1 of !> the array, the first sub-diagonal starting at position 1 in !> row 2, and so on. The bottom right k by k triangle of the !> array A is not referenced. !> The following program segment will transfer the lower !> triangular part of a hermitian band matrix from conventional !> full matrix storage to band storage: !> !> DO 20, J = 1, N !> M = 1 - J !> DO 10, I = J, MIN( N, J + K ) !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Note that the imaginary parts of the diagonal elements need !> not be set and are assumed to be zero. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( k + 1 ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the !> vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the !> vector y. On exit, Y is overwritten by the updated vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y. ! ! ! Start the operations. In this version the elements of the array A ! are accessed sequentially with one pass through A. ! ! First form y := beta*y. ! ! ! Form y when upper triangle of A is stored. ! ! ! Form y when lower triangle of A is stored. ! ! ! ! End of CHBMV . ! ! END use M_blas, only : chbmv_=>CHBMV implicit none COMPLEX ALPHA,BETA INTEGER INCX,INCY,K,LDA,N CHARACTER UPLO COMPLEX A(LDA,*),X(*),Y(*) call CHBMV_(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine CHBMV subroutine CHEMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file chemm.3m_blas.man !> \brief \b CHEMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CHEMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA,BETA ! INTEGER LDA,LDB,LDC,M,N ! CHARACTER SIDE,UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CHEMM performs one of the matrix-matrix operations !> !> C := alpha*A*B + beta*C, !> !> or !> !> C := alpha*B*A + beta*C, !> !> where alpha and beta are scalars, A is an hermitian matrix and B and !> C are m by n matrices. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether the hermitian matrix A !> appears on the left or right in the operation as follows: !> !> SIDE = 'L' or 'l' C := alpha*A*B + beta*C, !> !> SIDE = 'R' or 'r' C := alpha*B*A + beta*C, !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the hermitian matrix A is to be !> referenced as follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of the !> hermitian matrix is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of the !> hermitian matrix is to be referenced. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix C. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix C. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, ka ), where ka is !> m when SIDE = 'L' or 'l' and is n otherwise. !> Before entry with SIDE = 'L' or 'l', the m by m part of !> the array A must contain the hermitian matrix, such that !> when UPLO = 'U' or 'u', the leading m by m upper triangular !> part of the array A must contain the upper triangular part !> of the hermitian matrix and the strictly lower triangular !> part of A is not referenced, and when UPLO = 'L' or 'l', !> the leading m by m lower triangular part of the array A !> must contain the lower triangular part of the hermitian !> matrix and the strictly upper triangular part of A is not !> referenced. !> Before entry with SIDE = 'R' or 'r', the n by n part of !> the array A must contain the hermitian matrix, such that !> when UPLO = 'U' or 'u', the leading n by n upper triangular !> part of the array A must contain the upper triangular part !> of the hermitian matrix and the strictly lower triangular !> part of A is not referenced, and when UPLO = 'L' or 'l', !> the leading n by n lower triangular part of the array A !> must contain the lower triangular part of the hermitian !> matrix and the strictly upper triangular part of A is not !> referenced. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), otherwise LDA must be at !> least max( 1, n ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is COMPLEX array, dimension ( LDB, N ) !> Before entry, the leading m by n part of the array B must !> contain the matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then C need not be set on input. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX array, dimension ( LDC, N ) !> Before entry, the leading m by n part of the array C must !> contain the matrix C, except when beta is zero, in which !> case C need not be set on entry. !> On exit, the array C is overwritten by the m by n updated !> matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Set NROWA as the number of rows of A. ! ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B + beta*C. ! ! ! Form C := alpha*B*A + beta*C. ! ! ! ! End of CHEMM . ! ! END use M_blas, only : chemm_=>CHEMM implicit none COMPLEX ALPHA,BETA INTEGER LDA,LDB,LDC,M,N CHARACTER SIDE,UPLO COMPLEX A(LDA,*),B(LDB,*),C(LDC,*) call CHEMM_(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine CHEMM subroutine CHEMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file chemv.3m_blas.man !> \brief \b CHEMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CHEMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA,BETA ! INTEGER INCX,INCY,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CHEMV performs the matrix-vector operation !> !> y := alpha*A*x + beta*y, !> !> where alpha and beta are scalars, x and y are n element vectors and !> A is an n by n hermitian matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of A !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of A !> is to be referenced. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular part of the hermitian matrix and the strictly !> lower triangular part of A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular part of the hermitian matrix and the strictly !> upper triangular part of A is not referenced. !> Note that the imaginary parts of the diagonal elements need !> not be set and are assumed to be zero. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. On exit, Y is overwritten by the updated !> vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the triangular part ! of A. ! ! First form y := beta*y. ! ! ! Form y when A is stored in upper triangle. ! ! ! Form y when A is stored in lower triangle. ! ! ! ! End of CHEMV . ! ! END use M_blas, only : chemv_=>CHEMV implicit none COMPLEX ALPHA,BETA INTEGER INCX,INCY,LDA,N CHARACTER UPLO COMPLEX A(LDA,*),X(*),Y(*) call CHEMV_(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine CHEMV subroutine CHER2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! COMMENT --file cher2.3m_blas.man !> \brief \b CHER2 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CHER2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA ! INTEGER INCX,INCY,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CHER2 performs the hermitian rank 2 operation !> !> A := alpha*x*y**H + conjg( alpha )*y*x**H + A, !> !> where alpha is a scalar, x and y are n element vectors and A is an n !> by n hermitian matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of A !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of A !> is to be referenced. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular part of the hermitian matrix and the strictly !> lower triangular part of A is not referenced. On exit, the !> upper triangular part of the array A is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular part of the hermitian matrix and the strictly !> upper triangular part of A is not referenced. On exit, the !> lower triangular part of the array A is overwritten by the !> lower triangular part of the updated matrix. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero, and on exit they !> are set to zero. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y if the increments are not both ! unity. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the triangular part ! of A. ! ! ! Form A when A is stored in the upper triangle. ! ! ! Form A when A is stored in the lower triangle. ! ! ! ! End of CHER2 . ! ! END use M_blas, only : cher2_=>CHER2 implicit none COMPLEX ALPHA INTEGER INCX,INCY,LDA,N CHARACTER UPLO COMPLEX A(LDA,*),X(*),Y(*) call CHER2_(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) end subroutine CHER2 subroutine CHER2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file cher2k.3m_blas.man !> \brief \b CHER2K ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CHER2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA ! REAL BETA ! INTEGER K,LDA,LDB,LDC,N ! CHARACTER TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CHER2K performs one of the hermitian rank 2k operations !> !> C := alpha*A*B**H + conjg( alpha )*B*A**H + beta*C, !> !> or !> !> C := alpha*A**H*B + conjg( alpha )*B**H*A + beta*C, !> !> where alpha and beta are scalars with beta real, C is an n by n !> hermitian matrix and A and B are n by k matrices in the first case !> and k by n matrices in the second case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array C is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of C !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of C !> is to be referenced. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' C := alpha*A*B**H + !> conjg( alpha )*B*A**H + !> beta*C. !> !> TRANS = 'C' or 'c' C := alpha*A**H*B + !> conjg( alpha )*B**H*A + !> beta*C. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with TRANS = 'N' or 'n', K specifies the number !> of columns of the matrices A and B, and on entry with !> TRANS = 'C' or 'c', K specifies the number of rows of the !> matrices A and B. K must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, ka ), where ka is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array A must contain the matrix A, otherwise !> the leading k by n part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDA must be at least max( 1, n ), otherwise LDA must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is COMPLEX array, dimension ( LDB, kb ), where kb is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array B must contain the matrix B, otherwise !> the leading k by n part of the array B must contain the !> matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDB must be at least max( 1, n ), otherwise LDB must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is REAL !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX array, dimension ( LDC, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array C must contain the upper !> triangular part of the hermitian matrix and the strictly !> lower triangular part of C is not referenced. On exit, the !> upper triangular part of the array C is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array C must contain the lower !> triangular part of the hermitian matrix and the strictly !> upper triangular part of C is not referenced. On exit, the !> lower triangular part of the array C is overwritten by the !> lower triangular part of the updated matrix. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero, and on exit they !> are set to zero. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> !> -- Modified 8-Nov-93 to set C(J,J) to REAL( C(J,J) ) when BETA = 1. !> Ed Anderson, Cray Research Inc. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B**H + conjg( alpha )*B*A**H + ! C. ! ! ! Form C := alpha*A**H*B + conjg( alpha )*B**H*A + ! C. ! ! ! ! End of CHER2K. ! ! END use M_blas, only : cher2k_=>CHER2K implicit none COMPLEX ALPHA REAL BETA INTEGER K,LDA,LDB,LDC,N CHARACTER TRANS,UPLO COMPLEX A(LDA,*),B(LDB,*),C(LDC,*) call CHER2K_(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine CHER2K subroutine CHER(UPLO,N,ALPHA,X,INCX,A,LDA) ! COMMENT --file cher.3m_blas.man !> \brief \b CHER ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CHER(UPLO,N,ALPHA,X,INCX,A,LDA) ! ! .. Scalar Arguments .. ! REAL ALPHA ! INTEGER INCX,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CHER performs the hermitian rank 1 operation !> !> A := alpha*x*x**H + A, !> !> where alpha is a real scalar, x is an n element vector and A is an !> n by n hermitian matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of A !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of A !> is to be referenced. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular part of the hermitian matrix and the strictly !> lower triangular part of A is not referenced. On exit, the !> upper triangular part of the array A is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular part of the hermitian matrix and the strictly !> upper triangular part of A is not referenced. On exit, the !> lower triangular part of the array A is overwritten by the !> lower triangular part of the updated matrix. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero, and on exit they !> are set to zero. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set the start point in X if the increment is not unity. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the triangular part ! of A. ! ! ! Form A when A is stored in upper triangle. ! ! ! Form A when A is stored in lower triangle. ! ! ! ! End of CHER . ! ! END use M_blas, only : cher_=>CHER implicit none REAL ALPHA INTEGER INCX,LDA,N CHARACTER UPLO COMPLEX A(LDA,*),X(*) call CHER_(UPLO,N,ALPHA,X,INCX,A,LDA) end subroutine CHER subroutine CHERK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) ! COMMENT --file cherk.3m_blas.man !> \brief \b CHERK ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CHERK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) ! ! .. Scalar Arguments .. ! REAL ALPHA,BETA ! INTEGER K,LDA,LDC,N ! CHARACTER TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CHERK performs one of the hermitian rank k operations !> !> C := alpha*A*A**H + beta*C, !> !> or !> !> C := alpha*A**H*A + beta*C, !> !> where alpha and beta are real scalars, C is an n by n hermitian !> matrix and A is an n by k matrix in the first case and a k by n !> matrix in the second case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array C is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of C !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of C !> is to be referenced. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' C := alpha*A*A**H + beta*C. !> !> TRANS = 'C' or 'c' C := alpha*A**H*A + beta*C. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with TRANS = 'N' or 'n', K specifies the number !> of columns of the matrix A, and on entry with !> TRANS = 'C' or 'c', K specifies the number of rows of the !> matrix A. K must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, ka ), where ka is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array A must contain the matrix A, otherwise !> the leading k by n part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDA must be at least max( 1, n ), otherwise LDA must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is REAL !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX array, dimension ( LDC, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array C must contain the upper !> triangular part of the hermitian matrix and the strictly !> lower triangular part of C is not referenced. On exit, the !> upper triangular part of the array C is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array C must contain the lower !> triangular part of the hermitian matrix and the strictly !> upper triangular part of C is not referenced. On exit, the !> lower triangular part of the array C is overwritten by the !> lower triangular part of the updated matrix. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero, and on exit they !> are set to zero. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> !> -- Modified 8-Nov-93 to set C(J,J) to REAL( C(J,J) ) when BETA = 1. !> Ed Anderson, Cray Research Inc. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*A**H + beta*C. ! ! ! Form C := alpha*A**H*A + beta*C. ! ! ! ! End of CHERK . ! ! END use M_blas, only : cherk_=>CHERK implicit none REAL ALPHA,BETA INTEGER K,LDA,LDC,N CHARACTER TRANS,UPLO COMPLEX A(LDA,*),C(LDC,*) call CHERK_(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) end subroutine CHERK subroutine CHPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY) ! COMMENT --file chpmv.3m_blas.man !> \brief \b CHPMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CHPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA,BETA ! INTEGER INCX,INCY,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX AP(*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CHPMV performs the matrix-vector operation !> !> y := alpha*A*x + beta*y, !> !> where alpha and beta are scalars, x and y are n element vectors and !> A is an n by n hermitian matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the matrix A is supplied in the packed !> array AP as follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> supplied in AP. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> supplied in AP. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] AP !> \verbatim !> AP is COMPLEX array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular part of the hermitian matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) !> and a( 2, 2 ) respectively, and so on. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular part of the hermitian matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) !> and a( 3, 1 ) respectively, and so on. !> Note that the imaginary parts of the diagonal elements need !> not be set and are assumed to be zero. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. On exit, Y is overwritten by the updated !> vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y. ! ! ! Start the operations. In this version the elements of the array AP ! are accessed sequentially with one pass through AP. ! ! First form y := beta*y. ! ! ! Form y when AP contains the upper triangle. ! ! ! Form y when AP contains the lower triangle. ! ! ! ! End of CHPMV . ! ! END use M_blas, only : chpmv_=>CHPMV implicit none COMPLEX ALPHA,BETA INTEGER INCX,INCY,N CHARACTER UPLO COMPLEX AP(*),X(*),Y(*) call CHPMV_(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY) end subroutine CHPMV subroutine CHPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP) ! COMMENT --file chpr2.3m_blas.man !> \brief \b CHPR2 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CHPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA ! INTEGER INCX,INCY,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX AP(*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CHPR2 performs the hermitian rank 2 operation !> !> A := alpha*x*y**H + conjg( alpha )*y*x**H + A, !> !> where alpha is a scalar, x and y are n element vectors and A is an !> n by n hermitian matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the matrix A is supplied in the packed !> array AP as follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> supplied in AP. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> supplied in AP. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] AP !> \verbatim !> AP is COMPLEX array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular part of the hermitian matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) !> and a( 2, 2 ) respectively, and so on. On exit, the array !> AP is overwritten by the upper triangular part of the !> updated matrix. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular part of the hermitian matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) !> and a( 3, 1 ) respectively, and so on. On exit, the array !> AP is overwritten by the lower triangular part of the !> updated matrix. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero, and on exit they !> are set to zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y if the increments are not both ! unity. ! ! ! Start the operations. In this version the elements of the array AP ! are accessed sequentially with one pass through AP. ! ! ! Form A when upper triangle is stored in AP. ! ! ! Form A when lower triangle is stored in AP. ! ! ! ! End of CHPR2 . ! ! END use M_blas, only : chpr2_=>CHPR2 implicit none COMPLEX ALPHA INTEGER INCX,INCY,N CHARACTER UPLO COMPLEX AP(*),X(*),Y(*) call CHPR2_(UPLO,N,ALPHA,X,INCX,Y,INCY,AP) end subroutine CHPR2 subroutine CHPR(UPLO,N,ALPHA,X,INCX,AP) ! COMMENT --file chpr.3m_blas.man !> \brief \b CHPR ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CHPR(UPLO,N,ALPHA,X,INCX,AP) ! ! .. Scalar Arguments .. ! REAL ALPHA ! INTEGER INCX,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX AP(*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CHPR performs the hermitian rank 1 operation !> !> A := alpha*x*x**H + A, !> !> where alpha is a real scalar, x is an n element vector and A is an !> n by n hermitian matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the matrix A is supplied in the packed !> array AP as follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> supplied in AP. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> supplied in AP. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in,out] AP !> \verbatim !> AP is COMPLEX array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular part of the hermitian matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) !> and a( 2, 2 ) respectively, and so on. On exit, the array !> AP is overwritten by the upper triangular part of the !> updated matrix. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular part of the hermitian matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) !> and a( 3, 1 ) respectively, and so on. On exit, the array !> AP is overwritten by the lower triangular part of the !> updated matrix. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero, and on exit they !> are set to zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set the start point in X if the increment is not unity. ! ! ! Start the operations. In this version the elements of the array AP ! are accessed sequentially with one pass through AP. ! ! ! Form A when upper triangle is stored in AP. ! ! ! Form A when lower triangle is stored in AP. ! ! ! ! End of CHPR . ! ! END use M_blas, only : chpr_=>CHPR implicit none REAL ALPHA INTEGER INCX,N CHARACTER UPLO COMPLEX AP(*),X(*) call CHPR_(UPLO,N,ALPHA,X,INCX,AP) end subroutine CHPR subroutine CROTG(CA,CB,C,S) ! COMMENT --file crotg.3m_blas.man !> \brief \b CROTG ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CROTG(CA,CB,C,S) ! ! .. Scalar Arguments .. ! COMPLEX CA,CB,S ! REAL C ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CROTG determines a complex Givens rotation. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in,out] CA !> \verbatim !> CA is COMPLEX !> \endverbatim !> !> \param[in] CB !> \verbatim !> CB is COMPLEX !> \endverbatim !> !> \param[out] C !> \verbatim !> C is REAL !> \endverbatim !> !> \param[out] S !> \verbatim !> S is COMPLEX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex_blas_level1 ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! END use M_blas, only : crotg_=>CROTG implicit none COMPLEX CA,CB,S REAL C call CROTG_(CA,CB,C,S) end subroutine CROTG subroutine CSCAL(N,CA,CX,INCX) ! COMMENT --file cscal.3m_blas.man !> \brief \b CSCAL ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CSCAL(N,CA,CX,INCX) ! ! .. Scalar Arguments .. ! COMPLEX CA ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! COMPLEX CX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CSCAL scales a vector by a constant. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] CA !> \verbatim !> CA is COMPLEX !> On entry, CA specifies the scalar alpha. !> \endverbatim !> !> \param[in,out] CX !> \verbatim !> CX is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of CX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! ! code for increment equal to 1 ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : cscal_=>CSCAL implicit none COMPLEX CA INTEGER INCX,N COMPLEX CX(*) call CSCAL_(N,CA,CX,INCX) end subroutine CSCAL subroutine CSROT( N, CX, INCX, CY, INCY, C, S ) ! COMMENT --file csrot.3m_blas.man !> \brief \b CSROT ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CSROT( N, CX, INCX, CY, INCY, C, S ) ! ! .. Scalar Arguments .. ! INTEGER INCX, INCY, N ! REAL C, S ! .. ! .. Array Arguments .. ! COMPLEX CX( * ), CY( * ) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CSROT applies a plane rotation, where the cos and sin (c and s) are real !> and the vectors cx and cy are complex. !> jack dongarra, linpack, 3/11/78. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the vectors cx and cy. !> N must be at least zero. !> \endverbatim !> !> \param[in,out] CX !> \verbatim !> CX is COMPLEX array, dimension at least !> ( 1 + ( N - 1 )*abs( INCX ) ). !> Before entry, the incremented array CX must contain the n !> element vector cx. On exit, CX is overwritten by the updated !> vector cx. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> CX. INCX must not be zero. !> \endverbatim !> !> \param[in,out] CY !> \verbatim !> CY is COMPLEX array, dimension at least !> ( 1 + ( N - 1 )*abs( INCY ) ). !> Before entry, the incremented array CY must contain the n !> element vector cy. On exit, CY is overwritten by the updated !> vector cy. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> CY. INCY must not be zero. !> \endverbatim !> !> \param[in] C !> \verbatim !> C is REAL !> On entry, C specifies the cosine, cos. !> \endverbatim !> !> \param[in] S !> \verbatim !> S is REAL !> On entry, S specifies the sine, sin. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level1 ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Executable Statements .. ! ! ! code for both increments equal to 1 ! ! ! code for unequal increments or equal increments not equal ! to 1 ! ! END use M_blas, only : csrot_=>CSROT implicit none INTEGER INCX, INCY, N REAL C, S COMPLEX CX( * ), CY( * ) call CSROT_( N, CX, INCX, CY, INCY, C, S ) end subroutine CSROT subroutine CSSCAL(N,SA,CX,INCX) ! COMMENT --file csscal.3m_blas.man !> \brief \b CSSCAL ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CSSCAL(N,SA,CX,INCX) ! ! .. Scalar Arguments .. ! REAL SA ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! COMPLEX CX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CSSCAL scales a complex vector by a real constant. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] SA !> \verbatim !> SA is REAL !> On entry, SA specifies the scalar alpha. !> \endverbatim !> !> \param[in,out] CX !> \verbatim !> CX is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of CX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for increment equal to 1 ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : csscal_=>CSSCAL implicit none REAL SA INTEGER INCX,N COMPLEX CX(*) call CSSCAL_(N,SA,CX,INCX) end subroutine CSSCAL subroutine CSWAP(N,CX,INCX,CY,INCY) ! COMMENT --file cswap.3m_blas.man !> \brief \b CSWAP ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CSWAP(N,CX,INCX,CY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! COMPLEX CX(*),CY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CSWAP interchanges two vectors. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in,out] CX !> \verbatim !> CX is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of CX !> \endverbatim !> !> \param[in,out] CY !> \verbatim !> CY is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of CY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! ! code for both increments equal to 1 ! ! code for unequal increments or equal increments not equal ! to 1 ! ! END use M_blas, only : cswap_=>CSWAP implicit none INTEGER INCX,INCY,N COMPLEX CX(*),CY(*) call CSWAP_(N,CX,INCX,CY,INCY) end subroutine CSWAP subroutine CSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file csymm.3m_blas.man !> \brief \b CSYMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA,BETA ! INTEGER LDA,LDB,LDC,M,N ! CHARACTER SIDE,UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CSYMM performs one of the matrix-matrix operations !> !> C := alpha*A*B + beta*C, !> !> or !> !> C := alpha*B*A + beta*C, !> !> where alpha and beta are scalars, A is a symmetric matrix and B and !> C are m by n matrices. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether the symmetric matrix A !> appears on the left or right in the operation as follows: !> !> SIDE = 'L' or 'l' C := alpha*A*B + beta*C, !> !> SIDE = 'R' or 'r' C := alpha*B*A + beta*C, !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the symmetric matrix A is to be !> referenced as follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of the !> symmetric matrix is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of the !> symmetric matrix is to be referenced. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix C. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix C. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, ka ), where ka is !> m when SIDE = 'L' or 'l' and is n otherwise. !> Before entry with SIDE = 'L' or 'l', the m by m part of !> the array A must contain the symmetric matrix, such that !> when UPLO = 'U' or 'u', the leading m by m upper triangular !> part of the array A must contain the upper triangular part !> of the symmetric matrix and the strictly lower triangular !> part of A is not referenced, and when UPLO = 'L' or 'l', !> the leading m by m lower triangular part of the array A !> must contain the lower triangular part of the symmetric !> matrix and the strictly upper triangular part of A is not !> referenced. !> Before entry with SIDE = 'R' or 'r', the n by n part of !> the array A must contain the symmetric matrix, such that !> when UPLO = 'U' or 'u', the leading n by n upper triangular !> part of the array A must contain the upper triangular part !> of the symmetric matrix and the strictly lower triangular !> part of A is not referenced, and when UPLO = 'L' or 'l', !> the leading n by n lower triangular part of the array A !> must contain the lower triangular part of the symmetric !> matrix and the strictly upper triangular part of A is not !> referenced. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), otherwise LDA must be at !> least max( 1, n ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is COMPLEX array, dimension ( LDB, N ) !> Before entry, the leading m by n part of the array B must !> contain the matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then C need not be set on input. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX array, dimension ( LDC, N ) !> Before entry, the leading m by n part of the array C must !> contain the matrix C, except when beta is zero, in which !> case C need not be set on entry. !> On exit, the array C is overwritten by the m by n updated !> matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Set NROWA as the number of rows of A. ! ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B + beta*C. ! ! ! Form C := alpha*B*A + beta*C. ! ! ! ! End of CSYMM . ! ! END use M_blas, only : csymm_=>CSYMM implicit none COMPLEX ALPHA,BETA INTEGER LDA,LDB,LDC,M,N CHARACTER SIDE,UPLO COMPLEX A(LDA,*),B(LDB,*),C(LDC,*) call CSYMM_(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine CSYMM subroutine CSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file csyr2k.3m_blas.man !> \brief \b CSYR2K ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA,BETA ! INTEGER K,LDA,LDB,LDC,N ! CHARACTER TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CSYR2K performs one of the symmetric rank 2k operations !> !> C := alpha*A*B**T + alpha*B*A**T + beta*C, !> !> or !> !> C := alpha*A**T*B + alpha*B**T*A + beta*C, !> !> where alpha and beta are scalars, C is an n by n symmetric matrix !> and A and B are n by k matrices in the first case and k by n !> matrices in the second case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array C is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of C !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of C !> is to be referenced. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' C := alpha*A*B**T + alpha*B*A**T + !> beta*C. !> !> TRANS = 'T' or 't' C := alpha*A**T*B + alpha*B**T*A + !> beta*C. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with TRANS = 'N' or 'n', K specifies the number !> of columns of the matrices A and B, and on entry with !> TRANS = 'T' or 't', K specifies the number of rows of the !> matrices A and B. K must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, ka ), where ka is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array A must contain the matrix A, otherwise !> the leading k by n part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDA must be at least max( 1, n ), otherwise LDA must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is COMPLEX array, dimension ( LDB, kb ), where kb is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array B must contain the matrix B, otherwise !> the leading k by n part of the array B must contain the !> matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDB must be at least max( 1, n ), otherwise LDB must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX array, dimension ( LDC, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array C must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of C is not referenced. On exit, the !> upper triangular part of the array C is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array C must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of C is not referenced. On exit, the !> lower triangular part of the array C is overwritten by the !> lower triangular part of the updated matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B**T + alpha*B*A**T + C. ! ! ! Form C := alpha*A**T*B + alpha*B**T*A + C. ! ! ! ! End of CSYR2K. ! ! END use M_blas, only : csyr2k_=>CSYR2K implicit none COMPLEX ALPHA,BETA INTEGER K,LDA,LDB,LDC,N CHARACTER TRANS,UPLO COMPLEX A(LDA,*),B(LDB,*),C(LDC,*) call CSYR2K_(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine CSYR2K subroutine CSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) ! COMMENT --file csyrk.3m_blas.man !> \brief \b CSYRK ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA,BETA ! INTEGER K,LDA,LDC,N ! CHARACTER TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CSYRK performs one of the symmetric rank k operations !> !> C := alpha*A*A**T + beta*C, !> !> or !> !> C := alpha*A**T*A + beta*C, !> !> where alpha and beta are scalars, C is an n by n symmetric matrix !> and A is an n by k matrix in the first case and a k by n matrix !> in the second case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array C is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of C !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of C !> is to be referenced. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' C := alpha*A*A**T + beta*C. !> !> TRANS = 'T' or 't' C := alpha*A**T*A + beta*C. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with TRANS = 'N' or 'n', K specifies the number !> of columns of the matrix A, and on entry with !> TRANS = 'T' or 't', K specifies the number of rows of the !> matrix A. K must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, ka ), where ka is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array A must contain the matrix A, otherwise !> the leading k by n part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDA must be at least max( 1, n ), otherwise LDA must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX array, dimension ( LDC, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array C must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of C is not referenced. On exit, the !> upper triangular part of the array C is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array C must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of C is not referenced. On exit, the !> lower triangular part of the array C is overwritten by the !> lower triangular part of the updated matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*A**T + beta*C. ! ! ! Form C := alpha*A**T*A + beta*C. ! ! ! ! End of CSYRK . ! ! END use M_blas, only : csyrk_=>CSYRK implicit none COMPLEX ALPHA,BETA INTEGER K,LDA,LDC,N CHARACTER TRANS,UPLO COMPLEX A(LDA,*),C(LDC,*) call CSYRK_(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) end subroutine CSYRK subroutine CTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! COMMENT --file ctbmv.3m_blas.man !> \brief \b CTBMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,K,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CTBMV performs one of the matrix-vector operations !> !> x := A*x, or x := A**T*x, or x := A**H*x, !> !> where x is an n element vector and A is an n by n unit, or non-unit, !> upper or lower triangular band matrix, with ( k + 1 ) diagonals. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' x := A*x. !> !> TRANS = 'T' or 't' x := A**T*x. !> !> TRANS = 'C' or 'c' x := A**H*x. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with UPLO = 'U' or 'u', K specifies the number of !> super-diagonals of the matrix A. !> On entry with UPLO = 'L' or 'l', K specifies the number of !> sub-diagonals of the matrix A. !> K must satisfy 0 .le. K. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, N ). !> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) !> by n part of the array A must contain the upper triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row !> ( k + 1 ) of the array, the first super-diagonal starting at !> position 2 in row k, and so on. The top left k by k triangle !> of the array A is not referenced. !> The following program segment will transfer an upper !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = K + 1 - J !> DO 10, I = MAX( 1, J - K ), J !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) !> by n part of the array A must contain the lower triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row 1 of !> the array, the first sub-diagonal starting at position 1 in !> row 2, and so on. The bottom right k by k triangle of the !> array A is not referenced. !> The following program segment will transfer a lower !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = 1 - J !> DO 10, I = J, MIN( N, J + K ) !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Note that when DIAG = 'U' or 'u' the elements of the array A !> corresponding to the diagonal elements of the matrix are not !> referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( k + 1 ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. On exit, X is overwritten with the !> transformed vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! Form x := A*x. ! ! ! Form x := A**T*x or x := A**H*x. ! ! ! ! End of CTBMV . ! ! END use M_blas, only : ctbmv_=>CTBMV implicit none INTEGER INCX,K,LDA,N CHARACTER DIAG,TRANS,UPLO COMPLEX A(LDA,*),X(*) call CTBMV_(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) end subroutine CTBMV subroutine CTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! COMMENT --file ctbsv.3m_blas.man !> \brief \b CTBSV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,K,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CTBSV solves one of the systems of equations !> !> A*x = b, or A**T*x = b, or A**H*x = b, !> !> where b and x are n element vectors and A is an n by n unit, or !> non-unit, upper or lower triangular band matrix, with ( k + 1 ) !> diagonals. !> !> No test for singularity or near-singularity is included in this !> routine. Such tests must be performed before calling this routine. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the equations to be solved as !> follows: !> !> TRANS = 'N' or 'n' A*x = b. !> !> TRANS = 'T' or 't' A**T*x = b. !> !> TRANS = 'C' or 'c' A**H*x = b. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with UPLO = 'U' or 'u', K specifies the number of !> super-diagonals of the matrix A. !> On entry with UPLO = 'L' or 'l', K specifies the number of !> sub-diagonals of the matrix A. !> K must satisfy 0 .le. K. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) !> by n part of the array A must contain the upper triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row !> ( k + 1 ) of the array, the first super-diagonal starting at !> position 2 in row k, and so on. The top left k by k triangle !> of the array A is not referenced. !> The following program segment will transfer an upper !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = K + 1 - J !> DO 10, I = MAX( 1, J - K ), J !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) !> by n part of the array A must contain the lower triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row 1 of !> the array, the first sub-diagonal starting at position 1 in !> row 2, and so on. The bottom right k by k triangle of the !> array A is not referenced. !> The following program segment will transfer a lower !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = 1 - J !> DO 10, I = J, MIN( N, J + K ) !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Note that when DIAG = 'U' or 'u' the elements of the array A !> corresponding to the diagonal elements of the matrix are not !> referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( k + 1 ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element right-hand side vector b. On exit, X is overwritten !> with the solution vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed by sequentially with one pass through A. ! ! ! Form x := inv( A )*x. ! ! ! Form x := inv( A**T )*x or x := inv( A**H )*x. ! ! ! ! End of CTBSV . ! ! END use M_blas, only : ctbsv_=>CTBSV implicit none INTEGER INCX,K,LDA,N CHARACTER DIAG,TRANS,UPLO COMPLEX A(LDA,*),X(*) call CTBSV_(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) end subroutine CTBSV subroutine CTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! COMMENT --file ctpmv.3m_blas.man !> \brief \b CTPMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX AP(*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CTPMV performs one of the matrix-vector operations !> !> x := A*x, or x := A**T*x, or x := A**H*x, !> !> where x is an n element vector and A is an n by n unit, or non-unit, !> upper or lower triangular matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' x := A*x. !> !> TRANS = 'T' or 't' x := A**T*x. !> !> TRANS = 'C' or 'c' x := A**H*x. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] AP !> \verbatim !> AP is COMPLEX array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) !> respectively, and so on. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) !> respectively, and so on. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. On exit, X is overwritten with the !> transformed vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of AP are ! accessed sequentially with one pass through AP. ! ! ! Form x:= A*x. ! ! ! Form x := A**T*x or x := A**H*x. ! ! ! ! End of CTPMV . ! ! END use M_blas, only : ctpmv_=>CTPMV implicit none INTEGER INCX,N CHARACTER DIAG,TRANS,UPLO COMPLEX AP(*),X(*) call CTPMV_(UPLO,TRANS,DIAG,N,AP,X,INCX) end subroutine CTPMV subroutine CTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! COMMENT --file ctpsv.3m_blas.man !> \brief \b CTPSV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX AP(*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CTPSV solves one of the systems of equations !> !> A*x = b, or A**T*x = b, or A**H*x = b, !> !> where b and x are n element vectors and A is an n by n unit, or !> non-unit, upper or lower triangular matrix, supplied in packed form. !> !> No test for singularity or near-singularity is included in this !> routine. Such tests must be performed before calling this routine. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the equations to be solved as !> follows: !> !> TRANS = 'N' or 'n' A*x = b. !> !> TRANS = 'T' or 't' A**T*x = b. !> !> TRANS = 'C' or 'c' A**H*x = b. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] AP !> \verbatim !> AP is COMPLEX array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) !> respectively, and so on. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) !> respectively, and so on. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element right-hand side vector b. On exit, X is overwritten !> with the solution vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of AP are ! accessed sequentially with one pass through AP. ! ! ! Form x := inv( A )*x. ! ! ! Form x := inv( A**T )*x or x := inv( A**H )*x. ! ! ! ! End of CTPSV . ! ! END use M_blas, only : ctpsv_=>CTPSV implicit none INTEGER INCX,N CHARACTER DIAG,TRANS,UPLO COMPLEX AP(*),X(*) call CTPSV_(UPLO,TRANS,DIAG,N,AP,X,INCX) end subroutine CTPSV subroutine CTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! COMMENT --file ctrmm.3m_blas.man !> \brief \b CTRMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA ! INTEGER LDA,LDB,M,N ! CHARACTER DIAG,SIDE,TRANSA,UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),B(LDB,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CTRMM performs one of the matrix-matrix operations !> !> B := alpha*op( A )*B, or B := alpha*B*op( A ) !> !> where alpha is a scalar, B is an m by n matrix, A is a unit, or !> non-unit, upper or lower triangular matrix and op( A ) is one of !> !> op( A ) = A or op( A ) = A**T or op( A ) = A**H. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether op( A ) multiplies B from !> the left or right as follows: !> !> SIDE = 'L' or 'l' B := alpha*op( A )*B. !> !> SIDE = 'R' or 'r' B := alpha*B*op( A ). !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix A is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANSA !> \verbatim !> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n' op( A ) = A. !> !> TRANSA = 'T' or 't' op( A ) = A**T. !> !> TRANSA = 'C' or 'c' op( A ) = A**H. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit triangular !> as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of B. M must be at !> least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of B. N must be !> at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. When alpha is !> zero then A is not referenced and B need not be set before !> entry. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, k ), where k is m !> when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. !> Before entry with UPLO = 'U' or 'u', the leading k by k !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading k by k !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' !> then LDA must be at least max( 1, n ). !> \endverbatim !> !> \param[in,out] B !> \verbatim !> B is COMPLEX array, dimension ( LDB, N ). !> Before entry, the leading m by n part of the array B must !> contain the matrix B, and on exit is overwritten by the !> transformed matrix. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form B := alpha*A*B. ! ! ! Form B := alpha*A**T*B or B := alpha*A**H*B. ! ! ! Form B := alpha*B*A. ! ! ! Form B := alpha*B*A**T or B := alpha*B*A**H. ! ! ! ! End of CTRMM . ! ! END use M_blas, only : ctrmm_=>CTRMM implicit none COMPLEX ALPHA INTEGER LDA,LDB,M,N CHARACTER DIAG,SIDE,TRANSA,UPLO COMPLEX A(LDA,*),B(LDB,*) call CTRMM_(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) end subroutine CTRMM subroutine CTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! COMMENT --file ctrmv.3m_blas.man !> \brief \b CTRMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CTRMV performs one of the matrix-vector operations !> !> x := A*x, or x := A**T*x, or x := A**H*x, !> !> where x is an n element vector and A is an n by n unit, or non-unit, !> upper or lower triangular matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' x := A*x. !> !> TRANS = 'T' or 't' x := A**T*x. !> !> TRANS = 'C' or 'c' x := A**H*x. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, N ). !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. On exit, X is overwritten with the !> transformed vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! Form x := A*x. ! ! ! Form x := A**T*x or x := A**H*x. ! ! ! ! End of CTRMV . ! ! END use M_blas, only : ctrmv_=>CTRMV implicit none INTEGER INCX,LDA,N CHARACTER DIAG,TRANS,UPLO COMPLEX A(LDA,*),X(*) call CTRMV_(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) end subroutine CTRMV subroutine CTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! COMMENT --file ctrsm.3m_blas.man !> \brief \b CTRSM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! ! .. Scalar Arguments .. ! COMPLEX ALPHA ! INTEGER LDA,LDB,M,N ! CHARACTER DIAG,SIDE,TRANSA,UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),B(LDB,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CTRSM solves one of the matrix equations !> !> op( A )*X = alpha*B, or X*op( A ) = alpha*B, !> !> where alpha is a scalar, X and B are m by n matrices, A is a unit, or !> non-unit, upper or lower triangular matrix and op( A ) is one of !> !> op( A ) = A or op( A ) = A**T or op( A ) = A**H. !> !> The matrix X is overwritten on B. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether op( A ) appears on the left !> or right of X as follows: !> !> SIDE = 'L' or 'l' op( A )*X = alpha*B. !> !> SIDE = 'R' or 'r' X*op( A ) = alpha*B. !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix A is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANSA !> \verbatim !> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n' op( A ) = A. !> !> TRANSA = 'T' or 't' op( A ) = A**T. !> !> TRANSA = 'C' or 'c' op( A ) = A**H. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit triangular !> as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of B. M must be at !> least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of B. N must be !> at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX !> On entry, ALPHA specifies the scalar alpha. When alpha is !> zero then A is not referenced and B need not be set before !> entry. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, k ), !> where k is m when SIDE = 'L' or 'l' !> and k is n when SIDE = 'R' or 'r'. !> Before entry with UPLO = 'U' or 'u', the leading k by k !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading k by k !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' !> then LDA must be at least max( 1, n ). !> \endverbatim !> !> \param[in,out] B !> \verbatim !> B is COMPLEX array, dimension ( LDB, N ) !> Before entry, the leading m by n part of the array B must !> contain the right-hand side matrix B, and on exit is !> overwritten by the solution matrix X. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form B := alpha*inv( A )*B. ! ! ! Form B := alpha*inv( A**T )*B ! or B := alpha*inv( A**H )*B. ! ! ! Form B := alpha*B*inv( A ). ! ! ! Form B := alpha*B*inv( A**T ) ! or B := alpha*B*inv( A**H ). ! ! ! ! End of CTRSM . ! ! END use M_blas, only : ctrsm_=>CTRSM implicit none COMPLEX ALPHA INTEGER LDA,LDB,M,N CHARACTER DIAG,SIDE,TRANSA,UPLO COMPLEX A(LDA,*),B(LDB,*) call CTRSM_(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) end subroutine CTRSM subroutine CTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! COMMENT --file ctrsv.3m_blas.man !> \brief \b CTRSV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE CTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CTRSV solves one of the systems of equations !> !> A*x = b, or A**T*x = b, or A**H*x = b, !> !> where b and x are n element vectors and A is an n by n unit, or !> non-unit, upper or lower triangular matrix. !> !> No test for singularity or near-singularity is included in this !> routine. Such tests must be performed before calling this routine. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the equations to be solved as !> follows: !> !> TRANS = 'N' or 'n' A*x = b. !> !> TRANS = 'T' or 't' A**T*x = b. !> !> TRANS = 'C' or 'c' A**H*x = b. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is COMPLEX array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element right-hand side vector b. On exit, X is overwritten !> with the solution vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! Form x := inv( A )*x. ! ! ! Form x := inv( A**T )*x or x := inv( A**H )*x. ! ! ! ! End of CTRSV . ! ! END use M_blas, only : ctrsv_=>CTRSV implicit none INTEGER INCX,LDA,N CHARACTER DIAG,TRANS,UPLO COMPLEX A(LDA,*),X(*) call CTRSV_(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) end subroutine CTRSV DOUBLE PRECISION FUNCTION DASUM(N,DX,INCX) ! COMMENT --file dasum.3m_blas.man !> \brief \b DASUM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! DOUBLE PRECISION FUNCTION DASUM(N,DX,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! DOUBLE PRECISION DX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DASUM takes the sum of the absolute values. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] DX !> \verbatim !> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of DX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! code for increment equal to 1 ! ! ! clean-up loop ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : dasum_=>DASUM implicit none INTEGER INCX,N DOUBLE PRECISION DX(*) dasum=DASUM_(N,DX,INCX) END FUNCTION DASUM subroutine DAXPY(N,DA,DX,INCX,DY,INCY) ! COMMENT --file daxpy.3m_blas.man !> \brief \b DAXPY ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION DA ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! DOUBLE PRECISION DX(*),DY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DAXPY constant times a vector plus a vector. !> uses unrolled loops for increments equal to one. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] DA !> \verbatim !> DA is DOUBLE PRECISION !> On entry, DA specifies the scalar alpha. !> \endverbatim !> !> \param[in] DX !> \verbatim !> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of DX !> \endverbatim !> !> \param[in,out] DY !> \verbatim !> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of DY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for both increments equal to 1 ! ! ! clean-up loop ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! END use M_blas, only : daxpy_=>DAXPY implicit none DOUBLE PRECISION DA INTEGER INCX,INCY,N DOUBLE PRECISION DX(*),DY(*) call DAXPY_(N,DA,DX,INCX,DY,INCY) end subroutine DAXPY DOUBLE PRECISION FUNCTION DCABS1(Z) ! COMMENT --file dcabs1.3m_blas.man !> \brief \b DCABS1 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! DOUBLE PRECISION FUNCTION DCABS1(Z) ! ! .. Scalar Arguments .. ! COMPLEX*16 Z ! .. ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DCABS1 computes |Re(.)| + |Im(.)| of a double complex number !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] Z !> \verbatim !> Z is COMPLEX*16 !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. ! ===================================================================== ! ! .. Intrinsic Functions .. ! ! END use M_blas, only : dcabs1_=>DCABS1 implicit none COMPLEX*16 Z dcabs1=DCABS1_(Z) END FUNCTION DCABS1 subroutine DCOPY(N,DX,INCX,DY,INCY) ! COMMENT --file dcopy.3m_blas.man !> \brief \b DCOPY ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DCOPY(N,DX,INCX,DY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! DOUBLE PRECISION DX(*),DY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DCOPY copies a vector, x, to a vector, y. !> uses unrolled loops for increments equal to 1. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] DX !> \verbatim !> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of DX !> \endverbatim !> !> \param[out] DY !> \verbatim !> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of DY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for both increments equal to 1 ! ! ! clean-up loop ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! END use M_blas, only : dcopy_=>DCOPY implicit none INTEGER INCX,INCY,N DOUBLE PRECISION DX(*),DY(*) call DCOPY_(N,DX,INCX,DY,INCY) end subroutine DCOPY DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY) ! COMMENT --file ddot.3m_blas.man !> \brief \b DDOT ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! DOUBLE PRECISION DX(*),DY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DDOT forms the dot product of two vectors. !> uses unrolled loops for increments equal to one. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] DX !> \verbatim !> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of DX !> \endverbatim !> !> \param[in] DY !> \verbatim !> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of DY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for both increments equal to 1 ! ! ! clean-up loop ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! END use M_blas, only : ddot_=>DDOT implicit none INTEGER INCX,INCY,N DOUBLE PRECISION DX(*),DY(*) ddot=DDOT_(N,DX,INCX,DY,INCY) END FUNCTION DDOT subroutine DGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file dgbmv.3m_blas.man !> \brief \b DGBMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA,BETA ! INTEGER INCX,INCY,KL,KU,LDA,M,N ! CHARACTER TRANS ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DGBMV performs one of the matrix-vector operations !> !> y := alpha*A*x + beta*y, or y := alpha*A**T*x + beta*y, !> !> where alpha and beta are scalars, x and y are vectors and A is an !> m by n band matrix, with kl sub-diagonals and ku super-diagonals. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' y := alpha*A*x + beta*y. !> !> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y. !> !> TRANS = 'C' or 'c' y := alpha*A**T*x + beta*y. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] KL !> \verbatim !> KL is INTEGER !> On entry, KL specifies the number of sub-diagonals of the !> matrix A. KL must satisfy 0 .le. KL. !> \endverbatim !> !> \param[in] KU !> \verbatim !> KU is INTEGER !> On entry, KU specifies the number of super-diagonals of the !> matrix A. KU must satisfy 0 .le. KU. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, N ) !> Before entry, the leading ( kl + ku + 1 ) by n part of the !> array A must contain the matrix of coefficients, supplied !> column by column, with the leading diagonal of the matrix in !> row ( ku + 1 ) of the array, the first super-diagonal !> starting at position 2 in row ku, the first sub-diagonal !> starting at position 1 in row ( ku + 2 ), and so on. !> Elements in the array A that do not correspond to elements !> in the band matrix (such as the top left ku by ku triangle) !> are not referenced. !> The following program segment will transfer a band matrix !> from conventional full matrix storage to band storage: !> !> DO 20, J = 1, N !> K = KU + 1 - J !> DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL ) !> A( K + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( kl + ku + 1 ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. !> Before entry, the incremented array X must contain the !> vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is DOUBLE PRECISION. !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is DOUBLE PRECISION array, dimension at least !> ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. !> Before entry, the incremented array Y must contain the !> vector y. On exit, Y is overwritten by the updated vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set LENX and LENY, the lengths of the vectors x and y, and set ! up the start points in X and Y. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the band part of A. ! ! First form y := beta*y. ! ! ! Form y := alpha*A*x + y. ! ! ! Form y := alpha*A**T*x + y. ! ! ! ! End of DGBMV . ! ! END use M_blas, only : dgbmv_=>DGBMV implicit none DOUBLE PRECISION ALPHA,BETA INTEGER INCX,INCY,KL,KU,LDA,M,N CHARACTER TRANS DOUBLE PRECISION A(LDA,*),X(*),Y(*) call DGBMV_(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) END SUBROUTINE DGBMV subroutine DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file dgemm.3m_blas.man !> \brief \b DGEMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA,BETA ! INTEGER K,LDA,LDB,LDC,M,N ! CHARACTER TRANSA,TRANSB ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DGEMM performs one of the matrix-matrix operations !> !> C := alpha*op( A )*op( B ) + beta*C, !> !> where op( X ) is one of !> !> op( X ) = X or op( X ) = X**T, !> !> alpha and beta are scalars, and A, B and C are matrices, with op( A ) !> an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] TRANSA !> \verbatim !> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n', op( A ) = A. !> !> TRANSA = 'T' or 't', op( A ) = A**T. !> !> TRANSA = 'C' or 'c', op( A ) = A**T. !> \endverbatim !> !> \param[in] TRANSB !> \verbatim !> TRANSB is CHARACTER*1 !> On entry, TRANSB specifies the form of op( B ) to be used in !> the matrix multiplication as follows: !> !> TRANSB = 'N' or 'n', op( B ) = B. !> !> TRANSB = 'T' or 't', op( B ) = B**T. !> !> TRANSB = 'C' or 'c', op( B ) = B**T. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix !> op( A ) and of the matrix C. M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix !> op( B ) and the number of columns of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry, K specifies the number of columns of the matrix !> op( A ) and the number of rows of the matrix op( B ). K must !> be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, ka ), where ka is !> k when TRANSA = 'N' or 'n', and is m otherwise. !> Before entry with TRANSA = 'N' or 'n', the leading m by k !> part of the array A must contain the matrix A, otherwise !> the leading k by m part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANSA = 'N' or 'n' then !> LDA must be at least max( 1, m ), otherwise LDA must be at !> least max( 1, k ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is DOUBLE PRECISION array, dimension ( LDB, kb ), where kb is !> n when TRANSB = 'N' or 'n', and is k otherwise. !> Before entry with TRANSB = 'N' or 'n', the leading k by n !> part of the array B must contain the matrix B, otherwise !> the leading n by k part of the array B must contain the !> matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. When TRANSB = 'N' or 'n' then !> LDB must be at least max( 1, k ), otherwise LDB must be at !> least max( 1, n ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is DOUBLE PRECISION. !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then C need not be set on input. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is DOUBLE PRECISION array, dimension ( LDC, N ) !> Before entry, the leading m by n part of the array C must !> contain the matrix C, except when beta is zero, in which !> case C need not be set on entry. !> On exit, the array C is overwritten by the m by n matrix !> ( alpha*op( A )*op( B ) + beta*C ). !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Set NOTA and NOTB as true if A and B respectively are not ! transposed and set NROWA and NROWB as the number of rows of A ! and B respectively. ! ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! And if alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B + beta*C. ! ! ! Form C := alpha*A**T*B + beta*C ! ! ! Form C := alpha*A*B**T + beta*C ! ! ! Form C := alpha*A**T*B**T + beta*C ! ! ! ! End of DGEMM . ! ! END use M_blas, only : dgemm_=>DGEMM implicit none DOUBLE PRECISION ALPHA,BETA INTEGER K,LDA,LDB,LDC,M,N CHARACTER TRANSA,TRANSB DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) call DGEMM_(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine DGEMM subroutine DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file dgemv.3m_blas.man !> \brief \b DGEMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA,BETA ! INTEGER INCX,INCY,LDA,M,N ! CHARACTER TRANS ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DGEMV performs one of the matrix-vector operations !> !> y := alpha*A*x + beta*y, or y := alpha*A**T*x + beta*y, !> !> where alpha and beta are scalars, x and y are vectors and A is an !> m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' y := alpha*A*x + beta*y. !> !> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y. !> !> TRANS = 'C' or 'c' y := alpha*A**T*x + beta*y. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, N ) !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, m ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. !> Before entry, the incremented array X must contain the !> vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is DOUBLE PRECISION. !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is DOUBLE PRECISION array, dimension at least !> ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. !> Before entry with BETA non-zero, the incremented array Y !> must contain the vector y. On exit, Y is overwritten by the !> updated vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set LENX and LENY, the lengths of the vectors x and y, and set ! up the start points in X and Y. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! First form y := beta*y. ! ! ! Form y := alpha*A*x + y. ! ! ! Form y := alpha*A**T*x + y. ! ! ! ! End of DGEMV . ! ! END use M_blas, only : dgemv_=>DGEMV implicit none DOUBLE PRECISION ALPHA,BETA INTEGER INCX,INCY,LDA,M,N CHARACTER TRANS DOUBLE PRECISION A(LDA,*),X(*),Y(*) call DGEMV_(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine DGEMV subroutine DGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! COMMENT --file dger.3m_blas.man !> \brief \b DGER ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA ! INTEGER INCX,INCY,LDA,M,N ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DGER performs the rank 1 operation !> !> A := alpha*x*y**T + A, !> !> where alpha is a scalar, x is an m element vector, y is an n element !> vector and A is an m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( m - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the m !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, N ) !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. On exit, A is !> overwritten by the updated matrix. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! ! End of DGER . ! ! END use M_blas, only : dger_=>DGER implicit none DOUBLE PRECISION ALPHA INTEGER INCX,INCY,LDA,M,N DOUBLE PRECISION A(LDA,*),X(*),Y(*) call DGER_(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) end subroutine DGER DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX) ! COMMENT --file dnrm2.3m_blas.man !> \brief \b DNRM2 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! DOUBLE PRECISION X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DNRM2 returns the euclidean norm of a vector via the function !> name, so that !> !> DNRM2 := sqrt( x'*x ) !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] X !> \verbatim !> X is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of DX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> -- This version written on 25-October-1982. !> Modified on 14-October-1993 to inline the call to DLASSQ. !> Sven Hammarling, Nag Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! The following loop is equivalent to this call to the LAPACK ! auxiliary routine: ! CALL DLASSQ( N, X, INCX, SCALE, SSQ ) ! ! ! ! End of DNRM2. ! ! END use M_blas, only : dnrm2_=>DNRM2 implicit none INTEGER INCX,N DOUBLE PRECISION X(*) dnrm2=DNRM2_(N,X,INCX) END FUNCTION DNRM2 subroutine DROT(N,DX,INCX,DY,INCY,C,S) ! COMMENT --file drot.3m_blas.man !> \brief \b DROT ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DROT(N,DX,INCX,DY,INCY,C,S) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION C,S ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! DOUBLE PRECISION DX(*),DY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DROT applies a plane rotation. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in,out] DX !> \verbatim !> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of DX !> \endverbatim !> !> \param[in,out] DY !> \verbatim !> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of DY !> \endverbatim !> !> \param[in] C !> \verbatim !> C is DOUBLE PRECISION !> \endverbatim !> !> \param[in] S !> \verbatim !> S is DOUBLE PRECISION !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! ! code for both increments equal to 1 ! ! ! code for unequal increments or equal increments not equal ! to 1 ! ! END use M_blas, only : drot_=>DROT implicit none DOUBLE PRECISION C,S INTEGER INCX,INCY,N DOUBLE PRECISION DX(*),DY(*) call DROT_(N,DX,INCX,DY,INCY,C,S) end subroutine DROT subroutine DROTG(DA,DB,C,S) ! COMMENT --file drotg.3m_blas.man !> \brief \b DROTG ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DROTG(DA,DB,C,S) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION C,DA,DB,S ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DROTG construct givens plane rotation. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in,out] DA !> \verbatim !> DA is DOUBLE PRECISION !> \endverbatim !> !> \param[in,out] DB !> \verbatim !> DB is DOUBLE PRECISION !> \endverbatim !> !> \param[out] C !> \verbatim !> C is DOUBLE PRECISION !> \endverbatim !> !> \param[out] S !> \verbatim !> S is DOUBLE PRECISION !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! END use M_blas, only : drotg_=>DROTG implicit none DOUBLE PRECISION C,DA,DB,S call DROTG_(DA,DB,C,S) end subroutine DROTG subroutine DROTM(N,DX,INCX,DY,INCY,DPARAM) ! COMMENT --file drotm.3m_blas.man !> \brief \b DROTM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DROTM(N,DX,INCX,DY,INCY,DPARAM) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! DOUBLE PRECISION DPARAM(5),DX(*),DY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX !> !> (DX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF DX ARE IN !> (DY**T) !> !> DX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE !> LX = (-INCX)*N, AND SIMILARLY FOR SY USING LY AND INCY. !> WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS.. !> !> DFLAG=-1.D0 DFLAG=0.D0 DFLAG=1.D0 DFLAG=-2.D0 !> !> (DH11 DH12) (1.D0 DH12) (DH11 1.D0) (1.D0 0.D0) !> H=( ) ( ) ( ) ( ) !> (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0). !> SEE DROTMG FOR A DESCRIPTION OF DATA STORAGE IN DPARAM. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in,out] DX !> \verbatim !> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of DX !> \endverbatim !> !> \param[in,out] DY !> \verbatim !> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of DY !> \endverbatim !> !> \param[in] DPARAM !> \verbatim !> DPARAM is DOUBLE PRECISION array, dimension (5) !> DPARAM(1)=DFLAG !> DPARAM(2)=DH11 !> DPARAM(3)=DH21 !> DPARAM(4)=DH12 !> DPARAM(5)=DH22 !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Data statements .. ! .. ! ! ! ! END use M_blas, only : drotm_=>DROTM implicit none INTEGER INCX,INCY,N DOUBLE PRECISION DPARAM(5),DX(*),DY(*) call DROTM_(N,DX,INCX,DY,INCY,DPARAM) end subroutine DROTM subroutine DROTMG(DD1,DD2,DX1,DY1,DPARAM) ! COMMENT --file drotmg.3m_blas.man !> \brief \b DROTMG ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DROTMG(DD1,DD2,DX1,DY1,DPARAM) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION DD1,DD2,DX1,DY1 ! .. ! .. Array Arguments .. ! DOUBLE PRECISION DPARAM(5) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS !> THE SECOND COMPONENT OF THE 2-VECTOR (DSQRT(DD1)*DX1,DSQRT(DD2)*> DY2)**T. !> WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS.. !> !> DFLAG=-1.D0 DFLAG=0.D0 DFLAG=1.D0 DFLAG=-2.D0 !> !> (DH11 DH12) (1.D0 DH12) (DH11 1.D0) (1.D0 0.D0) !> H=( ) ( ) ( ) ( ) !> (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0). !> LOCATIONS 2-4 OF DPARAM CONTAIN DH11, DH21, DH12, AND DH22 !> RESPECTIVELY. (VALUES OF 1.D0, -1.D0, OR 0.D0 IMPLIED BY THE !> VALUE OF DPARAM(1) ARE NOT STORED IN DPARAM.) !> !> THE VALUES OF GAMSQ AND RGAMSQ SET IN THE DATA STATEMENT MAY BE !> INEXACT. THIS IS OK AS THEY ARE ONLY USED FOR TESTING THE SIZE !> OF DD1 AND DD2. ALL ACTUAL SCALING OF DATA IS DONE USING GAM. !> !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in,out] DD1 !> \verbatim !> DD1 is DOUBLE PRECISION !> \endverbatim !> !> \param[in,out] DD2 !> \verbatim !> DD2 is DOUBLE PRECISION !> \endverbatim !> !> \param[in,out] DX1 !> \verbatim !> DX1 is DOUBLE PRECISION !> \endverbatim !> !> \param[in] DY1 !> \verbatim !> DY1 is DOUBLE PRECISION !> \endverbatim !> !> \param[out] DPARAM !> \verbatim !> DPARAM is DOUBLE PRECISION array, dimension (5) !> DPARAM(1)=DFLAG !> DPARAM(2)=DH11 !> DPARAM(3)=DH21 !> DPARAM(4)=DH12 !> DPARAM(5)=DH22 !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Data statements .. ! ! .. ! GO ZERO-H-D-AND-DX1.. ! ! CASE-DD1-NONNEGATIVE ! REGULAR-CASE.. ! ! ! ! This code path if here for safety. We do not expect this ! condition to ever hold except in edge cases with rounding ! errors. See DOI: 10.1145/355841.355847 ! ! GO ZERO-H-D-AND-DX1.. ! ! PROCEDURE..SCALE-CHECK ! END use M_blas, only : drotmg_=>DROTMG implicit none DOUBLE PRECISION DD1,DD2,DX1,DY1 DOUBLE PRECISION DPARAM(5) call DROTMG_(DD1,DD2,DX1,DY1,DPARAM) end subroutine DROTMG subroutine DSBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file dsbmv.3m_blas.man !> \brief \b DSBMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DSBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA,BETA ! INTEGER INCX,INCY,K,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DSBMV performs the matrix-vector operation !> !> y := alpha*A*x + beta*y, !> !> where alpha and beta are scalars, x and y are n element vectors and !> A is an n by n symmetric band matrix, with k super-diagonals. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the band matrix A is being supplied as !> follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> being supplied. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> being supplied. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry, K specifies the number of super-diagonals of the !> matrix A. K must satisfy 0 .le. K. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) !> by n part of the array A must contain the upper triangular !> band part of the symmetric matrix, supplied column by !> column, with the leading diagonal of the matrix in row !> ( k + 1 ) of the array, the first super-diagonal starting at !> position 2 in row k, and so on. The top left k by k triangle !> of the array A is not referenced. !> The following program segment will transfer the upper !> triangular part of a symmetric band matrix from conventional !> full matrix storage to band storage: !> !> DO 20, J = 1, N !> M = K + 1 - J !> DO 10, I = MAX( 1, J - K ), J !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) !> by n part of the array A must contain the lower triangular !> band part of the symmetric matrix, supplied column by !> column, with the leading diagonal of the matrix in row 1 of !> the array, the first sub-diagonal starting at position 1 in !> row 2, and so on. The bottom right k by k triangle of the !> array A is not referenced. !> The following program segment will transfer the lower !> triangular part of a symmetric band matrix from conventional !> full matrix storage to band storage: !> !> DO 20, J = 1, N !> M = 1 - J !> DO 10, I = J, MIN( N, J + K ) !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( k + 1 ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the !> vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is DOUBLE PRECISION. !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the !> vector y. On exit, Y is overwritten by the updated vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y. ! ! ! Start the operations. In this version the elements of the array A ! are accessed sequentially with one pass through A. ! ! First form y := beta*y. ! ! ! Form y when upper triangle of A is stored. ! ! ! Form y when lower triangle of A is stored. ! ! ! ! End of DSBMV . ! ! END use M_blas, only : dsbmv_=>DSBMV implicit none DOUBLE PRECISION ALPHA,BETA INTEGER INCX,INCY,K,LDA,N CHARACTER UPLO DOUBLE PRECISION A(LDA,*),X(*),Y(*) call DSBMV_(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine DSBMV subroutine DSCAL(N,DA,DX,INCX) ! COMMENT --file dscal.3m_blas.man !> \brief \b DSCAL ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DSCAL(N,DA,DX,INCX) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION DA ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! DOUBLE PRECISION DX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DSCAL scales a vector by a constant. !> uses unrolled loops for increment equal to 1. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] DA !> \verbatim !> DA is DOUBLE PRECISION !> On entry, DA specifies the scalar alpha. !> \endverbatim !> !> \param[in,out] DX !> \verbatim !> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of DX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for increment equal to 1 ! ! ! clean-up loop ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : dscal_=>DSCAL implicit none DOUBLE PRECISION DA INTEGER INCX,N DOUBLE PRECISION DX(*) call DSCAL_(N,DA,DX,INCX) end subroutine DSCAL DOUBLE PRECISION FUNCTION DSDOT(N,SX,INCX,SY,INCY) ! COMMENT --file dsdot.3m_blas.man !> \brief \b DSDOT ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! DOUBLE PRECISION FUNCTION DSDOT(N,SX,INCX,SY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! REAL SX(*),SY(*) ! .. ! ! AUTHORS ! ======= ! Lawson, C. L., (JPL), Hanson, R. J., (SNLA), ! Kincaid, D. R., (U. of Texas), Krogh, F. T., (JPL) ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> Compute the inner product of two vectors with extended !> precision accumulation and result. !> !> Returns D.P. dot product accumulated in D.P., for S.P. SX and SY !> DSDOT = sum for I = 0 to N-1 of SX(LX+I*INCX) * SY(LY+I*INCY), !> where LX = 1 if INCX .GE. 0, else LX = 1+(1-N)*INCX, and LY is !> defined in a similar way using INCY. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] SX !> \verbatim !> SX is REAL array, dimension(N) !> single precision vector with N elements !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim !> !> \param[in] SY !> \verbatim !> SY is REAL array, dimension(N) !> single precision vector with N elements !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of SY !> \endverbatim !> !> \result DSDOT !> \verbatim !> DSDOT is DOUBLE PRECISION !> DSDOT double precision dot product (zero if N.LE.0) !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> \endverbatim ! !> \par References: ! ================ !> !> \verbatim !> !> !> C. L. Lawson, R. J. Hanson, D. R. Kincaid and F. T. !> Krogh, Basic linear algebra subprograms for Fortran !> usage, Algorithm No. 539, Transactions on Mathematical !> Software 5, 3 (September 1979), pp. 308-323. !> !> REVISION HISTORY (YYMMDD) !> !> 791001 DATE WRITTEN !> 890831 Modified array declarations. (WRB) !> 890831 REVISION DATE from Version 3.2 !> 891214 Prologue converted to Version 4.0 format. (BAB) !> 920310 Corrected definition of LX in DESCRIPTION. (WRB) !> 920501 Reformatted the REFERENCES section. (WRB) !> 070118 Reformat to LAPACK style (JL) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! Authors: ! ======== ! Lawson, C. L., (JPL), Hanson, R. J., (SNLA), ! Kincaid, D. R., (U. of Texas), Krogh, F. T., (JPL) ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Code for equal, positive, non-unit increments. ! ! ! Code for unequal or nonpositive increments. ! ! END use M_blas, only : dsdot_=>DSDOT implicit none INTEGER INCX,INCY,N REAL SX(*),SY(*) dsdot=DSDOT_(N,SX,INCX,SY,INCY) END FUNCTION DSDOT subroutine DSPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY) ! COMMENT --file dspmv.3m_blas.man !> \brief \b DSPMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DSPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA,BETA ! INTEGER INCX,INCY,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION AP(*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DSPMV performs the matrix-vector operation !> !> y := alpha*A*x + beta*y, !> !> where alpha and beta are scalars, x and y are n element vectors and !> A is an n by n symmetric matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the matrix A is supplied in the packed !> array AP as follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> supplied in AP. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> supplied in AP. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] AP !> \verbatim !> AP is DOUBLE PRECISION array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular part of the symmetric matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) !> and a( 2, 2 ) respectively, and so on. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular part of the symmetric matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) !> and a( 3, 1 ) respectively, and so on. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is DOUBLE PRECISION. !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. On exit, Y is overwritten by the updated !> vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y. ! ! ! Start the operations. In this version the elements of the array AP ! are accessed sequentially with one pass through AP. ! ! First form y := beta*y. ! ! ! Form y when AP contains the upper triangle. ! ! ! Form y when AP contains the lower triangle. ! ! ! ! End of DSPMV . ! ! END use M_blas, only : dspmv_=>DSPMV implicit none DOUBLE PRECISION ALPHA,BETA INTEGER INCX,INCY,N CHARACTER UPLO DOUBLE PRECISION AP(*),X(*),Y(*) call DSPMV_(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY) end subroutine DSPMV subroutine DSPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP) ! COMMENT --file dspr2.3m_blas.man !> \brief \b DSPR2 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DSPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA ! INTEGER INCX,INCY,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION AP(*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DSPR2 performs the symmetric rank 2 operation !> !> A := alpha*x*y**T + alpha*y*x**T + A, !> !> where alpha is a scalar, x and y are n element vectors and A is an !> n by n symmetric matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the matrix A is supplied in the packed !> array AP as follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> supplied in AP. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> supplied in AP. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] AP !> \verbatim !> AP is DOUBLE PRECISION array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular part of the symmetric matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) !> and a( 2, 2 ) respectively, and so on. On exit, the array !> AP is overwritten by the upper triangular part of the !> updated matrix. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular part of the symmetric matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) !> and a( 3, 1 ) respectively, and so on. On exit, the array !> AP is overwritten by the lower triangular part of the !> updated matrix. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y if the increments are not both ! unity. ! ! ! Start the operations. In this version the elements of the array AP ! are accessed sequentially with one pass through AP. ! ! ! Form A when upper triangle is stored in AP. ! ! ! Form A when lower triangle is stored in AP. ! ! ! ! End of DSPR2 . ! ! END use M_blas, only : dspr2_=>DSPR2 implicit none DOUBLE PRECISION ALPHA INTEGER INCX,INCY,N CHARACTER UPLO DOUBLE PRECISION AP(*),X(*),Y(*) call DSPR2_(UPLO,N,ALPHA,X,INCX,Y,INCY,AP) end subroutine DSPR2 subroutine DSPR(UPLO,N,ALPHA,X,INCX,AP) ! COMMENT --file dspr.3m_blas.man !> \brief \b DSPR ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DSPR(UPLO,N,ALPHA,X,INCX,AP) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA ! INTEGER INCX,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION AP(*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DSPR performs the symmetric rank 1 operation !> !> A := alpha*x*x**T + A, !> !> where alpha is a real scalar, x is an n element vector and A is an !> n by n symmetric matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the matrix A is supplied in the packed !> array AP as follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> supplied in AP. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> supplied in AP. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in,out] AP !> \verbatim !> AP is DOUBLE PRECISION array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular part of the symmetric matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) !> and a( 2, 2 ) respectively, and so on. On exit, the array !> AP is overwritten by the upper triangular part of the !> updated matrix. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular part of the symmetric matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) !> and a( 3, 1 ) respectively, and so on. On exit, the array !> AP is overwritten by the lower triangular part of the !> updated matrix. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set the start point in X if the increment is not unity. ! ! ! Start the operations. In this version the elements of the array AP ! are accessed sequentially with one pass through AP. ! ! ! Form A when upper triangle is stored in AP. ! ! ! Form A when lower triangle is stored in AP. ! ! ! ! End of DSPR . ! ! END use M_blas, only : dspr_=>DSPR implicit none DOUBLE PRECISION ALPHA INTEGER INCX,N CHARACTER UPLO DOUBLE PRECISION AP(*),X(*) call DSPR_(UPLO,N,ALPHA,X,INCX,AP) end subroutine DSPR subroutine DSWAP(N,DX,INCX,DY,INCY) ! COMMENT --file dswap.3m_blas.man !> \brief \b DSWAP ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DSWAP(N,DX,INCX,DY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! DOUBLE PRECISION DX(*),DY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DSWAP interchanges two vectors. !> uses unrolled loops for increments equal to 1. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in,out] DX !> \verbatim !> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of DX !> \endverbatim !> !> \param[in,out] DY !> \verbatim !> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of DY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for both increments equal to 1 ! ! ! clean-up loop ! ! ! code for unequal increments or equal increments not equal ! to 1 ! ! END use M_blas, only : dswap_=>DSWAP implicit none INTEGER INCX,INCY,N DOUBLE PRECISION DX(*),DY(*) call DSWAP_(N,DX,INCX,DY,INCY) end subroutine DSWAP subroutine DSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file dsymm.3m_blas.man !> \brief \b DSYMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA,BETA ! INTEGER LDA,LDB,LDC,M,N ! CHARACTER SIDE,UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DSYMM performs one of the matrix-matrix operations !> !> C := alpha*A*B + beta*C, !> !> or !> !> C := alpha*B*A + beta*C, !> !> where alpha and beta are scalars, A is a symmetric matrix and B and !> C are m by n matrices. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether the symmetric matrix A !> appears on the left or right in the operation as follows: !> !> SIDE = 'L' or 'l' C := alpha*A*B + beta*C, !> !> SIDE = 'R' or 'r' C := alpha*B*A + beta*C, !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the symmetric matrix A is to be !> referenced as follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of the !> symmetric matrix is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of the !> symmetric matrix is to be referenced. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix C. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix C. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, ka ), where ka is !> m when SIDE = 'L' or 'l' and is n otherwise. !> Before entry with SIDE = 'L' or 'l', the m by m part of !> the array A must contain the symmetric matrix, such that !> when UPLO = 'U' or 'u', the leading m by m upper triangular !> part of the array A must contain the upper triangular part !> of the symmetric matrix and the strictly lower triangular !> part of A is not referenced, and when UPLO = 'L' or 'l', !> the leading m by m lower triangular part of the array A !> must contain the lower triangular part of the symmetric !> matrix and the strictly upper triangular part of A is not !> referenced. !> Before entry with SIDE = 'R' or 'r', the n by n part of !> the array A must contain the symmetric matrix, such that !> when UPLO = 'U' or 'u', the leading n by n upper triangular !> part of the array A must contain the upper triangular part !> of the symmetric matrix and the strictly lower triangular !> part of A is not referenced, and when UPLO = 'L' or 'l', !> the leading n by n lower triangular part of the array A !> must contain the lower triangular part of the symmetric !> matrix and the strictly upper triangular part of A is not !> referenced. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), otherwise LDA must be at !> least max( 1, n ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is DOUBLE PRECISION array, dimension ( LDB, N ) !> Before entry, the leading m by n part of the array B must !> contain the matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is DOUBLE PRECISION. !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then C need not be set on input. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is DOUBLE PRECISION array, dimension ( LDC, N ) !> Before entry, the leading m by n part of the array C must !> contain the matrix C, except when beta is zero, in which !> case C need not be set on entry. !> On exit, the array C is overwritten by the m by n updated !> matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Set NROWA as the number of rows of A. ! ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B + beta*C. ! ! ! Form C := alpha*B*A + beta*C. ! ! ! ! End of DSYMM . ! ! END use M_blas, only : dsymm_=>DSYMM implicit none DOUBLE PRECISION ALPHA,BETA INTEGER LDA,LDB,LDC,M,N CHARACTER SIDE,UPLO DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) call DSYMM_(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine DSYMM subroutine DSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file dsymv.3m_blas.man !> \brief \b DSYMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA,BETA ! INTEGER INCX,INCY,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DSYMV performs the matrix-vector operation !> !> y := alpha*A*x + beta*y, !> !> where alpha and beta are scalars, x and y are n element vectors and !> A is an n by n symmetric matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of A !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of A !> is to be referenced. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of A is not referenced. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is DOUBLE PRECISION. !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. On exit, Y is overwritten by the updated !> vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the triangular part ! of A. ! ! First form y := beta*y. ! ! ! Form y when A is stored in upper triangle. ! ! ! Form y when A is stored in lower triangle. ! ! ! ! End of DSYMV . ! ! END use M_blas, only : dsymv_=>DSYMV implicit none DOUBLE PRECISION ALPHA,BETA INTEGER INCX,INCY,LDA,N CHARACTER UPLO DOUBLE PRECISION A(LDA,*),X(*),Y(*) call DSYMV_(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine DSYMV subroutine DSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! COMMENT --file dsyr2.3m_blas.man !> \brief \b DSYR2 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA ! INTEGER INCX,INCY,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DSYR2 performs the symmetric rank 2 operation !> !> A := alpha*x*y**T + alpha*y*x**T + A, !> !> where alpha is a scalar, x and y are n element vectors and A is an n !> by n symmetric matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of A !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of A !> is to be referenced. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of A is not referenced. On exit, the !> upper triangular part of the array A is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of A is not referenced. On exit, the !> lower triangular part of the array A is overwritten by the !> lower triangular part of the updated matrix. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y if the increments are not both ! unity. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the triangular part ! of A. ! ! ! Form A when A is stored in the upper triangle. ! ! ! Form A when A is stored in the lower triangle. ! ! ! ! End of DSYR2 . ! ! END use M_blas, only : dsyr2_=>DSYR2 implicit none DOUBLE PRECISION ALPHA INTEGER INCX,INCY,LDA,N CHARACTER UPLO DOUBLE PRECISION A(LDA,*),X(*),Y(*) call DSYR2_(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) end subroutine DSYR2 subroutine DSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file dsyr2k.3m_blas.man !> \brief \b DSYR2K ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA,BETA ! INTEGER K,LDA,LDB,LDC,N ! CHARACTER TRANS,UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DSYR2K performs one of the symmetric rank 2k operations !> !> C := alpha*A*B**T + alpha*B*A**T + beta*C, !> !> or !> !> C := alpha*A**T*B + alpha*B**T*A + beta*C, !> !> where alpha and beta are scalars, C is an n by n symmetric matrix !> and A and B are n by k matrices in the first case and k by n !> matrices in the second case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array C is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of C !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of C !> is to be referenced. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' C := alpha*A*B**T + alpha*B*A**T + !> beta*C. !> !> TRANS = 'T' or 't' C := alpha*A**T*B + alpha*B**T*A + !> beta*C. !> !> TRANS = 'C' or 'c' C := alpha*A**T*B + alpha*B**T*A + !> beta*C. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with TRANS = 'N' or 'n', K specifies the number !> of columns of the matrices A and B, and on entry with !> TRANS = 'T' or 't' or 'C' or 'c', K specifies the number !> of rows of the matrices A and B. K must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, ka ), where ka is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array A must contain the matrix A, otherwise !> the leading k by n part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDA must be at least max( 1, n ), otherwise LDA must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is DOUBLE PRECISION array, dimension ( LDB, kb ), where kb is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array B must contain the matrix B, otherwise !> the leading k by n part of the array B must contain the !> matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDB must be at least max( 1, n ), otherwise LDB must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is DOUBLE PRECISION. !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is DOUBLE PRECISION array, dimension ( LDC, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array C must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of C is not referenced. On exit, the !> upper triangular part of the array C is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array C must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of C is not referenced. On exit, the !> lower triangular part of the array C is overwritten by the !> lower triangular part of the updated matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B**T + alpha*B*A**T + C. ! ! ! Form C := alpha*A**T*B + alpha*B**T*A + C. ! ! ! ! End of DSYR2K. ! ! END use M_blas, only : dsyr2k_=>DSYR2K implicit none DOUBLE PRECISION ALPHA,BETA INTEGER K,LDA,LDB,LDC,N CHARACTER TRANS,UPLO DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) call DSYR2K_(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine DSYR2K subroutine DSYR(UPLO,N,ALPHA,X,INCX,A,LDA) ! COMMENT --file dsyr.3m_blas.man !> \brief \b DSYR ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DSYR(UPLO,N,ALPHA,X,INCX,A,LDA) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA ! INTEGER INCX,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DSYR performs the symmetric rank 1 operation !> !> A := alpha*x*x**T + A, !> !> where alpha is a real scalar, x is an n element vector and A is an !> n by n symmetric matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of A !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of A !> is to be referenced. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of A is not referenced. On exit, the !> upper triangular part of the array A is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of A is not referenced. On exit, the !> lower triangular part of the array A is overwritten by the !> lower triangular part of the updated matrix. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set the start point in X if the increment is not unity. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the triangular part ! of A. ! ! ! Form A when A is stored in upper triangle. ! ! ! Form A when A is stored in lower triangle. ! ! ! ! End of DSYR . ! ! END use M_blas, only : dsyr_=>DSYR implicit none DOUBLE PRECISION ALPHA INTEGER INCX,LDA,N CHARACTER UPLO DOUBLE PRECISION A(LDA,*),X(*) call DSYR_(UPLO,N,ALPHA,X,INCX,A,LDA) end subroutine DSYR subroutine DSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) ! COMMENT --file dsyrk.3m_blas.man !> \brief \b DSYRK ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA,BETA ! INTEGER K,LDA,LDC,N ! CHARACTER TRANS,UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DSYRK performs one of the symmetric rank k operations !> !> C := alpha*A*A**T + beta*C, !> !> or !> !> C := alpha*A**T*A + beta*C, !> !> where alpha and beta are scalars, C is an n by n symmetric matrix !> and A is an n by k matrix in the first case and a k by n matrix !> in the second case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array C is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of C !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of C !> is to be referenced. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' C := alpha*A*A**T + beta*C. !> !> TRANS = 'T' or 't' C := alpha*A**T*A + beta*C. !> !> TRANS = 'C' or 'c' C := alpha*A**T*A + beta*C. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with TRANS = 'N' or 'n', K specifies the number !> of columns of the matrix A, and on entry with !> TRANS = 'T' or 't' or 'C' or 'c', K specifies the number !> of rows of the matrix A. K must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, ka ), where ka is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array A must contain the matrix A, otherwise !> the leading k by n part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDA must be at least max( 1, n ), otherwise LDA must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is DOUBLE PRECISION. !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is DOUBLE PRECISION array, dimension ( LDC, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array C must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of C is not referenced. On exit, the !> upper triangular part of the array C is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array C must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of C is not referenced. On exit, the !> lower triangular part of the array C is overwritten by the !> lower triangular part of the updated matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*A**T + beta*C. ! ! ! Form C := alpha*A**T*A + beta*C. ! ! ! ! End of DSYRK . ! ! END use M_blas, only : dsyrk_=>DSYRK implicit none DOUBLE PRECISION ALPHA,BETA INTEGER K,LDA,LDC,N CHARACTER TRANS,UPLO DOUBLE PRECISION A(LDA,*),C(LDC,*) call DSYRK_(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) end subroutine DSYRK subroutine DTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! COMMENT --file dtbmv.3m_blas.man !> \brief \b DTBMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,K,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DTBMV performs one of the matrix-vector operations !> !> x := A*x, or x := A**T*x, !> !> where x is an n element vector and A is an n by n unit, or non-unit, !> upper or lower triangular band matrix, with ( k + 1 ) diagonals. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' x := A*x. !> !> TRANS = 'T' or 't' x := A**T*x. !> !> TRANS = 'C' or 'c' x := A**T*x. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with UPLO = 'U' or 'u', K specifies the number of !> super-diagonals of the matrix A. !> On entry with UPLO = 'L' or 'l', K specifies the number of !> sub-diagonals of the matrix A. !> K must satisfy 0 .le. K. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) !> by n part of the array A must contain the upper triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row !> ( k + 1 ) of the array, the first super-diagonal starting at !> position 2 in row k, and so on. The top left k by k triangle !> of the array A is not referenced. !> The following program segment will transfer an upper !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = K + 1 - J !> DO 10, I = MAX( 1, J - K ), J !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) !> by n part of the array A must contain the lower triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row 1 of !> the array, the first sub-diagonal starting at position 1 in !> row 2, and so on. The bottom right k by k triangle of the !> array A is not referenced. !> The following program segment will transfer a lower !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = 1 - J !> DO 10, I = J, MIN( N, J + K ) !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Note that when DIAG = 'U' or 'u' the elements of the array A !> corresponding to the diagonal elements of the matrix are not !> referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( k + 1 ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. On exit, X is overwritten with the !> transformed vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! Form x := A*x. ! ! ! Form x := A**T*x. ! ! ! ! End of DTBMV . ! ! END use M_blas, only : dtbmv_=>DTBMV implicit none INTEGER INCX,K,LDA,N CHARACTER DIAG,TRANS,UPLO DOUBLE PRECISION A(LDA,*),X(*) call DTBMV_(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) end subroutine DTBMV subroutine DTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! COMMENT --file dtbsv.3m_blas.man !> \brief \b DTBSV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,K,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DTBSV solves one of the systems of equations !> !> A*x = b, or A**T*x = b, !> !> where b and x are n element vectors and A is an n by n unit, or !> non-unit, upper or lower triangular band matrix, with ( k + 1 ) !> diagonals. !> !> No test for singularity or near-singularity is included in this !> routine. Such tests must be performed before calling this routine. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the equations to be solved as !> follows: !> !> TRANS = 'N' or 'n' A*x = b. !> !> TRANS = 'T' or 't' A**T*x = b. !> !> TRANS = 'C' or 'c' A**T*x = b. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with UPLO = 'U' or 'u', K specifies the number of !> super-diagonals of the matrix A. !> On entry with UPLO = 'L' or 'l', K specifies the number of !> sub-diagonals of the matrix A. !> K must satisfy 0 .le. K. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) !> by n part of the array A must contain the upper triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row !> ( k + 1 ) of the array, the first super-diagonal starting at !> position 2 in row k, and so on. The top left k by k triangle !> of the array A is not referenced. !> The following program segment will transfer an upper !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = K + 1 - J !> DO 10, I = MAX( 1, J - K ), J !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) !> by n part of the array A must contain the lower triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row 1 of !> the array, the first sub-diagonal starting at position 1 in !> row 2, and so on. The bottom right k by k triangle of the !> array A is not referenced. !> The following program segment will transfer a lower !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = 1 - J !> DO 10, I = J, MIN( N, J + K ) !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Note that when DIAG = 'U' or 'u' the elements of the array A !> corresponding to the diagonal elements of the matrix are not !> referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( k + 1 ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element right-hand side vector b. On exit, X is overwritten !> with the solution vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed by sequentially with one pass through A. ! ! ! Form x := inv( A )*x. ! ! ! Form x := inv( A**T)*x. ! ! ! ! End of DTBSV . ! ! END use M_blas, only : dtbsv_=>DTBSV implicit none INTEGER INCX,K,LDA,N CHARACTER DIAG,TRANS,UPLO DOUBLE PRECISION A(LDA,*),X(*) call DTBSV_(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) end subroutine DTBSV subroutine DTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! COMMENT --file dtpmv.3m_blas.man !> \brief \b DTPMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION AP(*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DTPMV performs one of the matrix-vector operations !> !> x := A*x, or x := A**T*x, !> !> where x is an n element vector and A is an n by n unit, or non-unit, !> upper or lower triangular matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' x := A*x. !> !> TRANS = 'T' or 't' x := A**T*x. !> !> TRANS = 'C' or 'c' x := A**T*x. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] AP !> \verbatim !> AP is DOUBLE PRECISION array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) !> respectively, and so on. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) !> respectively, and so on. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. On exit, X is overwritten with the !> transformed vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of AP are ! accessed sequentially with one pass through AP. ! ! ! Form x:= A*x. ! ! ! Form x := A**T*x. ! ! ! ! End of DTPMV . ! ! END use M_blas, only : dtpmv_=>DTPMV implicit none INTEGER INCX,N CHARACTER DIAG,TRANS,UPLO DOUBLE PRECISION AP(*),X(*) call DTPMV_(UPLO,TRANS,DIAG,N,AP,X,INCX) end subroutine DTPMV subroutine DTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! COMMENT --file dtpsv.3m_blas.man !> \brief \b DTPSV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION AP(*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DTPSV solves one of the systems of equations !> !> A*x = b, or A**T*x = b, !> !> where b and x are n element vectors and A is an n by n unit, or !> non-unit, upper or lower triangular matrix, supplied in packed form. !> !> No test for singularity or near-singularity is included in this !> routine. Such tests must be performed before calling this routine. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the equations to be solved as !> follows: !> !> TRANS = 'N' or 'n' A*x = b. !> !> TRANS = 'T' or 't' A**T*x = b. !> !> TRANS = 'C' or 'c' A**T*x = b. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] AP !> \verbatim !> AP is DOUBLE PRECISION array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) !> respectively, and so on. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) !> respectively, and so on. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element right-hand side vector b. On exit, X is overwritten !> with the solution vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of AP are ! accessed sequentially with one pass through AP. ! ! ! Form x := inv( A )*x. ! ! ! Form x := inv( A**T )*x. ! ! ! ! End of DTPSV . ! ! END use M_blas, only : dtpsv_=>DTPSV implicit none INTEGER INCX,N CHARACTER DIAG,TRANS,UPLO DOUBLE PRECISION AP(*),X(*) call DTPSV_(UPLO,TRANS,DIAG,N,AP,X,INCX) end subroutine DTPSV subroutine DTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! COMMENT --file dtrmm.3m_blas.man !> \brief \b DTRMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA ! INTEGER LDA,LDB,M,N ! CHARACTER DIAG,SIDE,TRANSA,UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),B(LDB,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DTRMM performs one of the matrix-matrix operations !> !> B := alpha*op( A )*B, or B := alpha*B*op( A ), !> !> where alpha is a scalar, B is an m by n matrix, A is a unit, or !> non-unit, upper or lower triangular matrix and op( A ) is one of !> !> op( A ) = A or op( A ) = A**T. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether op( A ) multiplies B from !> the left or right as follows: !> !> SIDE = 'L' or 'l' B := alpha*op( A )*B. !> !> SIDE = 'R' or 'r' B := alpha*B*op( A ). !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix A is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANSA !> \verbatim !> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n' op( A ) = A. !> !> TRANSA = 'T' or 't' op( A ) = A**T. !> !> TRANSA = 'C' or 'c' op( A ) = A**T. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit triangular !> as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of B. M must be at !> least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of B. N must be !> at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. When alpha is !> zero then A is not referenced and B need not be set before !> entry. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, k ), where k is m !> when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. !> Before entry with UPLO = 'U' or 'u', the leading k by k !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading k by k !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' !> then LDA must be at least max( 1, n ). !> \endverbatim !> !> \param[in,out] B !> \verbatim !> B is DOUBLE PRECISION array, dimension ( LDB, N ) !> Before entry, the leading m by n part of the array B must !> contain the matrix B, and on exit is overwritten by the !> transformed matrix. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form B := alpha*A*B. ! ! ! Form B := alpha*A**T*B. ! ! ! Form B := alpha*B*A. ! ! ! Form B := alpha*B*A**T. ! ! ! ! End of DTRMM . ! ! END use M_blas, only : dtrmm_=>DTRMM implicit none DOUBLE PRECISION ALPHA INTEGER LDA,LDB,M,N CHARACTER DIAG,SIDE,TRANSA,UPLO DOUBLE PRECISION A(LDA,*),B(LDB,*) call DTRMM_(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) end subroutine DTRMM subroutine DTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! COMMENT --file dtrmv.3m_blas.man !> \brief \b DTRMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DTRMV performs one of the matrix-vector operations !> !> x := A*x, or x := A**T*x, !> !> where x is an n element vector and A is an n by n unit, or non-unit, !> upper or lower triangular matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' x := A*x. !> !> TRANS = 'T' or 't' x := A**T*x. !> !> TRANS = 'C' or 'c' x := A**T*x. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. On exit, X is overwritten with the !> transformed vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! Form x := A*x. ! ! ! Form x := A**T*x. ! ! ! ! End of DTRMV . ! ! END use M_blas, only : dtrmv_=>DTRMV implicit none INTEGER INCX,LDA,N CHARACTER DIAG,TRANS,UPLO DOUBLE PRECISION A(LDA,*),X(*) call DTRMV_(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) end subroutine DTRMV subroutine DTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! COMMENT --file dtrsm.3m_blas.man !> \brief \b DTRSM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA ! INTEGER LDA,LDB,M,N ! CHARACTER DIAG,SIDE,TRANSA,UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),B(LDB,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DTRSM solves one of the matrix equations !> !> op( A )*X = alpha*B, or X*op( A ) = alpha*B, !> !> where alpha is a scalar, X and B are m by n matrices, A is a unit, or !> non-unit, upper or lower triangular matrix and op( A ) is one of !> !> op( A ) = A or op( A ) = A**T. !> !> The matrix X is overwritten on B. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether op( A ) appears on the left !> or right of X as follows: !> !> SIDE = 'L' or 'l' op( A )*X = alpha*B. !> !> SIDE = 'R' or 'r' X*op( A ) = alpha*B. !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix A is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANSA !> \verbatim !> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n' op( A ) = A. !> !> TRANSA = 'T' or 't' op( A ) = A**T. !> !> TRANSA = 'C' or 'c' op( A ) = A**T. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit triangular !> as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of B. M must be at !> least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of B. N must be !> at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. When alpha is !> zero then A is not referenced and B need not be set before !> entry. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, k ), !> where k is m when SIDE = 'L' or 'l' !> and k is n when SIDE = 'R' or 'r'. !> Before entry with UPLO = 'U' or 'u', the leading k by k !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading k by k !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' !> then LDA must be at least max( 1, n ). !> \endverbatim !> !> \param[in,out] B !> \verbatim !> B is DOUBLE PRECISION array, dimension ( LDB, N ) !> Before entry, the leading m by n part of the array B must !> contain the right-hand side matrix B, and on exit is !> overwritten by the solution matrix X. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form B := alpha*inv( A )*B. ! ! ! Form B := alpha*inv( A**T )*B. ! ! ! Form B := alpha*B*inv( A ). ! ! ! Form B := alpha*B*inv( A**T ). ! ! ! ! End of DTRSM . ! ! END use M_blas, only : dtrsm_=>DTRSM implicit none DOUBLE PRECISION ALPHA INTEGER LDA,LDB,M,N CHARACTER DIAG,SIDE,TRANSA,UPLO DOUBLE PRECISION A(LDA,*),B(LDB,*) call DTRSM_(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) end subroutine DTRSM subroutine DTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! COMMENT --file dtrsv.3m_blas.man !> \brief \b DTRSV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE DTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! DOUBLE PRECISION A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DTRSV solves one of the systems of equations !> !> A*x = b, or A**T*x = b, !> !> where b and x are n element vectors and A is an n by n unit, or !> non-unit, upper or lower triangular matrix. !> !> No test for singularity or near-singularity is included in this !> routine. Such tests must be performed before calling this routine. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the equations to be solved as !> follows: !> !> TRANS = 'N' or 'n' A*x = b. !> !> TRANS = 'T' or 't' A**T*x = b. !> !> TRANS = 'C' or 'c' A**T*x = b. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is DOUBLE PRECISION array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is DOUBLE PRECISION array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element right-hand side vector b. On exit, X is overwritten !> with the solution vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup double_blas_level1 ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! Form x := inv( A )*x. ! ! ! Form x := inv( A**T )*x. ! ! ! ! End of DTRSV . ! ! END use M_blas, only : dtrsv_=>DTRSV implicit none INTEGER INCX,LDA,N CHARACTER DIAG,TRANS,UPLO DOUBLE PRECISION A(LDA,*),X(*) call DTRSV_(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) end subroutine DTRSV DOUBLE PRECISION FUNCTION DZASUM(N,ZX,INCX) ! COMMENT --file dzasum.3m_blas.man !> \brief \b DZASUM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! DOUBLE PRECISION FUNCTION DZASUM(N,ZX,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! COMPLEX*16 ZX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DZASUM takes the sum of the (|Re(.)| + |Im(.)|)'s of a complex vector and !> returns a double precision result. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in,out] ZX !> \verbatim !> ZX is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of ZX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! ! code for increment equal to 1 ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : dzasum_=>DZASUM implicit none INTEGER INCX,N COMPLEX*16 ZX(*) dzasum=DZASUM_(N,ZX,INCX) END FUNCTION DZASUM DOUBLE PRECISION FUNCTION DZNRM2(N,X,INCX) ! COMMENT --file dznrm2.3m_blas.man !> \brief \b DZNRM2 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! DOUBLE PRECISION FUNCTION DZNRM2(N,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! COMPLEX*16 X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> DZNRM2 returns the euclidean norm of a vector via the function !> name, so that !> !> DZNRM2 := sqrt( x**H*x ) !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX*16 array, dimension (N) !> complex vector with N elements !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of X !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup double_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> -- This version written on 25-October-1982. !> Modified on 14-October-1993 to inline the call to ZLASSQ. !> Sven Hammarling, Nag Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! The following loop is equivalent to this call to the LAPACK ! auxiliary routine: ! CALL ZLASSQ( N, X, INCX, SCALE, SSQ ) ! ! ! ! End of DZNRM2. ! ! END use M_blas, only : dznrm2_=>DZNRM2 implicit none INTEGER INCX,N COMPLEX*16 X(*) dznrm2=DZNRM2_(N,X,INCX) END FUNCTION DZNRM2 INTEGER FUNCTION ICAMAX(N,CX,INCX) ! COMMENT --file icamax.3m_blas.man !> \brief \b ICAMAX ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! INTEGER FUNCTION ICAMAX(N,CX,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! COMPLEX CX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ICAMAX finds the index of the first element having maximum |Re(.)| + |Im(.)| !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] CX !> \verbatim !> CX is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of CX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup aux_blas ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! ! code for increment equal to 1 ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : icamax_=>ICAMAX implicit none INTEGER INCX,N COMPLEX CX(*) icamax=ICAMAX_(N,CX,INCX) END FUNCTION ICAMAX INTEGER FUNCTION IDAMAX(N,DX,INCX) ! COMMENT --file idamax.3m_blas.man !> \brief \b IDAMAX ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! INTEGER FUNCTION IDAMAX(N,DX,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! DOUBLE PRECISION DX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> IDAMAX finds the index of the first element having maximum absolute value. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] DX !> \verbatim !> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of DX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup aux_blas ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for increment equal to 1 ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : idamax_=>IDAMAX implicit none INTEGER INCX,N DOUBLE PRECISION DX(*) idamax=IDAMAX_(N,DX,INCX) END FUNCTION IDAMAX INTEGER FUNCTION ISAMAX(N,SX,INCX) ! COMMENT --file isamax.3m_blas.man !> \brief \b ISAMAX ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! INTEGER FUNCTION ISAMAX(N,SX,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! REAL SX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ISAMAX finds the index of the first element having maximum absolute value. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] SX !> \verbatim !> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup aux_blas ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for increment equal to 1 ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : isamax_=>ISAMAX implicit none INTEGER INCX,N REAL SX(*) isamax=ISAMAX_(N,SX,INCX) END FUNCTION ISAMAX INTEGER FUNCTION IZAMAX(N,ZX,INCX) ! COMMENT --file izamax.3m_blas.man !> \brief \b IZAMAX ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! INTEGER FUNCTION IZAMAX(N,ZX,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! COMPLEX*16 ZX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> IZAMAX finds the index of the first element having maximum |Re(.)| + |Im(.)| !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] ZX !> \verbatim !> ZX is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of ZX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup aux_blas ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, 1/15/85. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! ! code for increment equal to 1 ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : izamax_=>IZAMAX implicit none INTEGER INCX,N COMPLEX*16 ZX(*) izamax=IZAMAX_(N,ZX,INCX) END FUNCTION IZAMAX LOGICAL FUNCTION LSAME(CA,CB) ! COMMENT --file lsame.3m_blas.man !> \brief \b LSAME ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! LOGICAL FUNCTION LSAME(CA,CB) ! ! .. Scalar Arguments .. ! CHARACTER CA,CB ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> LSAME returns .TRUE. if CA is the same letter as CB regardless of !> case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] CA !> \verbatim !> CA is CHARACTER*1 !> \endverbatim !> !> \param[in] CB !> \verbatim !> CB is CHARACTER*1 !> CA and CB specify the single characters to be compared. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup aux_blas ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.1) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! ! ===================================================================== ! ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! ! Test if the characters are equal ! ! ! Now test for equivalence if both characters are alphabetic. ! ! ! Use 'Z' rather than 'A' so that ASCII can be detected on Prime ! machines, on which ICHAR returns a value with bit 8 set. ! ICHAR('A') on Prime machines returns 193 which is the same as ! ICHAR('A') on an EBCDIC machine. ! ! ! ! ASCII is assumed - ZCODE is the ASCII code of either lower or ! upper case 'Z'. ! ! ! ! EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or ! upper case 'Z'. ! ! ! ! ASCII is assumed, on Prime machines - ZCODE is the ASCII code ! plus 128 of either lower or upper case 'Z'. ! ! ! RETURN ! ! End of LSAME ! ! END use M_blas, only : lsame_=>LSAME implicit none CHARACTER CA,CB lsame=LSAME_(CA,CB) END FUNCTION LSAME REAL FUNCTION SASUM(N,SX,INCX) ! COMMENT --file sasum.3m_blas.man !> \brief \b SASUM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! REAL FUNCTION SASUM(N,SX,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! REAL SX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SASUM takes the sum of the absolute values. !> uses unrolled loops for increment equal to one. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] SX !> \verbatim !> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! code for increment equal to 1 ! ! ! clean-up loop ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : sasum_=>SASUM implicit none INTEGER INCX,N REAL SX(*) sasum=SASUM_(N,SX,INCX) END FUNCTION SASUM subroutine SAXPY(N,SA,SX,INCX,SY,INCY) ! COMMENT --file saxpy.3m_blas.man !> \brief \b SAXPY ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SAXPY(N,SA,SX,INCX,SY,INCY) ! ! .. Scalar Arguments .. ! REAL SA ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! REAL SX(*),SY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SAXPY constant times a vector plus a vector. !> uses unrolled loops for increments equal to one. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] SA !> \verbatim !> SA is REAL !> On entry, SA specifies the scalar alpha. !> \endverbatim !> !> \param[in] SX !> \verbatim !> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim !> !> \param[in,out] SY !> \verbatim !> SY is REAL array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of SY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for both increments equal to 1 ! ! ! clean-up loop ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! END use M_blas, only : saxpy_=>SAXPY implicit none REAL SA INTEGER INCX,INCY,N REAL SX(*),SY(*) call SAXPY_(N,SA,SX,INCX,SY,INCY) end subroutine SAXPY real function scabs1(z) ! COMMENT --file scabs1.3m_blas.man !> \brief \b SCABS1 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! REAL FUNCTION SCABS1(Z) ! ! .. Scalar Arguments .. ! COMPLEX Z ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SCABS1 computes |Re(.)| + |Im(.)| of a complex number !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] Z !> \verbatim !> Z is COMPLEX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! ! ===================================================================== ! ! .. Intrinsic Functions .. ! .. ! END use M_blas, only : scabs1_=>SCAbs1 implicit none complex,intent(in) :: z scabs1 = scabs1_(z) end function scabs1 REAL FUNCTION SCASUM(N,CX,INCX) ! COMMENT --file scasum.3m_blas.man !> \brief \b SCASUM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! REAL FUNCTION SCASUM(N,CX,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! COMPLEX CX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SCASUM takes the sum of the (|Re(.)| + |Im(.)|)'s of a complex vector and !> returns a single precision result. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in,out] CX !> \verbatim !> CX is COMPLEX array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for increment equal to 1 ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : scasum_=>SCASUM implicit none INTEGER INCX,N COMPLEX CX(*) scasum=SCASUM_(N,CX,INCX) END FUNCTION SCASUM REAL FUNCTION SCNRM2(N,X,INCX) ! COMMENT --file scnrm2.3m_blas.man !> \brief \b SCNRM2 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! REAL FUNCTION SCNRM2(N,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! COMPLEX X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SCNRM2 returns the euclidean norm of a vector via the function !> name, so that !> !> SCNRM2 := sqrt( x**H*x ) !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX array, dimension (N) !> complex vector with N elements !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of X !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> -- This version written on 25-October-1982. !> Modified on 14-October-1993 to inline the call to CLASSQ. !> Sven Hammarling, Nag Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! The following loop is equivalent to this call to the LAPACK ! auxiliary routine: ! CALL CLASSQ( N, X, INCX, SCALE, SSQ ) ! ! ! ! End of SCNRM2. ! ! END use M_blas, only : scnrm2_=>SCNRM2 implicit none INTEGER INCX,N COMPLEX X(*) scnrm2=SCNRM2_(N,X,INCX) END FUNCTION SCNRM2 subroutine SCOPY(N,SX,INCX,SY,INCY) ! COMMENT --file scopy.3m_blas.man !> \brief \b SCOPY ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SCOPY(N,SX,INCX,SY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! REAL SX(*),SY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SCOPY copies a vector, x, to a vector, y. !> uses unrolled loops for increments equal to 1. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] SX !> \verbatim !> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim !> !> \param[out] SY !> \verbatim !> SY is REAL array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of SY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for both increments equal to 1 ! ! ! clean-up loop ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! END use M_blas, only : scopy_=>SCOPY implicit none INTEGER INCX,INCY,N REAL SX(*),SY(*) call SCOPY_(N,SX,INCX,SY,INCY) end subroutine SCOPY REAL FUNCTION SDOT(N,SX,INCX,SY,INCY) ! COMMENT --file sdot.3m_blas.man !> \brief \b SDOT ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! REAL FUNCTION SDOT(N,SX,INCX,SY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! REAL SX(*),SY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SDOT forms the dot product of two vectors. !> uses unrolled loops for increments equal to one. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] SX !> \verbatim !> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim !> !> \param[in] SY !> \verbatim !> SY is REAL array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of SY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for both increments equal to 1 ! ! ! clean-up loop ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! END use M_blas, only : sdot_=>SDOT implicit none INTEGER INCX,INCY,N REAL SX(*),SY(*) sdot=SDOT_(N,SX,INCX,SY,INCY) END FUNCTION SDOT REAL FUNCTION SDSDOT(N,SB,SX,INCX,SY,INCY) ! COMMENT --file sdsdot.3m_blas.man !> \brief \b SDSDOT ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! REAL FUNCTION SDSDOT(N,SB,SX,INCX,SY,INCY) ! ! .. Scalar Arguments .. ! REAL SB ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! REAL SX(*),SY(*) ! .. ! !> \par Purpose: ! ============= !> !> \verbatim !> !> Compute the inner product of two vectors with extended !> precision accumulation. !> !> Returns S.P. result with dot product accumulated in D.P. !> SDSDOT = SB + sum for I = 0 to N-1 of SX(LX+I*INCX)*SY(LY+I*INCY), !> where LX = 1 if INCX .GE. 0, else LX = 1+(1-N)*INCX, and LY is !> defined in a similar way using INCY. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] SB !> \verbatim !> SB is REAL !> single precision scalar to be added to inner product !> \endverbatim !> !> \param[in] SX !> \verbatim !> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> single precision vector with N elements !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim !> !> \param[in] SY !> \verbatim !> SY is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> single precision vector with N elements !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of SY !> \endverbatim ! ! Authors: ! ======== ! !> \author Lawson, C. L., (JPL), Hanson, R. J., (SNLA), !> \author Kincaid, D. R., (U. of Texas), Krogh, F. T., (JPL) ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> REFERENCES !> !> C. L. Lawson, R. J. Hanson, D. R. Kincaid and F. T. !> Krogh, Basic linear algebra subprograms for Fortran !> usage, Algorithm No. 539, Transactions on Mathematical !> Software 5, 3 (September 1979), pp. 308-323. !> !> REVISION HISTORY (YYMMDD) !> !> 791001 DATE WRITTEN !> 890531 Changed all specific intrinsics to generic. (WRB) !> 890831 Modified array declarations. (WRB) !> 890831 REVISION DATE from Version 3.2 !> 891214 Prologue converted to Version 4.0 format. (BAB) !> 920310 Corrected definition of LX in DESCRIPTION. (WRB) !> 920501 Reformatted the REFERENCES section. (WRB) !> 070118 Reformat to LAPACK coding style !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Code for equal and positive increments. ! ! ! Code for unequal or nonpositive increments. ! ! END use M_blas, only : sdsdot_=>SDSDOT implicit none REAL SB INTEGER INCX,INCY,N REAL SX(*),SY(*) sdsdot=SDSDOT_(N,SB,SX,INCX,SY,INCY) END FUNCTION SDSDOT subroutine SGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file sgbmv.3m_blas.man !> \brief \b SGBMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! REAL ALPHA,BETA ! INTEGER INCX,INCY,KL,KU,LDA,M,N ! CHARACTER TRANS ! .. ! .. Array Arguments .. ! REAL A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SGBMV performs one of the matrix-vector operations !> !> y := alpha*A*x + beta*y, or y := alpha*A**T*x + beta*y, !> !> where alpha and beta are scalars, x and y are vectors and A is an !> m by n band matrix, with kl sub-diagonals and ku super-diagonals. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' y := alpha*A*x + beta*y. !> !> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y. !> !> TRANS = 'C' or 'c' y := alpha*A**T*x + beta*y. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] KL !> \verbatim !> KL is INTEGER !> On entry, KL specifies the number of sub-diagonals of the !> matrix A. KL must satisfy 0 .le. KL. !> \endverbatim !> !> \param[in] KU !> \verbatim !> KU is INTEGER !> On entry, KU specifies the number of super-diagonals of the !> matrix A. KU must satisfy 0 .le. KU. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, N ) !> Before entry, the leading ( kl + ku + 1 ) by n part of the !> array A must contain the matrix of coefficients, supplied !> column by column, with the leading diagonal of the matrix in !> row ( ku + 1 ) of the array, the first super-diagonal !> starting at position 2 in row ku, the first sub-diagonal !> starting at position 1 in row ( ku + 2 ), and so on. !> Elements in the array A that do not correspond to elements !> in the band matrix (such as the top left ku by ku triangle) !> are not referenced. !> The following program segment will transfer a band matrix !> from conventional full matrix storage to band storage: !> !> DO 20, J = 1, N !> K = KU + 1 - J !> DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL ) !> A( K + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( kl + ku + 1 ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. !> Before entry, the incremented array X must contain the !> vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is REAL !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is REAL array, dimension at least !> ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. !> Before entry, the incremented array Y must contain the !> vector y. On exit, Y is overwritten by the updated vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set LENX and LENY, the lengths of the vectors x and y, and set ! up the start points in X and Y. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the band part of A. ! ! First form y := beta*y. ! ! ! Form y := alpha*A*x + y. ! ! ! Form y := alpha*A**T*x + y. ! ! ! ! End of SGBMV . ! ! END use M_blas, only : sgbmv_=>SGBMV implicit none CHARACTER(len=1),intent(in) :: TRANS REAL ALPHA,BETA INTEGER INCX,INCY,KL,KU,LDA,M,N REAL A(LDA,*),X(*),Y(*) call SGBMV_(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine SGBMV subroutine SGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file sgemm.3m_blas.man !> \brief \b SGEMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! REAL ALPHA,BETA ! INTEGER K,LDA,LDB,LDC,M,N ! CHARACTER TRANSA,TRANSB ! .. ! .. Array Arguments .. ! REAL A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SGEMM performs one of the matrix-matrix operations !> !> C := alpha*op( A )*op( B ) + beta*C, !> !> where op( X ) is one of !> !> op( X ) = X or op( X ) = X**T, !> !> alpha and beta are scalars, and A, B and C are matrices, with op( A ) !> an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] TRANSA !> \verbatim !> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n', op( A ) = A. !> !> TRANSA = 'T' or 't', op( A ) = A**T. !> !> TRANSA = 'C' or 'c', op( A ) = A**T. !> \endverbatim !> !> \param[in] TRANSB !> \verbatim !> TRANSB is CHARACTER*1 !> On entry, TRANSB specifies the form of op( B ) to be used in !> the matrix multiplication as follows: !> !> TRANSB = 'N' or 'n', op( B ) = B. !> !> TRANSB = 'T' or 't', op( B ) = B**T. !> !> TRANSB = 'C' or 'c', op( B ) = B**T. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix !> op( A ) and of the matrix C. M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix !> op( B ) and the number of columns of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry, K specifies the number of columns of the matrix !> op( A ) and the number of rows of the matrix op( B ). K must !> be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, ka ), where ka is !> k when TRANSA = 'N' or 'n', and is m otherwise. !> Before entry with TRANSA = 'N' or 'n', the leading m by k !> part of the array A must contain the matrix A, otherwise !> the leading k by m part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANSA = 'N' or 'n' then !> LDA must be at least max( 1, m ), otherwise LDA must be at !> least max( 1, k ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is REAL array, dimension ( LDB, kb ), where kb is !> n when TRANSB = 'N' or 'n', and is k otherwise. !> Before entry with TRANSB = 'N' or 'n', the leading k by n !> part of the array B must contain the matrix B, otherwise !> the leading n by k part of the array B must contain the !> matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. When TRANSB = 'N' or 'n' then !> LDB must be at least max( 1, k ), otherwise LDB must be at !> least max( 1, n ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is REAL !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then C need not be set on input. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is REAL array, dimension ( LDC, N ) !> Before entry, the leading m by n part of the array C must !> contain the matrix C, except when beta is zero, in which !> case C need not be set on entry. !> On exit, the array C is overwritten by the m by n matrix !> ( alpha*op( A )*op( B ) + beta*C ). !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Set NOTA and NOTB as true if A and B respectively are not ! transposed and set NROWA and NROWB as the number of rows of A ! and B respectively. ! ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! And if alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B + beta*C. ! ! ! Form C := alpha*A**T*B + beta*C ! ! ! Form C := alpha*A*B**T + beta*C ! ! ! Form C := alpha*A**T*B**T + beta*C ! ! ! ! End of SGEMM . ! ! END use M_blas, only : sgemm_=>SGEMM implicit none REAL ALPHA,BETA INTEGER K,LDA,LDB,LDC,M,N CHARACTER TRANSA,TRANSB REAL A(LDA,*),B(LDB,*),C(LDC,*) call SGEMM_(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine SGEMM subroutine SGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file sgemv.3m_blas.man !> \brief \b SGEMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! REAL ALPHA,BETA ! INTEGER INCX,INCY,LDA,M,N ! CHARACTER TRANS ! .. ! .. Array Arguments .. ! REAL A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SGEMV performs one of the matrix-vector operations !> !> y := alpha*A*x + beta*y, or y := alpha*A**T*x + beta*y, !> !> where alpha and beta are scalars, x and y are vectors and A is an !> m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' y := alpha*A*x + beta*y. !> !> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y. !> !> TRANS = 'C' or 'c' y := alpha*A**T*x + beta*y. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, N ) !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, m ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. !> Before entry, the incremented array X must contain the !> vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is REAL !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is REAL array, dimension at least !> ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. !> Before entry with BETA non-zero, the incremented array Y !> must contain the vector y. On exit, Y is overwritten by the !> updated vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set LENX and LENY, the lengths of the vectors x and y, and set ! up the start points in X and Y. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! First form y := beta*y. ! ! ! Form y := alpha*A*x + y. ! ! ! Form y := alpha*A**T*x + y. ! ! ! ! End of SGEMV . ! ! END use M_blas, only : sgemv_=>SGEMV implicit none REAL ALPHA,BETA INTEGER INCX,INCY,LDA,M,N CHARACTER TRANS REAL A(LDA,*),X(*),Y(*) call SGEMV_(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine SGEMV subroutine SGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! COMMENT --file sger.3m_blas.man !> \brief \b SGER ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! ! .. Scalar Arguments .. ! REAL ALPHA ! INTEGER INCX,INCY,LDA,M,N ! .. ! .. Array Arguments .. ! REAL A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SGER performs the rank 1 operation !> !> A := alpha*x*y**T + A, !> !> where alpha is a scalar, x is an m element vector, y is an n element !> vector and A is an m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( m - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the m !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is REAL array, dimension ( LDA, N ) !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. On exit, A is !> overwritten by the updated matrix. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! ! End of SGER . ! ! END use M_blas, only : sger_=>SGER implicit none REAL ALPHA INTEGER INCX,INCY,LDA,M,N REAL A(LDA,*),X(*),Y(*) call SGER_(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) end subroutine SGER REAL FUNCTION SNRM2(N,X,INCX) ! COMMENT --file snrm2.3m_blas.man !> \brief \b SNRM2 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! REAL FUNCTION SNRM2(N,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! REAL X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SNRM2 returns the euclidean norm of a vector via the function !> name, so that !> !> SNRM2 := sqrt( x'*x ). !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] X !> \verbatim !> X is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> -- This version written on 25-October-1982. !> Modified on 14-October-1993 to inline the call to SLASSQ. !> Sven Hammarling, Nag Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! The following loop is equivalent to this call to the LAPACK ! auxiliary routine: ! CALL SLASSQ( N, X, INCX, SCALE, SSQ ) ! ! ! ! End of SNRM2. ! ! END use M_blas, only : snrm2_=>SNRM2 implicit none INTEGER INCX,N REAL X(*) snrm2=SNRM2_(N,X,INCX) END FUNCTION SNRM2 subroutine SROT(N,SX,INCX,SY,INCY,C,S) ! COMMENT --file srot.3m_blas.man !> \brief \b SROT ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SROT(N,SX,INCX,SY,INCY,C,S) ! ! .. Scalar Arguments .. ! REAL C,S ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! REAL SX(*),SY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> applies a plane rotation. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in,out] SX !> \verbatim !> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim !> !> \param[in,out] SY !> \verbatim !> SY is REAL array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of SY !> \endverbatim !> !> \param[in] C !> \verbatim !> C is REAL !> \endverbatim !> !> \param[in] S !> \verbatim !> S is REAL !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! ! code for both increments equal to 1 ! ! ! code for unequal increments or equal increments not equal ! to 1 ! ! END use M_blas, only : srot_=>SROT implicit none REAL C,S INTEGER INCX,INCY,N REAL SX(*),SY(*) call SROT_(N,SX,INCX,SY,INCY,C,S) end subroutine SROT subroutine SROTG(SA,SB,C,S) ! COMMENT --file srotg.3m_blas.man !> \brief \b SROTG ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SROTG(SA,SB,C,S) ! ! .. Scalar Arguments .. ! REAL C,S,SA,SB ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SROTG construct givens plane rotation. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in,out] SA !> \verbatim !> SA is REAL !> \endverbatim !> !> \param[in,out] SB !> \verbatim !> SB is REAL !> \endverbatim !> !> \param[out] C !> \verbatim !> C is REAL !> \endverbatim !> !> \param[out] S !> \verbatim !> S is REAL !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! END use M_blas, only : srotg_=>SROTG implicit none REAL C,S,SA,SB call SROTG_(SA,SB,C,S) end subroutine SROTG subroutine SROTM(N,SX,INCX,SY,INCY,SPARAM) ! COMMENT --file srotm.3m_blas.man !> \brief \b SROTM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SROTM(N,SX,INCX,SY,INCY,SPARAM) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! REAL SPARAM(5),SX(*),SY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX !> !> (SX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF SX ARE IN !> (SX**T) !> !> SX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE !> LX = (-INCX)*N, AND SIMILARLY FOR SY USING USING LY AND INCY. !> WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS.. !> !> SFLAG=-1.E0 SFLAG=0.E0 SFLAG=1.E0 SFLAG=-2.E0 !> !> (SH11 SH12) (1.E0 SH12) (SH11 1.E0) (1.E0 0.E0) !> H=( ) ( ) ( ) ( ) !> (SH21 SH22), (SH21 1.E0), (-1.E0 SH22), (0.E0 1.E0). !> SEE SROTMG FOR A DESCRIPTION OF DATA STORAGE IN SPARAM. !> !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in,out] SX !> \verbatim !> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim !> !> \param[in,out] SY !> \verbatim !> SY is REAL array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of SY !> \endverbatim !> !> \param[in] SPARAM !> \verbatim !> SPARAM is REAL array, dimension (5) !> SPARAM(1)=SFLAG !> SPARAM(2)=SH11 !> SPARAM(3)=SH21 !> SPARAM(4)=SH12 !> SPARAM(5)=SH22 !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Data statements .. ! .. ! ! ! ! END use M_blas, only : srotm_=>SROTM implicit none INTEGER INCX,INCY,N REAL SPARAM(5),SX(*),SY(*) call SROTM_(N,SX,INCX,SY,INCY,SPARAM) end subroutine SROTM subroutine SROTMG(SD1,SD2,SX1,SY1,SPARAM) ! COMMENT --file srotmg.3m_blas.man !> \brief \b SROTMG ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SROTMG(SD1,SD2,SX1,SY1,SPARAM) ! ! .. Scalar Arguments .. ! REAL SD1,SD2,SX1,SY1 ! .. ! .. Array Arguments .. ! REAL SPARAM(5) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS !> THE SECOND COMPONENT OF THE 2-VECTOR (SQRT(SD1)*SX1,SQRT(SD2)*> SY2)**T. !> WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS.. !> !> SFLAG=-1.E0 SFLAG=0.E0 SFLAG=1.E0 SFLAG=-2.E0 !> !> (SH11 SH12) (1.E0 SH12) (SH11 1.E0) (1.E0 0.E0) !> H=( ) ( ) ( ) ( ) !> (SH21 SH22), (SH21 1.E0), (-1.E0 SH22), (0.E0 1.E0). !> LOCATIONS 2-4 OF SPARAM CONTAIN SH11,SH21,SH12, AND SH22 !> RESPECTIVELY. (VALUES OF 1.E0, -1.E0, OR 0.E0 IMPLIED BY THE !> VALUE OF SPARAM(1) ARE NOT STORED IN SPARAM.) !> !> THE VALUES OF GAMSQ AND RGAMSQ SET IN THE DATA STATEMENT MAY BE !> INEXACT. THIS IS OK AS THEY ARE ONLY USED FOR TESTING THE SIZE !> OF SD1 AND SD2. ALL ACTUAL SCALING OF DATA IS DONE USING GAM. !> !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in,out] SD1 !> \verbatim !> SD1 is REAL !> \endverbatim !> !> \param[in,out] SD2 !> \verbatim !> SD2 is REAL !> \endverbatim !> !> \param[in,out] SX1 !> \verbatim !> SX1 is REAL !> \endverbatim !> !> \param[in] SY1 !> \verbatim !> SY1 is REAL !> \endverbatim !> !> \param[out] SPARAM !> \verbatim !> SPARAM is REAL array, dimension (5) !> SPARAM(1)=SFLAG !> SPARAM(2)=SH11 !> SPARAM(3)=SH21 !> SPARAM(4)=SH12 !> SPARAM(5)=SH22 !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Data statements .. ! ! .. ! GO ZERO-H-D-AND-SX1.. ! ! CASE-SD1-NONNEGATIVE ! REGULAR-CASE.. ! ! ! ! This code path if here for safety. We do not expect this ! condition to ever hold except in edge cases with rounding ! errors. See DOI: 10.1145/355841.355847 ! ! GO ZERO-H-D-AND-SX1.. ! ! PROCEDURE..SCALE-CHECK ! END use M_blas, only : srotmg_=>SROTMG implicit none REAL SD1,SD2,SX1,SY1 REAL SPARAM(5) call SROTMG_(SD1,SD2,SX1,SY1,SPARAM) end subroutine SROTMG subroutine SSBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file ssbmv.3m_blas.man !> \brief \b SSBMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SSBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! REAL ALPHA,BETA ! INTEGER INCX,INCY,K,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SSBMV performs the matrix-vector operation !> !> y := alpha*A*x + beta*y, !> !> where alpha and beta are scalars, x and y are n element vectors and !> A is an n by n symmetric band matrix, with k super-diagonals. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the band matrix A is being supplied as !> follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> being supplied. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> being supplied. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry, K specifies the number of super-diagonals of the !> matrix A. K must satisfy 0 .le. K. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) !> by n part of the array A must contain the upper triangular !> band part of the symmetric matrix, supplied column by !> column, with the leading diagonal of the matrix in row !> ( k + 1 ) of the array, the first super-diagonal starting at !> position 2 in row k, and so on. The top left k by k triangle !> of the array A is not referenced. !> The following program segment will transfer the upper !> triangular part of a symmetric band matrix from conventional !> full matrix storage to band storage: !> !> DO 20, J = 1, N !> M = K + 1 - J !> DO 10, I = MAX( 1, J - K ), J !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) !> by n part of the array A must contain the lower triangular !> band part of the symmetric matrix, supplied column by !> column, with the leading diagonal of the matrix in row 1 of !> the array, the first sub-diagonal starting at position 1 in !> row 2, and so on. The bottom right k by k triangle of the !> array A is not referenced. !> The following program segment will transfer the lower !> triangular part of a symmetric band matrix from conventional !> full matrix storage to band storage: !> !> DO 20, J = 1, N !> M = 1 - J !> DO 10, I = J, MIN( N, J + K ) !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( k + 1 ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the !> vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is REAL !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the !> vector y. On exit, Y is overwritten by the updated vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y. ! ! ! Start the operations. In this version the elements of the array A ! are accessed sequentially with one pass through A. ! ! First form y := beta*y. ! ! ! Form y when upper triangle of A is stored. ! ! ! Form y when lower triangle of A is stored. ! ! ! ! End of SSBMV . ! ! END use M_blas, only : ssbmv_=>SSBMV implicit none REAL ALPHA,BETA INTEGER INCX,INCY,K,LDA,N CHARACTER UPLO REAL A(LDA,*),X(*),Y(*) call SSBMV_(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine SSBMV subroutine SSCAL(N,SA,SX,INCX) ! COMMENT --file sscal.3m_blas.man !> \brief \b SSCAL ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SSCAL(N,SA,SX,INCX) ! ! .. Scalar Arguments .. ! REAL SA ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! REAL SX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SSCAL scales a vector by a constant. !> uses unrolled loops for increment equal to 1. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] SA !> \verbatim !> SA is REAL !> On entry, SA specifies the scalar alpha. !> \endverbatim !> !> \param[in,out] SX !> \verbatim !> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for increment equal to 1 ! ! ! clean-up loop ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : sscal_=>SSCAL implicit none REAL SA INTEGER INCX,N REAL SX(*) call SSCAL_(N,SA,SX,INCX) end subroutine SSCAL subroutine SSPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY) ! COMMENT --file sspmv.3m_blas.man !> \brief \b SSPMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SSPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! REAL ALPHA,BETA ! INTEGER INCX,INCY,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! REAL AP(*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SSPMV performs the matrix-vector operation !> !> y := alpha*A*x + beta*y, !> !> where alpha and beta are scalars, x and y are n element vectors and !> A is an n by n symmetric matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the matrix A is supplied in the packed !> array AP as follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> supplied in AP. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> supplied in AP. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] AP !> \verbatim !> AP is REAL array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular part of the symmetric matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) !> and a( 2, 2 ) respectively, and so on. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular part of the symmetric matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) !> and a( 3, 1 ) respectively, and so on. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is REAL !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. On exit, Y is overwritten by the updated !> vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y. ! ! ! Start the operations. In this version the elements of the array AP ! are accessed sequentially with one pass through AP. ! ! First form y := beta*y. ! ! ! Form y when AP contains the upper triangle. ! ! ! Form y when AP contains the lower triangle. ! ! ! ! End of SSPMV . ! ! END use M_blas, only : sspmv_=>SSPMV implicit none REAL ALPHA,BETA INTEGER INCX,INCY,N CHARACTER UPLO REAL AP(*),X(*),Y(*) call SSPMV_(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY) end subroutine SSPMV subroutine SSPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP) ! COMMENT --file sspr2.3m_blas.man !> \brief \b SSPR2 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SSPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP) ! ! .. Scalar Arguments .. ! REAL ALPHA ! INTEGER INCX,INCY,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! REAL AP(*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SSPR2 performs the symmetric rank 2 operation !> !> A := alpha*x*y**T + alpha*y*x**T + A, !> !> where alpha is a scalar, x and y are n element vectors and A is an !> n by n symmetric matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the matrix A is supplied in the packed !> array AP as follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> supplied in AP. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> supplied in AP. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] AP !> \verbatim !> AP is REAL array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular part of the symmetric matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) !> and a( 2, 2 ) respectively, and so on. On exit, the array !> AP is overwritten by the upper triangular part of the !> updated matrix. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular part of the symmetric matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) !> and a( 3, 1 ) respectively, and so on. On exit, the array !> AP is overwritten by the lower triangular part of the !> updated matrix. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y if the increments are not both ! unity. ! ! ! Start the operations. In this version the elements of the array AP ! are accessed sequentially with one pass through AP. ! ! ! Form A when upper triangle is stored in AP. ! ! ! Form A when lower triangle is stored in AP. ! ! ! ! End of SSPR2 . ! ! END use M_blas, only : sspr2_=>SSPR2 implicit none REAL ALPHA INTEGER INCX,INCY,N CHARACTER UPLO REAL AP(*),X(*),Y(*) call SSPR2_(UPLO,N,ALPHA,X,INCX,Y,INCY,AP) end subroutine SSPR2 subroutine SSPR(UPLO,N,ALPHA,X,INCX,AP) ! COMMENT --file sspr.3m_blas.man !> \brief \b SSPR ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SSPR(UPLO,N,ALPHA,X,INCX,AP) ! ! .. Scalar Arguments .. ! REAL ALPHA ! INTEGER INCX,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! REAL AP(*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SSPR performs the symmetric rank 1 operation !> !> A := alpha*x*x**T + A, !> !> where alpha is a real scalar, x is an n element vector and A is an !> n by n symmetric matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the matrix A is supplied in the packed !> array AP as follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> supplied in AP. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> supplied in AP. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in,out] AP !> \verbatim !> AP is REAL array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular part of the symmetric matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) !> and a( 2, 2 ) respectively, and so on. On exit, the array !> AP is overwritten by the upper triangular part of the !> updated matrix. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular part of the symmetric matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) !> and a( 3, 1 ) respectively, and so on. On exit, the array !> AP is overwritten by the lower triangular part of the !> updated matrix. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set the start point in X if the increment is not unity. ! ! ! Start the operations. In this version the elements of the array AP ! are accessed sequentially with one pass through AP. ! ! ! Form A when upper triangle is stored in AP. ! ! ! Form A when lower triangle is stored in AP. ! ! ! ! End of SSPR . ! ! END use M_blas, only : sspr_=>SSPR implicit none REAL ALPHA INTEGER INCX,N CHARACTER UPLO REAL AP(*),X(*) call SSPR_(UPLO,N,ALPHA,X,INCX,AP) end subroutine SSPR subroutine SSWAP(N,SX,INCX,SY,INCY) ! COMMENT --file sswap.3m_blas.man !> \brief \b SSWAP ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SSWAP(N,SX,INCX,SY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! REAL SX(*),SY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SSWAP interchanges two vectors. !> uses unrolled loops for increments equal to 1. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in,out] SX !> \verbatim !> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of SX !> \endverbatim !> !> \param[in,out] SY !> \verbatim !> SY is REAL array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of SY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup single_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for both increments equal to 1 ! ! ! clean-up loop ! ! ! code for unequal increments or equal increments not equal ! to 1 ! ! END use M_blas, only : sswap_=>SSWAP implicit none INTEGER INCX,INCY,N REAL SX(*),SY(*) call SSWAP_(N,SX,INCX,SY,INCY) end subroutine SSWAP subroutine SSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file ssymm.3m_blas.man !> \brief \b SSYMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! REAL ALPHA,BETA ! INTEGER LDA,LDB,LDC,M,N ! CHARACTER SIDE,UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SSYMM performs one of the matrix-matrix operations !> !> C := alpha*A*B + beta*C, !> !> or !> !> C := alpha*B*A + beta*C, !> !> where alpha and beta are scalars, A is a symmetric matrix and B and !> C are m by n matrices. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether the symmetric matrix A !> appears on the left or right in the operation as follows: !> !> SIDE = 'L' or 'l' C := alpha*A*B + beta*C, !> !> SIDE = 'R' or 'r' C := alpha*B*A + beta*C, !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the symmetric matrix A is to be !> referenced as follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of the !> symmetric matrix is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of the !> symmetric matrix is to be referenced. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix C. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix C. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, ka ), where ka is !> m when SIDE = 'L' or 'l' and is n otherwise. !> Before entry with SIDE = 'L' or 'l', the m by m part of !> the array A must contain the symmetric matrix, such that !> when UPLO = 'U' or 'u', the leading m by m upper triangular !> part of the array A must contain the upper triangular part !> of the symmetric matrix and the strictly lower triangular !> part of A is not referenced, and when UPLO = 'L' or 'l', !> the leading m by m lower triangular part of the array A !> must contain the lower triangular part of the symmetric !> matrix and the strictly upper triangular part of A is not !> referenced. !> Before entry with SIDE = 'R' or 'r', the n by n part of !> the array A must contain the symmetric matrix, such that !> when UPLO = 'U' or 'u', the leading n by n upper triangular !> part of the array A must contain the upper triangular part !> of the symmetric matrix and the strictly lower triangular !> part of A is not referenced, and when UPLO = 'L' or 'l', !> the leading n by n lower triangular part of the array A !> must contain the lower triangular part of the symmetric !> matrix and the strictly upper triangular part of A is not !> referenced. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), otherwise LDA must be at !> least max( 1, n ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is REAL array, dimension ( LDB, N ) !> Before entry, the leading m by n part of the array B must !> contain the matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is REAL !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then C need not be set on input. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is REAL array, dimension ( LDC, N ) !> Before entry, the leading m by n part of the array C must !> contain the matrix C, except when beta is zero, in which !> case C need not be set on entry. !> On exit, the array C is overwritten by the m by n updated !> matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Set NROWA as the number of rows of A. ! ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B + beta*C. ! ! ! Form C := alpha*B*A + beta*C. ! ! ! ! End of SSYMM . ! ! END use M_blas, only : ssymm_=>SSYMM implicit none REAL ALPHA,BETA INTEGER LDA,LDB,LDC,M,N CHARACTER SIDE,UPLO REAL A(LDA,*),B(LDB,*),C(LDC,*) call SSYMM_(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine SSYMM subroutine SSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file ssymv.3m_blas.man !> \brief \b SSYMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SSYMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! REAL ALPHA,BETA ! INTEGER INCX,INCY,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SSYMV performs the matrix-vector operation !> !> y := alpha*A*x + beta*y, !> !> where alpha and beta are scalars, x and y are n element vectors and !> A is an n by n symmetric matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of A !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of A !> is to be referenced. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of A is not referenced. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is REAL !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. On exit, Y is overwritten by the updated !> vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the triangular part ! of A. ! ! First form y := beta*y. ! ! ! Form y when A is stored in upper triangle. ! ! ! Form y when A is stored in lower triangle. ! ! ! ! End of SSYMV . ! ! END use M_blas, only : ssymv_=>SSYMV implicit none REAL ALPHA,BETA INTEGER INCX,INCY,LDA,N CHARACTER UPLO REAL A(LDA,*),X(*),Y(*) call SSYMV_(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine SSYMV subroutine SSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! COMMENT --file ssyr2.3m_blas.man !> \brief \b SSYR2 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SSYR2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! ! .. Scalar Arguments .. ! REAL ALPHA ! INTEGER INCX,INCY,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SSYR2 performs the symmetric rank 2 operation !> !> A := alpha*x*y**T + alpha*y*x**T + A, !> !> where alpha is a scalar, x and y are n element vectors and A is an n !> by n symmetric matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of A !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of A !> is to be referenced. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is REAL array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of A is not referenced. On exit, the !> upper triangular part of the array A is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of A is not referenced. On exit, the !> lower triangular part of the array A is overwritten by the !> lower triangular part of the updated matrix. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y if the increments are not both ! unity. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the triangular part ! of A. ! ! ! Form A when A is stored in the upper triangle. ! ! ! Form A when A is stored in the lower triangle. ! ! ! ! End of SSYR2 . ! ! END use M_blas, only : ssyr2_=>SSYR2 implicit none REAL ALPHA INTEGER INCX,INCY,LDA,N CHARACTER UPLO REAL A(LDA,*),X(*),Y(*) call SSYR2_(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) end subroutine SSYR2 subroutine SSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file ssyr2k.3m_blas.man !> \brief \b SSYR2K ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! REAL ALPHA,BETA ! INTEGER K,LDA,LDB,LDC,N ! CHARACTER TRANS,UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SSYR2K performs one of the symmetric rank 2k operations !> !> C := alpha*A*B**T + alpha*B*A**T + beta*C, !> !> or !> !> C := alpha*A**T*B + alpha*B**T*A + beta*C, !> !> where alpha and beta are scalars, C is an n by n symmetric matrix !> and A and B are n by k matrices in the first case and k by n !> matrices in the second case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array C is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of C !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of C !> is to be referenced. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' C := alpha*A*B**T + alpha*B*A**T + !> beta*C. !> !> TRANS = 'T' or 't' C := alpha*A**T*B + alpha*B**T*A + !> beta*C. !> !> TRANS = 'C' or 'c' C := alpha*A**T*B + alpha*B**T*A + !> beta*C. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with TRANS = 'N' or 'n', K specifies the number !> of columns of the matrices A and B, and on entry with !> TRANS = 'T' or 't' or 'C' or 'c', K specifies the number !> of rows of the matrices A and B. K must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, ka ), where ka is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array A must contain the matrix A, otherwise !> the leading k by n part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDA must be at least max( 1, n ), otherwise LDA must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is REAL array, dimension ( LDB, kb ), where kb is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array B must contain the matrix B, otherwise !> the leading k by n part of the array B must contain the !> matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDB must be at least max( 1, n ), otherwise LDB must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is REAL !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is REAL array, dimension ( LDC, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array C must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of C is not referenced. On exit, the !> upper triangular part of the array C is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array C must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of C is not referenced. On exit, the !> lower triangular part of the array C is overwritten by the !> lower triangular part of the updated matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B**T + alpha*B*A**T + C. ! ! ! Form C := alpha*A**T*B + alpha*B**T*A + C. ! ! ! ! End of SSYR2K. ! ! END use M_blas, only : ssyr2k_=>SSYR2K implicit none REAL ALPHA,BETA INTEGER K,LDA,LDB,LDC,N CHARACTER TRANS,UPLO REAL A(LDA,*),B(LDB,*),C(LDC,*) call SSYR2K_(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine SSYR2K subroutine SSYR(UPLO,N,ALPHA,X,INCX,A,LDA) ! COMMENT --file ssyr.3m_blas.man !> \brief \b SSYR ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SSYR(UPLO,N,ALPHA,X,INCX,A,LDA) ! ! .. Scalar Arguments .. ! REAL ALPHA ! INTEGER INCX,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SSYR performs the symmetric rank 1 operation !> !> A := alpha*x*x**T + A, !> !> where alpha is a real scalar, x is an n element vector and A is an !> n by n symmetric matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of A !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of A !> is to be referenced. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is REAL array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of A is not referenced. On exit, the !> upper triangular part of the array A is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of A is not referenced. On exit, the !> lower triangular part of the array A is overwritten by the !> lower triangular part of the updated matrix. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set the start point in X if the increment is not unity. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the triangular part ! of A. ! ! ! Form A when A is stored in upper triangle. ! ! ! Form A when A is stored in lower triangle. ! ! ! ! End of SSYR . ! ! END use M_blas, only : ssyr_=>SSYR implicit none REAL ALPHA INTEGER INCX,LDA,N CHARACTER UPLO REAL A(LDA,*),X(*) call SSYR_(UPLO,N,ALPHA,X,INCX,A,LDA) end subroutine SSYR subroutine SSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) ! COMMENT --file ssyrk.3m_blas.man !> \brief \b SSYRK ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE SSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) ! ! .. Scalar Arguments .. ! REAL ALPHA,BETA ! INTEGER K,LDA,LDC,N ! CHARACTER TRANS,UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> SSYRK performs one of the symmetric rank k operations !> !> C := alpha*A*A**T + beta*C, !> !> or !> !> C := alpha*A**T*A + beta*C, !> !> where alpha and beta are scalars, C is an n by n symmetric matrix !> and A is an n by k matrix in the first case and a k by n matrix !> in the second case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array C is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of C !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of C !> is to be referenced. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' C := alpha*A*A**T + beta*C. !> !> TRANS = 'T' or 't' C := alpha*A**T*A + beta*C. !> !> TRANS = 'C' or 'c' C := alpha*A**T*A + beta*C. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with TRANS = 'N' or 'n', K specifies the number !> of columns of the matrix A, and on entry with !> TRANS = 'T' or 't' or 'C' or 'c', K specifies the number !> of rows of the matrix A. K must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, ka ), where ka is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array A must contain the matrix A, otherwise !> the leading k by n part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDA must be at least max( 1, n ), otherwise LDA must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is REAL !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is REAL array, dimension ( LDC, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array C must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of C is not referenced. On exit, the !> upper triangular part of the array C is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array C must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of C is not referenced. On exit, the !> lower triangular part of the array C is overwritten by the !> lower triangular part of the updated matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*A**T + beta*C. ! ! ! Form C := alpha*A**T*A + beta*C. ! ! ! ! End of SSYRK . ! ! END use M_blas, only : ssyrk_=>SSYRK implicit none REAL ALPHA,BETA INTEGER K,LDA,LDC,N CHARACTER TRANS,UPLO REAL A(LDA,*),C(LDC,*) call SSYRK_(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) end subroutine SSYRK subroutine STBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! COMMENT --file stbmv.3m_blas.man !> \brief \b STBMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE STBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,K,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> STBMV performs one of the matrix-vector operations !> !> x := A*x, or x := A**T*x, !> !> where x is an n element vector and A is an n by n unit, or non-unit, !> upper or lower triangular band matrix, with ( k + 1 ) diagonals. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' x := A*x. !> !> TRANS = 'T' or 't' x := A**T*x. !> !> TRANS = 'C' or 'c' x := A**T*x. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with UPLO = 'U' or 'u', K specifies the number of !> super-diagonals of the matrix A. !> On entry with UPLO = 'L' or 'l', K specifies the number of !> sub-diagonals of the matrix A. !> K must satisfy 0 .le. K. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) !> by n part of the array A must contain the upper triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row !> ( k + 1 ) of the array, the first super-diagonal starting at !> position 2 in row k, and so on. The top left k by k triangle !> of the array A is not referenced. !> The following program segment will transfer an upper !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = K + 1 - J !> DO 10, I = MAX( 1, J - K ), J !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) !> by n part of the array A must contain the lower triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row 1 of !> the array, the first sub-diagonal starting at position 1 in !> row 2, and so on. The bottom right k by k triangle of the !> array A is not referenced. !> The following program segment will transfer a lower !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = 1 - J !> DO 10, I = J, MIN( N, J + K ) !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Note that when DIAG = 'U' or 'u' the elements of the array A !> corresponding to the diagonal elements of the matrix are not !> referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( k + 1 ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. On exit, X is overwritten with the !> transformed vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! Form x := A*x. ! ! ! Form x := A**T*x. ! ! ! ! End of STBMV . ! ! END use M_blas, only : stbmv_=>STBMV implicit none INTEGER INCX,K,LDA,N CHARACTER DIAG,TRANS,UPLO REAL A(LDA,*),X(*) call STBMV_(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) end subroutine STBMV subroutine STBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! COMMENT --file stbsv.3m_blas.man !> \brief \b STBSV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE STBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,K,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> STBSV solves one of the systems of equations !> !> A*x = b, or A**T*x = b, !> !> where b and x are n element vectors and A is an n by n unit, or !> non-unit, upper or lower triangular band matrix, with ( k + 1 ) !> diagonals. !> !> No test for singularity or near-singularity is included in this !> routine. Such tests must be performed before calling this routine. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the equations to be solved as !> follows: !> !> TRANS = 'N' or 'n' A*x = b. !> !> TRANS = 'T' or 't' A**T*x = b. !> !> TRANS = 'C' or 'c' A**T*x = b. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with UPLO = 'U' or 'u', K specifies the number of !> super-diagonals of the matrix A. !> On entry with UPLO = 'L' or 'l', K specifies the number of !> sub-diagonals of the matrix A. !> K must satisfy 0 .le. K. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) !> by n part of the array A must contain the upper triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row !> ( k + 1 ) of the array, the first super-diagonal starting at !> position 2 in row k, and so on. The top left k by k triangle !> of the array A is not referenced. !> The following program segment will transfer an upper !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = K + 1 - J !> DO 10, I = MAX( 1, J - K ), J !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) !> by n part of the array A must contain the lower triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row 1 of !> the array, the first sub-diagonal starting at position 1 in !> row 2, and so on. The bottom right k by k triangle of the !> array A is not referenced. !> The following program segment will transfer a lower !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = 1 - J !> DO 10, I = J, MIN( N, J + K ) !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Note that when DIAG = 'U' or 'u' the elements of the array A !> corresponding to the diagonal elements of the matrix are not !> referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( k + 1 ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element right-hand side vector b. On exit, X is overwritten !> with the solution vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed by sequentially with one pass through A. ! ! ! Form x := inv( A )*x. ! ! ! Form x := inv( A**T)*x. ! ! ! ! End of STBSV . ! ! END use M_blas, only : stbsv_=>STBSV implicit none INTEGER INCX,K,LDA,N CHARACTER DIAG,TRANS,UPLO REAL A(LDA,*),X(*) call STBSV_(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) end subroutine STBSV subroutine STPMV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! COMMENT --file stpmv.3m_blas.man !> \brief \b STPMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE STPMV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! REAL AP(*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> STPMV performs one of the matrix-vector operations !> !> x := A*x, or x := A**T*x, !> !> where x is an n element vector and A is an n by n unit, or non-unit, !> upper or lower triangular matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' x := A*x. !> !> TRANS = 'T' or 't' x := A**T*x. !> !> TRANS = 'C' or 'c' x := A**T*x. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] AP !> \verbatim !> AP is REAL array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) !> respectively, and so on. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) !> respectively, and so on. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. On exit, X is overwritten with the !> transformed vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of AP are ! accessed sequentially with one pass through AP. ! ! ! Form x:= A*x. ! ! ! Form x := A**T*x. ! ! ! ! End of STPMV . ! ! END use M_blas, only : stpmv_=>STPMV implicit none INTEGER INCX,N CHARACTER DIAG,TRANS,UPLO REAL AP(*),X(*) call STPMV_(UPLO,TRANS,DIAG,N,AP,X,INCX) end subroutine STPMV subroutine STPSV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! COMMENT --file stpsv.3m_blas.man !> \brief \b STPSV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE STPSV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! REAL AP(*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> STPSV solves one of the systems of equations !> !> A*x = b, or A**T*x = b, !> !> where b and x are n element vectors and A is an n by n unit, or !> non-unit, upper or lower triangular matrix, supplied in packed form. !> !> No test for singularity or near-singularity is included in this !> routine. Such tests must be performed before calling this routine. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the equations to be solved as !> follows: !> !> TRANS = 'N' or 'n' A*x = b. !> !> TRANS = 'T' or 't' A**T*x = b. !> !> TRANS = 'C' or 'c' A**T*x = b. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] AP !> \verbatim !> AP is REAL array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) !> respectively, and so on. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) !> respectively, and so on. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element right-hand side vector b. On exit, X is overwritten !> with the solution vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of AP are ! accessed sequentially with one pass through AP. ! ! ! Form x := inv( A )*x. ! ! ! Form x := inv( A**T )*x. ! ! ! ! End of STPSV . ! ! END use M_blas, only : stpsv_=>STPSV implicit none INTEGER INCX,N CHARACTER DIAG,TRANS,UPLO REAL AP(*),X(*) call STPSV_(UPLO,TRANS,DIAG,N,AP,X,INCX) end subroutine STPSV subroutine STRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! COMMENT --file strmm.3m_blas.man !> \brief \b STRMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE STRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! ! .. Scalar Arguments .. ! REAL ALPHA ! INTEGER LDA,LDB,M,N ! CHARACTER DIAG,SIDE,TRANSA,UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),B(LDB,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> STRMM performs one of the matrix-matrix operations !> !> B := alpha*op( A )*B, or B := alpha*B*op( A ), !> !> where alpha is a scalar, B is an m by n matrix, A is a unit, or !> non-unit, upper or lower triangular matrix and op( A ) is one of !> !> op( A ) = A or op( A ) = A**T. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether op( A ) multiplies B from !> the left or right as follows: !> !> SIDE = 'L' or 'l' B := alpha*op( A )*B. !> !> SIDE = 'R' or 'r' B := alpha*B*op( A ). !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix A is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANSA !> \verbatim !> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n' op( A ) = A. !> !> TRANSA = 'T' or 't' op( A ) = A**T. !> !> TRANSA = 'C' or 'c' op( A ) = A**T. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit triangular !> as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of B. M must be at !> least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of B. N must be !> at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. When alpha is !> zero then A is not referenced and B need not be set before !> entry. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, k ), where k is m !> when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. !> Before entry with UPLO = 'U' or 'u', the leading k by k !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading k by k !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' !> then LDA must be at least max( 1, n ). !> \endverbatim !> !> \param[in,out] B !> \verbatim !> B is REAL array, dimension ( LDB, N ) !> Before entry, the leading m by n part of the array B must !> contain the matrix B, and on exit is overwritten by the !> transformed matrix. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form B := alpha*A*B. ! ! ! Form B := alpha*A**T*B. ! ! ! Form B := alpha*B*A. ! ! ! Form B := alpha*B*A**T. ! ! ! ! End of STRMM . ! ! END use M_blas, only : strmm_=>STRMM implicit none REAL ALPHA INTEGER LDA,LDB,M,N CHARACTER DIAG,SIDE,TRANSA,UPLO REAL A(LDA,*),B(LDB,*) call STRMM_(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) end subroutine STRMM subroutine STRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! COMMENT --file strmv.3m_blas.man !> \brief \b STRMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE STRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> STRMV performs one of the matrix-vector operations !> !> x := A*x, or x := A**T*x, !> !> where x is an n element vector and A is an n by n unit, or non-unit, !> upper or lower triangular matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' x := A*x. !> !> TRANS = 'T' or 't' x := A**T*x. !> !> TRANS = 'C' or 'c' x := A**T*x. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. On exit, X is overwritten with the !> transformed vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! Form x := A*x. ! ! ! Form x := A**T*x. ! ! ! ! End of STRMV . ! ! END use M_blas, only : strmv_=>STRMV implicit none INTEGER INCX,LDA,N CHARACTER DIAG,TRANS,UPLO REAL A(LDA,*),X(*) call STRMV_(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) end subroutine STRMV subroutine STRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! COMMENT --file strsm.3m_blas.man !> \brief \b STRSM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE STRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! ! .. Scalar Arguments .. ! REAL ALPHA ! INTEGER LDA,LDB,M,N ! CHARACTER DIAG,SIDE,TRANSA,UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),B(LDB,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> STRSM solves one of the matrix equations !> !> op( A )*X = alpha*B, or X*op( A ) = alpha*B, !> !> where alpha is a scalar, X and B are m by n matrices, A is a unit, or !> non-unit, upper or lower triangular matrix and op( A ) is one of !> !> op( A ) = A or op( A ) = A**T. !> !> The matrix X is overwritten on B. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether op( A ) appears on the left !> or right of X as follows: !> !> SIDE = 'L' or 'l' op( A )*X = alpha*B. !> !> SIDE = 'R' or 'r' X*op( A ) = alpha*B. !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix A is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANSA !> \verbatim !> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n' op( A ) = A. !> !> TRANSA = 'T' or 't' op( A ) = A**T. !> !> TRANSA = 'C' or 'c' op( A ) = A**T. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit triangular !> as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of B. M must be at !> least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of B. N must be !> at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is REAL !> On entry, ALPHA specifies the scalar alpha. When alpha is !> zero then A is not referenced and B need not be set before !> entry. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, k ), !> where k is m when SIDE = 'L' or 'l' !> and k is n when SIDE = 'R' or 'r'. !> Before entry with UPLO = 'U' or 'u', the leading k by k !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading k by k !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' !> then LDA must be at least max( 1, n ). !> \endverbatim !> !> \param[in,out] B !> \verbatim !> B is REAL array, dimension ( LDB, N ) !> Before entry, the leading m by n part of the array B must !> contain the right-hand side matrix B, and on exit is !> overwritten by the solution matrix X. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form B := alpha*inv( A )*B. ! ! ! Form B := alpha*inv( A**T )*B. ! ! ! Form B := alpha*B*inv( A ). ! ! ! Form B := alpha*B*inv( A**T ). ! ! ! ! End of STRSM . ! ! END use M_blas, only : strsm_=>STRSM implicit none REAL ALPHA INTEGER LDA,LDB,M,N CHARACTER DIAG,SIDE,TRANSA,UPLO REAL A(LDA,*),B(LDB,*) call STRSM_(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) end subroutine STRSM subroutine STRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! COMMENT --file strsv.3m_blas.man !> \brief \b STRSV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE STRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! REAL A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> STRSV solves one of the systems of equations !> !> A*x = b, or A**T*x = b, !> !> where b and x are n element vectors and A is an n by n unit, or !> non-unit, upper or lower triangular matrix. !> !> No test for singularity or near-singularity is included in this !> routine. Such tests must be performed before calling this routine. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the equations to be solved as !> follows: !> !> TRANS = 'N' or 'n' A*x = b. !> !> TRANS = 'T' or 't' A**T*x = b. !> !> TRANS = 'C' or 'c' A**T*x = b. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is REAL array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is REAL array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element right-hand side vector b. On exit, X is overwritten !> with the solution vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup single_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! Form x := inv( A )*x. ! ! ! Form x := inv( A**T )*x. ! ! ! ! End of STRSV . ! ! END use M_blas, only : strsv_=>STRSV implicit none INTEGER INCX,LDA,N CHARACTER DIAG,TRANS,UPLO REAL A(LDA,*),X(*) call STRSV_(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) end subroutine STRSV subroutine XERBLA_ARRAY(SRNAME_ARRAY, SRNAME_LEN, INFO) ! COMMENT --file xerbla_array.3m_blas.man !> \brief \b XERBLA_ARRAY ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE XERBLA_ARRAY(SRNAME_ARRAY, SRNAME_LEN, INFO) ! ! .. Scalar Arguments .. ! INTEGER SRNAME_LEN, INFO ! .. ! .. Array Arguments .. ! CHARACTER(*) SRNAME_ARRAY(SRNAME_LEN) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> XERBLA_ARRAY assists other languages in calling XERBLA, the LAPACK !> and BLAS error handler. Rather than taking a Fortran string argument !> as the function's name, XERBLA_ARRAY takes an array of single !> characters along with the array's length. XERBLA_ARRAY then copies !> up to 32 characters of that array into a Fortran string and passes !> that to XERBLA. If called with a non-positive SRNAME_LEN, !> XERBLA_ARRAY will call XERBLA with a string of all blank characters. !> !> Say some macro or other device makes XERBLA_ARRAY available to C99 !> by a name lapack_xerbla and with a common Fortran calling convention. !> Then a C99 program could invoke XERBLA via: !> { !> int flen = strlen(__func__); !> lapack_xerbla(__func__, &flen, &info); !> } !> !> Providing XERBLA_ARRAY is not necessary for intercepting LAPACK !> errors. XERBLA_ARRAY calls XERBLA. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SRNAME_ARRAY !> \verbatim !> SRNAME_ARRAY is CHARACTER(*) array, dimension (SRNAME_LEN) !> The name of the routine which called XERBLA_ARRAY. !> \endverbatim !> !> \param[in] SRNAME_LEN !> \verbatim !> SRNAME_LEN is INTEGER !> The length of the name in SRNAME_ARRAY. !> \endverbatim !> !> \param[in] INFO !> \verbatim !> INFO is INTEGER !> The position of the invalid parameter in the parameter list !> of the calling routine. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup aux_blas ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. ! .. Local Scalars .. ! .. ! .. Local Arrays .. ! .. ! .. Intrinsic Functions .. ! .. ! .. External Functions .. ! .. ! .. Executable Statements .. ! END use M_blas, only : xerbla_array_=>XERBLA_ARRAY implicit none INTEGER SRNAME_LEN, INFO CHARACTER(len=1) SRNAME_ARRAY(SRNAME_LEN) call XERBLA_ARRAY_(SRNAME_ARRAY, SRNAME_LEN, INFO) end subroutine XERBLA_ARRAY subroutine XERBLA( SRNAME, INFO ) ! COMMENT --file xerbla.3m_blas.man !> \brief \b XERBLA ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE XERBLA( SRNAME, INFO ) ! ! .. Scalar Arguments .. ! CHARACTER*(*) SRNAME ! INTEGER INFO ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> XERBLA is an error handler for the LAPACK routines. !> It is called by an LAPACK routine if an input parameter has an !> invalid value. A message is printed and execution stops. !> !> Installers may consider modifying the STOP statement in order to !> call system-specific exception-handling facilities. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SRNAME !> \verbatim !> SRNAME is CHARACTER*(*) !> The name of the routine which called XERBLA. !> \endverbatim !> !> \param[in] INFO !> \verbatim !> INFO is INTEGER !> The position of the invalid parameter in the parameter list !> of the calling routine. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup aux_blas ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! ! ===================================================================== ! ! .. Intrinsic Functions .. ! .. ! .. Executable Statements .. ! ! ! ! ! End of XERBLA ! ! END use M_blas, only : xerbla_=>XERBLA implicit none CHARACTER(len=*),intent(in) :: SRNAME INTEGER,intent(in) :: INFO call XERBLA_( SRNAME, INFO ) END SUBROUTINE XERBLA subroutine ZAXPY(N,ZA,ZX,INCX,ZY,INCY) ! COMMENT --file zaxpy.3m_blas.man !> \brief \b ZAXPY ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZAXPY(N,ZA,ZX,INCX,ZY,INCY) ! ! .. Scalar Arguments .. ! COMPLEX*16 ZA ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! COMPLEX*16 ZX(*),ZY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZAXPY constant times a vector plus a vector. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] ZA !> \verbatim !> ZA is COMPLEX*16 !> On entry, ZA specifies the scalar alpha. !> \endverbatim !> !> \param[in] ZX !> \verbatim !> ZX is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of ZX !> \endverbatim !> !> \param[in,out] ZY !> \verbatim !> ZY is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of ZY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex16_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! ! code for both increments equal to 1 ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! ! END use M_blas, only : zaxpy_=>ZAXPY implicit none COMPLEX*16 ZA INTEGER INCX,INCY,N COMPLEX*16 ZX(*),ZY(*) call ZAXPY_(N,ZA,ZX,INCX,ZY,INCY) end subroutine ZAXPY subroutine ZCOPY(N,ZX,INCX,ZY,INCY) ! COMMENT --file zcopy.3m_blas.man !> \brief \b ZCOPY ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZCOPY(N,ZX,INCX,ZY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! COMPLEX*16 ZX(*),ZY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZCOPY copies a vector, x, to a vector, y. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] ZX !> \verbatim !> ZX is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of ZX !> \endverbatim !> !> \param[out] ZY !> \verbatim !> ZY is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of ZY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex16_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, linpack, 4/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! ! code for both increments equal to 1 ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! END use M_blas, only : zcopy_=>ZCOPY implicit none INTEGER INCX,INCY,N COMPLEX*16 ZX(*),ZY(*) call ZCOPY_(N,ZX,INCX,ZY,INCY) end subroutine ZCOPY COMPLEX*16 FUNCTION ZDOTC(N,ZX,INCX,ZY,INCY) ! COMMENT --file zdotc.3m_blas.man !> \brief \b ZDOTC ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! COMPLEX*16 FUNCTION ZDOTC(N,ZX,INCX,ZY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! COMPLEX*16 ZX(*),ZY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZDOTC forms the dot product of two complex vectors !> ZDOTC = X^H * Y !> !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] ZX !> \verbatim !> ZX is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of ZX !> \endverbatim !> !> \param[in] ZY !> \verbatim !> ZY is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of ZY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex16_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for both increments equal to 1 ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! END use M_blas, only : zdotc_=>ZDOTC implicit none INTEGER INCX,INCY,N COMPLEX*16 ZX(*),ZY(*) zdotc=ZDOTC_(N,ZX,INCX,ZY,INCY) END FUNCTION ZDOTC COMPLEX*16 FUNCTION ZDOTU(N,ZX,INCX,ZY,INCY) ! COMMENT --file zdotu.3m_blas.man !> \brief \b ZDOTU ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! COMPLEX*16 FUNCTION ZDOTU(N,ZX,INCX,ZY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! COMPLEX*16 ZX(*),ZY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZDOTU forms the dot product of two complex vectors !> ZDOTU = X^T * Y !> !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] ZX !> \verbatim !> ZX is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of ZX !> \endverbatim !> !> \param[in] ZY !> \verbatim !> ZY is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of ZY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex16_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! ! code for both increments equal to 1 ! ! ! code for unequal increments or equal increments ! not equal to 1 ! ! END use M_blas, only : zdotu_=>ZDOTU implicit none INTEGER INCX,INCY,N COMPLEX*16 ZX(*),ZY(*) zdotu=ZDOTU_(N,ZX,INCX,ZY,INCY) END FUNCTION ZDOTU subroutine ZDROT( N, ZX, INCX, ZY, INCY, C, S ) ! COMMENT --file zdrot.3m_blas.man !> \brief \b ZDROT ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZDROT( N, ZX, INCX, ZY, INCY, C, S ) ! ! .. Scalar Arguments .. ! INTEGER INCX, INCY, N ! DOUBLE PRECISION C, S ! .. ! .. Array Arguments .. ! COMPLEX*16 ZX( * ), ZY( * ) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> Applies a plane rotation, where the cos and sin (c and s) are real !> and the vectors cx and cy are complex. !> jack dongarra, linpack, 3/11/78. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the vectors cx and cy. !> N must be at least zero. !> \endverbatim !> !> \param[in,out] ZX !> \verbatim !> ZX is COMPLEX*16 array, dimension at least !> ( 1 + ( N - 1 )*abs( INCX ) ). !> Before entry, the incremented array ZX must contain the n !> element vector cx. On exit, ZX is overwritten by the updated !> vector cx. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> ZX. INCX must not be zero. !> \endverbatim !> !> \param[in,out] ZY !> \verbatim !> ZY is COMPLEX*16 array, dimension at least !> ( 1 + ( N - 1 )*abs( INCY ) ). !> Before entry, the incremented array ZY must contain the n !> element vector cy. On exit, ZY is overwritten by the updated !> vector cy. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> ZY. INCY must not be zero. !> \endverbatim !> !> \param[in] C !> \verbatim !> C is DOUBLE PRECISION !> On entry, C specifies the cosine, cos. !> \endverbatim !> !> \param[in] S !> \verbatim !> S is DOUBLE PRECISION !> On entry, S specifies the sine, sin. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level1 ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Executable Statements .. ! ! ! code for both increments equal to 1 ! ! ! code for unequal increments or equal increments not equal ! to 1 ! ! END use M_blas, only : zdrot_=>ZDROT implicit none INTEGER INCX, INCY, N DOUBLE PRECISION C, S COMPLEX*16 ZX( * ), ZY( * ) call ZDROT_( N, ZX, INCX, ZY, INCY, C, S ) end subroutine ZDROT subroutine ZDSCAL(N,DA,ZX,INCX) ! COMMENT --file zdscal.3m_blas.man !> \brief \b ZDSCAL ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZDSCAL(N,DA,ZX,INCX) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION DA ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! COMPLEX*16 ZX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZDSCAL scales a vector by a constant. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] DA !> \verbatim !> DA is DOUBLE PRECISION !> On entry, DA specifies the scalar alpha. !> \endverbatim !> !> \param[in,out] ZX !> \verbatim !> ZX is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of ZX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex16_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! ! code for increment equal to 1 ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : zdscal_=>ZDSCAL implicit none DOUBLE PRECISION DA INTEGER INCX,N COMPLEX*16 ZX(*) call ZDSCAL_(N,DA,ZX,INCX) end subroutine ZDSCAL subroutine ZGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file zgbmv.3m_blas.man !> \brief \b ZGBMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZGBMV(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA,BETA ! INTEGER INCX,INCY,KL,KU,LDA,M,N ! CHARACTER TRANS ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZGBMV performs one of the matrix-vector operations !> !> y := alpha*A*x + beta*y, or y := alpha*A**T*x + beta*y, or !> !> y := alpha*A**H*x + beta*y, !> !> where alpha and beta are scalars, x and y are vectors and A is an !> m by n band matrix, with kl sub-diagonals and ku super-diagonals. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' y := alpha*A*x + beta*y. !> !> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y. !> !> TRANS = 'C' or 'c' y := alpha*A**H*x + beta*y. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] KL !> \verbatim !> KL is INTEGER !> On entry, KL specifies the number of sub-diagonals of the !> matrix A. KL must satisfy 0 .le. KL. !> \endverbatim !> !> \param[in] KU !> \verbatim !> KU is INTEGER !> On entry, KU specifies the number of super-diagonals of the !> matrix A. KU must satisfy 0 .le. KU. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, N ) !> Before entry, the leading ( kl + ku + 1 ) by n part of the !> array A must contain the matrix of coefficients, supplied !> column by column, with the leading diagonal of the matrix in !> row ( ku + 1 ) of the array, the first super-diagonal !> starting at position 2 in row ku, the first sub-diagonal !> starting at position 1 in row ( ku + 2 ), and so on. !> Elements in the array A that do not correspond to elements !> in the band matrix (such as the top left ku by ku triangle) !> are not referenced. !> The following program segment will transfer a band matrix !> from conventional full matrix storage to band storage: !> !> DO 20, J = 1, N !> K = KU + 1 - J !> DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL ) !> A( K + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( kl + ku + 1 ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. !> Before entry, the incremented array X must contain the !> vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX*16 !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is COMPLEX*16 array, dimension at least !> ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. !> Before entry, the incremented array Y must contain the !> vector y. On exit, Y is overwritten by the updated vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set LENX and LENY, the lengths of the vectors x and y, and set ! up the start points in X and Y. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the band part of A. ! ! First form y := beta*y. ! ! ! Form y := alpha*A*x + y. ! ! ! Form y := alpha*A**T*x + y or y := alpha*A**H*x + y. ! ! ! ! End of ZGBMV . ! ! END use M_blas, only : zgbmv_=>ZGBMV implicit none COMPLEX*16 ALPHA,BETA INTEGER INCX,INCY,KL,KU,LDA,M,N CHARACTER TRANS COMPLEX*16 A(LDA,*),X(*),Y(*) call ZGBMV_(TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine ZGBMV subroutine ZGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file zgemm.3m_blas.man !> \brief \b ZGEMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA,BETA ! INTEGER K,LDA,LDB,LDC,M,N ! CHARACTER TRANSA,TRANSB ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZGEMM performs one of the matrix-matrix operations !> !> C := alpha*op( A )*op( B ) + beta*C, !> !> where op( X ) is one of !> !> op( X ) = X or op( X ) = X**T or op( X ) = X**H, !> !> alpha and beta are scalars, and A, B and C are matrices, with op( A ) !> an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] TRANSA !> \verbatim !> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n', op( A ) = A. !> !> TRANSA = 'T' or 't', op( A ) = A**T. !> !> TRANSA = 'C' or 'c', op( A ) = A**H. !> \endverbatim !> !> \param[in] TRANSB !> \verbatim !> TRANSB is CHARACTER*1 !> On entry, TRANSB specifies the form of op( B ) to be used in !> the matrix multiplication as follows: !> !> TRANSB = 'N' or 'n', op( B ) = B. !> !> TRANSB = 'T' or 't', op( B ) = B**T. !> !> TRANSB = 'C' or 'c', op( B ) = B**H. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix !> op( A ) and of the matrix C. M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix !> op( B ) and the number of columns of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry, K specifies the number of columns of the matrix !> op( A ) and the number of rows of the matrix op( B ). K must !> be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is !> k when TRANSA = 'N' or 'n', and is m otherwise. !> Before entry with TRANSA = 'N' or 'n', the leading m by k !> part of the array A must contain the matrix A, otherwise !> the leading k by m part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANSA = 'N' or 'n' then !> LDA must be at least max( 1, m ), otherwise LDA must be at !> least max( 1, k ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is COMPLEX*16 array, dimension ( LDB, kb ), where kb is !> n when TRANSB = 'N' or 'n', and is k otherwise. !> Before entry with TRANSB = 'N' or 'n', the leading k by n !> part of the array B must contain the matrix B, otherwise !> the leading n by k part of the array B must contain the !> matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. When TRANSB = 'N' or 'n' then !> LDB must be at least max( 1, k ), otherwise LDB must be at !> least max( 1, n ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX*16 !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then C need not be set on input. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX*16 array, dimension ( LDC, N ) !> Before entry, the leading m by n part of the array C must !> contain the matrix C, except when beta is zero, in which !> case C need not be set on entry. !> On exit, the array C is overwritten by the m by n matrix !> ( alpha*op( A )*op( B ) + beta*C ). !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Set NOTA and NOTB as true if A and B respectively are not ! conjugated or transposed, set CONJA and CONJB as true if A and ! B respectively are to be transposed but not conjugated and set ! NROWA and NROWB as the number of rows of A and B respectively. ! ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B + beta*C. ! ! ! Form C := alpha*A**H*B + beta*C. ! ! ! Form C := alpha*A**T*B + beta*C ! ! ! Form C := alpha*A*B**H + beta*C. ! ! ! Form C := alpha*A*B**T + beta*C ! ! ! Form C := alpha*A**H*B**H + beta*C. ! ! ! Form C := alpha*A**H*B**T + beta*C ! ! ! Form C := alpha*A**T*B**H + beta*C ! ! ! Form C := alpha*A**T*B**T + beta*C ! ! ! ! End of ZGEMM . ! ! END use M_blas, only : zgemm_=>ZGEMM implicit none COMPLEX*16 ALPHA,BETA INTEGER K,LDA,LDB,LDC,M,N CHARACTER TRANSA,TRANSB COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*) call ZGEMM_(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine ZGEMM subroutine ZGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file zgemv.3m_blas.man !> \brief \b ZGEMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA,BETA ! INTEGER INCX,INCY,LDA,M,N ! CHARACTER TRANS ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZGEMV performs one of the matrix-vector operations !> !> y := alpha*A*x + beta*y, or y := alpha*A**T*x + beta*y, or !> !> y := alpha*A**H*x + beta*y, !> !> where alpha and beta are scalars, x and y are vectors and A is an !> m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' y := alpha*A*x + beta*y. !> !> TRANS = 'T' or 't' y := alpha*A**T*x + beta*y. !> !> TRANS = 'C' or 'c' y := alpha*A**H*x + beta*y. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, N ) !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, m ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. !> Before entry, the incremented array X must contain the !> vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX*16 !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is COMPLEX*16 array, dimension at least !> ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' !> and at least !> ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. !> Before entry with BETA non-zero, the incremented array Y !> must contain the vector y. On exit, Y is overwritten by the !> updated vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set LENX and LENY, the lengths of the vectors x and y, and set ! up the start points in X and Y. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! First form y := beta*y. ! ! ! Form y := alpha*A*x + y. ! ! ! Form y := alpha*A**T*x + y or y := alpha*A**H*x + y. ! ! ! ! End of ZGEMV . ! ! END use M_blas, only : zgemv_=>ZGEMV implicit none COMPLEX*16 ALPHA,BETA INTEGER INCX,INCY,LDA,M,N CHARACTER TRANS COMPLEX*16 A(LDA,*),X(*),Y(*) call ZGEMV_(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine ZGEMV subroutine ZGERC(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! COMMENT --file zgerc.3m_blas.man !> \brief \b ZGERC ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZGERC(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA ! INTEGER INCX,INCY,LDA,M,N ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZGERC performs the rank 1 operation !> !> A := alpha*x*y**H + A, !> !> where alpha is a scalar, x is an m element vector, y is an n element !> vector and A is an m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( m - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the m !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, N ) !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. On exit, A is !> overwritten by the updated matrix. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! ! End of ZGERC . ! ! END use M_blas, only : zgerc_=>ZGERC implicit none COMPLEX*16 ALPHA INTEGER INCX,INCY,LDA,M,N COMPLEX*16 A(LDA,*),X(*),Y(*) call ZGERC_(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) end subroutine ZGERC subroutine ZGERU(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! COMMENT --file zgeru.3m_blas.man !> \brief \b ZGERU ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZGERU(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA ! INTEGER INCX,INCY,LDA,M,N ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZGERU performs the rank 1 operation !> !> A := alpha*x*y**T + A, !> !> where alpha is a scalar, x is an m element vector, y is an n element !> vector and A is an m by n matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix A. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( m - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the m !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, N ) !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. On exit, A is !> overwritten by the updated matrix. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! ! End of ZGERU . ! ! END use M_blas, only : zgeru_=>ZGERU implicit none COMPLEX*16 ALPHA INTEGER INCX,INCY,LDA,M,N COMPLEX*16 A(LDA,*),X(*),Y(*) call ZGERU_(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) end subroutine ZGERU subroutine ZHBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file zhbmv.3m_blas.man !> \brief \b ZHBMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZHBMV(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA,BETA ! INTEGER INCX,INCY,K,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZHBMV performs the matrix-vector operation !> !> y := alpha*A*x + beta*y, !> !> where alpha and beta are scalars, x and y are n element vectors and !> A is an n by n hermitian band matrix, with k super-diagonals. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the band matrix A is being supplied as !> follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> being supplied. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> being supplied. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry, K specifies the number of super-diagonals of the !> matrix A. K must satisfy 0 .le. K. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) !> by n part of the array A must contain the upper triangular !> band part of the hermitian matrix, supplied column by !> column, with the leading diagonal of the matrix in row !> ( k + 1 ) of the array, the first super-diagonal starting at !> position 2 in row k, and so on. The top left k by k triangle !> of the array A is not referenced. !> The following program segment will transfer the upper !> triangular part of a hermitian band matrix from conventional !> full matrix storage to band storage: !> !> DO 20, J = 1, N !> M = K + 1 - J !> DO 10, I = MAX( 1, J - K ), J !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) !> by n part of the array A must contain the lower triangular !> band part of the hermitian matrix, supplied column by !> column, with the leading diagonal of the matrix in row 1 of !> the array, the first sub-diagonal starting at position 1 in !> row 2, and so on. The bottom right k by k triangle of the !> array A is not referenced. !> The following program segment will transfer the lower !> triangular part of a hermitian band matrix from conventional !> full matrix storage to band storage: !> !> DO 20, J = 1, N !> M = 1 - J !> DO 10, I = J, MIN( N, J + K ) !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Note that the imaginary parts of the diagonal elements need !> not be set and are assumed to be zero. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( k + 1 ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the !> vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX*16 !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the !> vector y. On exit, Y is overwritten by the updated vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y. ! ! ! Start the operations. In this version the elements of the array A ! are accessed sequentially with one pass through A. ! ! First form y := beta*y. ! ! ! Form y when upper triangle of A is stored. ! ! ! Form y when lower triangle of A is stored. ! ! ! ! End of ZHBMV . ! ! END use M_blas, only : zhbmv_=>ZHBMV implicit none COMPLEX*16 ALPHA,BETA INTEGER INCX,INCY,K,LDA,N CHARACTER UPLO COMPLEX*16 A(LDA,*),X(*),Y(*) call ZHBMV_(UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine ZHBMV subroutine ZHEMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file zhemm.3m_blas.man !> \brief \b ZHEMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZHEMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA,BETA ! INTEGER LDA,LDB,LDC,M,N ! CHARACTER SIDE,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZHEMM performs one of the matrix-matrix operations !> !> C := alpha*A*B + beta*C, !> !> or !> !> C := alpha*B*A + beta*C, !> !> where alpha and beta are scalars, A is an hermitian matrix and B and !> C are m by n matrices. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether the hermitian matrix A !> appears on the left or right in the operation as follows: !> !> SIDE = 'L' or 'l' C := alpha*A*B + beta*C, !> !> SIDE = 'R' or 'r' C := alpha*B*A + beta*C, !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the hermitian matrix A is to be !> referenced as follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of the !> hermitian matrix is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of the !> hermitian matrix is to be referenced. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix C. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix C. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is !> m when SIDE = 'L' or 'l' and is n otherwise. !> Before entry with SIDE = 'L' or 'l', the m by m part of !> the array A must contain the hermitian matrix, such that !> when UPLO = 'U' or 'u', the leading m by m upper triangular !> part of the array A must contain the upper triangular part !> of the hermitian matrix and the strictly lower triangular !> part of A is not referenced, and when UPLO = 'L' or 'l', !> the leading m by m lower triangular part of the array A !> must contain the lower triangular part of the hermitian !> matrix and the strictly upper triangular part of A is not !> referenced. !> Before entry with SIDE = 'R' or 'r', the n by n part of !> the array A must contain the hermitian matrix, such that !> when UPLO = 'U' or 'u', the leading n by n upper triangular !> part of the array A must contain the upper triangular part !> of the hermitian matrix and the strictly lower triangular !> part of A is not referenced, and when UPLO = 'L' or 'l', !> the leading n by n lower triangular part of the array A !> must contain the lower triangular part of the hermitian !> matrix and the strictly upper triangular part of A is not !> referenced. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), otherwise LDA must be at !> least max( 1, n ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is COMPLEX*16 array, dimension ( LDB, N ) !> Before entry, the leading m by n part of the array B must !> contain the matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX*16 !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then C need not be set on input. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX*16 array, dimension ( LDC, N ) !> Before entry, the leading m by n part of the array C must !> contain the matrix C, except when beta is zero, in which !> case C need not be set on entry. !> On exit, the array C is overwritten by the m by n updated !> matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Set NROWA as the number of rows of A. ! ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B + beta*C. ! ! ! Form C := alpha*B*A + beta*C. ! ! ! ! End of ZHEMM . ! ! END use M_blas, only : zhemm_=>ZHEMM implicit none COMPLEX*16 ALPHA,BETA INTEGER LDA,LDB,LDC,M,N CHARACTER SIDE,UPLO COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*) call ZHEMM_(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine ZHEMM subroutine ZHEMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! COMMENT --file zhemv.3m_blas.man !> \brief \b ZHEMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZHEMV(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA,BETA ! INTEGER INCX,INCY,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZHEMV performs the matrix-vector operation !> !> y := alpha*A*x + beta*y, !> !> where alpha and beta are scalars, x and y are n element vectors and !> A is an n by n hermitian matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of A !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of A !> is to be referenced. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular part of the hermitian matrix and the strictly !> lower triangular part of A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular part of the hermitian matrix and the strictly !> upper triangular part of A is not referenced. !> Note that the imaginary parts of the diagonal elements need !> not be set and are assumed to be zero. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX*16 !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. On exit, Y is overwritten by the updated !> vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the triangular part ! of A. ! ! First form y := beta*y. ! ! ! Form y when A is stored in upper triangle. ! ! ! Form y when A is stored in lower triangle. ! ! ! ! End of ZHEMV . ! ! END use M_blas, only : zhemv_=>ZHEMV implicit none COMPLEX*16 ALPHA,BETA INTEGER INCX,INCY,LDA,N CHARACTER UPLO COMPLEX*16 A(LDA,*),X(*),Y(*) call ZHEMV_(UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) end subroutine ZHEMV subroutine ZHER2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! COMMENT --file zher2.3m_blas.man !> \brief \b ZHER2 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZHER2(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA ! INTEGER INCX,INCY,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZHER2 performs the hermitian rank 2 operation !> !> A := alpha*x*y**H + conjg( alpha )*y*x**H + A, !> !> where alpha is a scalar, x and y are n element vectors and A is an n !> by n hermitian matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of A !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of A !> is to be referenced. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular part of the hermitian matrix and the strictly !> lower triangular part of A is not referenced. On exit, the !> upper triangular part of the array A is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular part of the hermitian matrix and the strictly !> upper triangular part of A is not referenced. On exit, the !> lower triangular part of the array A is overwritten by the !> lower triangular part of the updated matrix. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero, and on exit they !> are set to zero. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y if the increments are not both ! unity. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the triangular part ! of A. ! ! ! Form A when A is stored in the upper triangle. ! ! ! Form A when A is stored in the lower triangle. ! ! ! ! End of ZHER2 . ! ! END use M_blas, only : zher2_=>ZHER2 implicit none COMPLEX*16 ALPHA INTEGER INCX,INCY,LDA,N CHARACTER UPLO COMPLEX*16 A(LDA,*),X(*),Y(*) call ZHER2_(UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA) end subroutine ZHER2 subroutine ZHER2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file zher2k.3m_blas.man !> \brief \b ZHER2K ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZHER2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA ! DOUBLE PRECISION BETA ! INTEGER K,LDA,LDB,LDC,N ! CHARACTER TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZHER2K performs one of the hermitian rank 2k operations !> !> C := alpha*A*B**H + conjg( alpha )*B*A**H + beta*C, !> !> or !> !> C := alpha*A**H*B + conjg( alpha )*B**H*A + beta*C, !> !> where alpha and beta are scalars with beta real, C is an n by n !> hermitian matrix and A and B are n by k matrices in the first case !> and k by n matrices in the second case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array C is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of C !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of C !> is to be referenced. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' C := alpha*A*B**H + !> conjg( alpha )*B*A**H + !> beta*C. !> !> TRANS = 'C' or 'c' C := alpha*A**H*B + !> conjg( alpha )*B**H*A + !> beta*C. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with TRANS = 'N' or 'n', K specifies the number !> of columns of the matrices A and B, and on entry with !> TRANS = 'C' or 'c', K specifies the number of rows of the !> matrices A and B. K must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 . !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array A must contain the matrix A, otherwise !> the leading k by n part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDA must be at least max( 1, n ), otherwise LDA must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is COMPLEX*16 array, dimension ( LDB, kb ), where kb is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array B must contain the matrix B, otherwise !> the leading k by n part of the array B must contain the !> matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDB must be at least max( 1, n ), otherwise LDB must !> be at least max( 1, k ). !> Unchanged on exit. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is DOUBLE PRECISION . !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX*16 array, dimension ( LDC, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array C must contain the upper !> triangular part of the hermitian matrix and the strictly !> lower triangular part of C is not referenced. On exit, the !> upper triangular part of the array C is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array C must contain the lower !> triangular part of the hermitian matrix and the strictly !> upper triangular part of C is not referenced. On exit, the !> lower triangular part of the array C is overwritten by the !> lower triangular part of the updated matrix. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero, and on exit they !> are set to zero. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> !> -- Modified 8-Nov-93 to set C(J,J) to DBLE( C(J,J) ) when BETA = 1. !> Ed Anderson, Cray Research Inc. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B**H + conjg( alpha )*B*A**H + ! C. ! ! ! Form C := alpha*A**H*B + conjg( alpha )*B**H*A + ! C. ! ! ! ! End of ZHER2K. ! ! END use M_blas, only : zher2k_=>ZHER2K implicit none COMPLEX*16 ALPHA DOUBLE PRECISION BETA INTEGER K,LDA,LDB,LDC,N CHARACTER TRANS,UPLO COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*) call ZHER2K_(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine ZHER2K subroutine ZHER(UPLO,N,ALPHA,X,INCX,A,LDA) ! COMMENT --file zher.3m_blas.man !> \brief \b ZHER ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZHER(UPLO,N,ALPHA,X,INCX,A,LDA) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA ! INTEGER INCX,LDA,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZHER performs the hermitian rank 1 operation !> !> A := alpha*x*x**H + A, !> !> where alpha is a real scalar, x is an n element vector and A is an !> n by n hermitian matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of A !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of A !> is to be referenced. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in,out] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular part of the hermitian matrix and the strictly !> lower triangular part of A is not referenced. On exit, the !> upper triangular part of the array A is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular part of the hermitian matrix and the strictly !> upper triangular part of A is not referenced. On exit, the !> lower triangular part of the array A is overwritten by the !> lower triangular part of the updated matrix. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero, and on exit they !> are set to zero. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set the start point in X if the increment is not unity. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through the triangular part ! of A. ! ! ! Form A when A is stored in upper triangle. ! ! ! Form A when A is stored in lower triangle. ! ! ! ! End of ZHER . ! ! END use M_blas, only : zher_=>ZHER implicit none DOUBLE PRECISION ALPHA INTEGER INCX,LDA,N CHARACTER UPLO COMPLEX*16 A(LDA,*),X(*) call ZHER_(UPLO,N,ALPHA,X,INCX,A,LDA) end subroutine ZHER subroutine ZHERK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) ! COMMENT --file zherk.3m_blas.man !> \brief \b ZHERK ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZHERK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA,BETA ! INTEGER K,LDA,LDC,N ! CHARACTER TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZHERK performs one of the hermitian rank k operations !> !> C := alpha*A*A**H + beta*C, !> !> or !> !> C := alpha*A**H*A + beta*C, !> !> where alpha and beta are real scalars, C is an n by n hermitian !> matrix and A is an n by k matrix in the first case and a k by n !> matrix in the second case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array C is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of C !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of C !> is to be referenced. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' C := alpha*A*A**H + beta*C. !> !> TRANS = 'C' or 'c' C := alpha*A**H*A + beta*C. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with TRANS = 'N' or 'n', K specifies the number !> of columns of the matrix A, and on entry with !> TRANS = 'C' or 'c', K specifies the number of rows of the !> matrix A. K must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION . !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array A must contain the matrix A, otherwise !> the leading k by n part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDA must be at least max( 1, n ), otherwise LDA must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is DOUBLE PRECISION. !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX*16 array, dimension ( LDC, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array C must contain the upper !> triangular part of the hermitian matrix and the strictly !> lower triangular part of C is not referenced. On exit, the !> upper triangular part of the array C is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array C must contain the lower !> triangular part of the hermitian matrix and the strictly !> upper triangular part of C is not referenced. On exit, the !> lower triangular part of the array C is overwritten by the !> lower triangular part of the updated matrix. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero, and on exit they !> are set to zero. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> !> -- Modified 8-Nov-93 to set C(J,J) to DBLE( C(J,J) ) when BETA = 1. !> Ed Anderson, Cray Research Inc. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*A**H + beta*C. ! ! ! Form C := alpha*A**H*A + beta*C. ! ! ! ! End of ZHERK . ! ! END use M_blas, only : zherk_=>ZHERK implicit none DOUBLE PRECISION ALPHA,BETA INTEGER K,LDA,LDC,N CHARACTER TRANS,UPLO COMPLEX*16 A(LDA,*),C(LDC,*) call ZHERK_(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) end subroutine ZHERK subroutine ZHPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY) ! COMMENT --file zhpmv.3m_blas.man !> \brief \b ZHPMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZHPMV(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA,BETA ! INTEGER INCX,INCY,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 AP(*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZHPMV performs the matrix-vector operation !> !> y := alpha*A*x + beta*y, !> !> where alpha and beta are scalars, x and y are n element vectors and !> A is an n by n hermitian matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the matrix A is supplied in the packed !> array AP as follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> supplied in AP. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> supplied in AP. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] AP !> \verbatim !> AP is COMPLEX*16 array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular part of the hermitian matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) !> and a( 2, 2 ) respectively, and so on. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular part of the hermitian matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) !> and a( 3, 1 ) respectively, and so on. !> Note that the imaginary parts of the diagonal elements need !> not be set and are assumed to be zero. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX*16 !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> \endverbatim !> !> \param[in,out] Y !> \verbatim !> Y is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. On exit, Y is overwritten by the updated !> vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y. ! ! ! Start the operations. In this version the elements of the array AP ! are accessed sequentially with one pass through AP. ! ! First form y := beta*y. ! ! ! Form y when AP contains the upper triangle. ! ! ! Form y when AP contains the lower triangle. ! ! ! ! End of ZHPMV . ! ! END use M_blas, only : zhpmv_=>ZHPMV implicit none COMPLEX*16 ALPHA,BETA INTEGER INCX,INCY,N CHARACTER UPLO COMPLEX*16 AP(*),X(*),Y(*) call ZHPMV_(UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY) end subroutine ZHPMV subroutine ZHPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP) ! COMMENT --file zhpr2.3m_blas.man !> \brief \b ZHPR2 ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZHPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA ! INTEGER INCX,INCY,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 AP(*),X(*),Y(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZHPR2 performs the hermitian rank 2 operation !> !> A := alpha*x*y**H + conjg( alpha )*y*x**H + A, !> !> where alpha is a scalar, x and y are n element vectors and A is an !> n by n hermitian matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the matrix A is supplied in the packed !> array AP as follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> supplied in AP. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> supplied in AP. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in] Y !> \verbatim !> Y is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCY ) ). !> Before entry, the incremented array Y must contain the n !> element vector y. !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> \endverbatim !> !> \param[in,out] AP !> \verbatim !> AP is COMPLEX*16 array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular part of the hermitian matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) !> and a( 2, 2 ) respectively, and so on. On exit, the array !> AP is overwritten by the upper triangular part of the !> updated matrix. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular part of the hermitian matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) !> and a( 3, 1 ) respectively, and so on. On exit, the array !> AP is overwritten by the lower triangular part of the !> updated matrix. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero, and on exit they !> are set to zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set up the start points in X and Y if the increments are not both ! unity. ! ! ! Start the operations. In this version the elements of the array AP ! are accessed sequentially with one pass through AP. ! ! ! Form A when upper triangle is stored in AP. ! ! ! Form A when lower triangle is stored in AP. ! ! ! ! End of ZHPR2 . ! ! END use M_blas, only : zhpr2_=>ZHPR2 implicit none COMPLEX*16 ALPHA INTEGER INCX,INCY,N CHARACTER UPLO COMPLEX*16 AP(*),X(*),Y(*) call ZHPR2_(UPLO,N,ALPHA,X,INCX,Y,INCY,AP) end subroutine ZHPR2 subroutine ZHPR(UPLO,N,ALPHA,X,INCX,AP) ! COMMENT --file zhpr.3m_blas.man !> \brief \b ZHPR ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZHPR(UPLO,N,ALPHA,X,INCX,AP) ! ! .. Scalar Arguments .. ! DOUBLE PRECISION ALPHA ! INTEGER INCX,N ! CHARACTER UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 AP(*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZHPR performs the hermitian rank 1 operation !> !> A := alpha*x*x**H + A, !> !> where alpha is a real scalar, x is an n element vector and A is an !> n by n hermitian matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the matrix A is supplied in the packed !> array AP as follows: !> !> UPLO = 'U' or 'u' The upper triangular part of A is !> supplied in AP. !> !> UPLO = 'L' or 'l' The lower triangular part of A is !> supplied in AP. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is DOUBLE PRECISION. !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim !> !> \param[in,out] AP !> \verbatim !> AP is COMPLEX*16 array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular part of the hermitian matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 1, 2 ) !> and a( 2, 2 ) respectively, and so on. On exit, the array !> AP is overwritten by the upper triangular part of the !> updated matrix. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular part of the hermitian matrix !> packed sequentially, column by column, so that AP( 1 ) !> contains a( 1, 1 ), AP( 2 ) and AP( 3 ) contain a( 2, 1 ) !> and a( 3, 1 ) respectively, and so on. On exit, the array !> AP is overwritten by the lower triangular part of the !> updated matrix. !> Note that the imaginary parts of the diagonal elements need !> not be set, they are assumed to be zero, and on exit they !> are set to zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! Set the start point in X if the increment is not unity. ! ! ! Start the operations. In this version the elements of the array AP ! are accessed sequentially with one pass through AP. ! ! ! Form A when upper triangle is stored in AP. ! ! ! Form A when lower triangle is stored in AP. ! ! ! ! End of ZHPR . ! ! END use M_blas, only : zhpr_=>ZHPR implicit none DOUBLE PRECISION ALPHA INTEGER INCX,N CHARACTER UPLO COMPLEX*16 AP(*),X(*) call ZHPR_(UPLO,N,ALPHA,X,INCX,AP) end subroutine ZHPR subroutine ZROTG(CA,CB,C,S) ! COMMENT --file zrotg.3m_blas.man !> \brief \b ZROTG ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZROTG(CA,CB,C,S) ! ! .. Scalar Arguments .. ! COMPLEX*16 CA,CB,S ! DOUBLE PRECISION C ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZROTG determines a double complex Givens rotation. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in,out] CA !> \verbatim !> CA is COMPLEX*16 !> \endverbatim !> !> \param[in] CB !> \verbatim !> CB is COMPLEX*16 !> \endverbatim !> !> \param[out] C !> \verbatim !> C is DOUBLE PRECISION !> \endverbatim !> !> \param[out] S !> \verbatim !> S is COMPLEX*16 !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex16_blas_level1 ! ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! .. Intrinsic Functions .. ! .. ! END use M_blas, only : zrotg_=>ZROTG implicit none COMPLEX*16 CA,CB,S DOUBLE PRECISION C call ZROTG_(CA,CB,C,S) end subroutine ZROTG subroutine ZSCAL(N,ZA,ZX,INCX) ! COMMENT --file zscal.3m_blas.man !> \brief \b ZSCAL ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZSCAL(N,ZA,ZX,INCX) ! ! .. Scalar Arguments .. ! COMPLEX*16 ZA ! INTEGER INCX,N ! .. ! .. Array Arguments .. ! COMPLEX*16 ZX(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZSCAL scales a vector by a constant. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in] ZA !> \verbatim !> ZA is COMPLEX*16 !> On entry, ZA specifies the scalar alpha. !> \endverbatim !> !> \param[in,out] ZX !> \verbatim !> ZX is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of ZX !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex16_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, 3/11/78. !> modified 3/93 to return if incx .le. 0. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! ! code for increment equal to 1 ! ! ! code for increment not equal to 1 ! ! END use M_blas, only : zscal_=>ZSCAL implicit none COMPLEX*16 ZA INTEGER INCX,N COMPLEX*16 ZX(*) call ZSCAL_(N,ZA,ZX,INCX) end subroutine ZSCAL subroutine ZSWAP(N,ZX,INCX,ZY,INCY) ! COMMENT --file zswap.3m_blas.man !> \brief \b ZSWAP ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZSWAP(N,ZX,INCX,ZY,INCY) ! ! .. Scalar Arguments .. ! INTEGER INCX,INCY,N ! .. ! .. Array Arguments .. ! COMPLEX*16 ZX(*),ZY(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZSWAP interchanges two vectors. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] N !> \verbatim !> N is INTEGER !> number of elements in input vector(s) !> \endverbatim !> !> \param[in,out] ZX !> \verbatim !> ZX is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> storage spacing between elements of ZX !> \endverbatim !> !> \param[in,out] ZY !> \verbatim !> ZY is COMPLEX*16 array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) !> \endverbatim !> !> \param[in] INCY !> \verbatim !> INCY is INTEGER !> storage spacing between elements of ZY !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date November 2017 ! !> \ingroup complex16_blas_level1 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> jack dongarra, 3/11/78. !> modified 12/3/93, array(1) declarations changed to array(*) !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level1 routine (version 3.8.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! November 2017 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Local Scalars .. ! .. ! ! code for both increments equal to 1 ! ! code for unequal increments or equal increments not equal ! to 1 ! ! END use M_blas, only : zswap_=>ZSWAP implicit none INTEGER INCX,INCY,N COMPLEX*16 ZX(*),ZY(*) call ZSWAP_(N,ZX,INCX,ZY,INCY) end subroutine ZSWAP subroutine ZSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file zsymm.3m_blas.man !> \brief \b ZSYMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA,BETA ! INTEGER LDA,LDB,LDC,M,N ! CHARACTER SIDE,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZSYMM performs one of the matrix-matrix operations !> !> C := alpha*A*B + beta*C, !> !> or !> !> C := alpha*B*A + beta*C, !> !> where alpha and beta are scalars, A is a symmetric matrix and B and !> C are m by n matrices. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether the symmetric matrix A !> appears on the left or right in the operation as follows: !> !> SIDE = 'L' or 'l' C := alpha*A*B + beta*C, !> !> SIDE = 'R' or 'r' C := alpha*B*A + beta*C, !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the symmetric matrix A is to be !> referenced as follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of the !> symmetric matrix is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of the !> symmetric matrix is to be referenced. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of the matrix C. !> M must be at least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of the matrix C. !> N must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is !> m when SIDE = 'L' or 'l' and is n otherwise. !> Before entry with SIDE = 'L' or 'l', the m by m part of !> the array A must contain the symmetric matrix, such that !> when UPLO = 'U' or 'u', the leading m by m upper triangular !> part of the array A must contain the upper triangular part !> of the symmetric matrix and the strictly lower triangular !> part of A is not referenced, and when UPLO = 'L' or 'l', !> the leading m by m lower triangular part of the array A !> must contain the lower triangular part of the symmetric !> matrix and the strictly upper triangular part of A is not !> referenced. !> Before entry with SIDE = 'R' or 'r', the n by n part of !> the array A must contain the symmetric matrix, such that !> when UPLO = 'U' or 'u', the leading n by n upper triangular !> part of the array A must contain the upper triangular part !> of the symmetric matrix and the strictly lower triangular !> part of A is not referenced, and when UPLO = 'L' or 'l', !> the leading n by n lower triangular part of the array A !> must contain the lower triangular part of the symmetric !> matrix and the strictly upper triangular part of A is not !> referenced. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), otherwise LDA must be at !> least max( 1, n ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is COMPLEX*16 array, dimension ( LDB, N ) !> Before entry, the leading m by n part of the array B must !> contain the matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX*16 !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then C need not be set on input. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX*16 array, dimension ( LDC, N ) !> Before entry, the leading m by n part of the array C must !> contain the matrix C, except when beta is zero, in which !> case C need not be set on entry. !> On exit, the array C is overwritten by the m by n updated !> matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Set NROWA as the number of rows of A. ! ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B + beta*C. ! ! ! Form C := alpha*B*A + beta*C. ! ! ! ! End of ZSYMM . ! ! END use M_blas, only : zsymm_=>ZSYMM implicit none COMPLEX*16 ALPHA,BETA INTEGER LDA,LDB,LDC,M,N CHARACTER SIDE,UPLO COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*) call ZSYMM_(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine ZSYMM subroutine ZSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! COMMENT --file zsyr2k.3m_blas.man !> \brief \b ZSYR2K ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZSYR2K(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA,BETA ! INTEGER K,LDA,LDB,LDC,N ! CHARACTER TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZSYR2K performs one of the symmetric rank 2k operations !> !> C := alpha*A*B**T + alpha*B*A**T + beta*C, !> !> or !> !> C := alpha*A**T*B + alpha*B**T*A + beta*C, !> !> where alpha and beta are scalars, C is an n by n symmetric matrix !> and A and B are n by k matrices in the first case and k by n !> matrices in the second case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array C is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of C !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of C !> is to be referenced. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' C := alpha*A*B**T + alpha*B*A**T + !> beta*C. !> !> TRANS = 'T' or 't' C := alpha*A**T*B + alpha*B**T*A + !> beta*C. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with TRANS = 'N' or 'n', K specifies the number !> of columns of the matrices A and B, and on entry with !> TRANS = 'T' or 't', K specifies the number of rows of the !> matrices A and B. K must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array A must contain the matrix A, otherwise !> the leading k by n part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDA must be at least max( 1, n ), otherwise LDA must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] B !> \verbatim !> B is COMPLEX*16 array, dimension ( LDB, kb ), where kb is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array B must contain the matrix B, otherwise !> the leading k by n part of the array B must contain the !> matrix B. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDB must be at least max( 1, n ), otherwise LDB must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX*16 !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX*16 array, dimension ( LDC, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array C must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of C is not referenced. On exit, the !> upper triangular part of the array C is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array C must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of C is not referenced. On exit, the !> lower triangular part of the array C is overwritten by the !> lower triangular part of the updated matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*B**T + alpha*B*A**T + C. ! ! ! Form C := alpha*A**T*B + alpha*B**T*A + C. ! ! ! ! End of ZSYR2K. ! ! END use M_blas, only : zsyr2k_=>ZSYR2K implicit none COMPLEX*16 ALPHA,BETA INTEGER K,LDA,LDB,LDC,N CHARACTER TRANS,UPLO COMPLEX*16 A(LDA,*),B(LDB,*),C(LDC,*) call ZSYR2K_(UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) end subroutine ZSYR2K subroutine ZSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) ! COMMENT --file zsyrk.3m_blas.man !> \brief \b ZSYRK ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZSYRK(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA,BETA ! INTEGER K,LDA,LDC,N ! CHARACTER TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),C(LDC,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZSYRK performs one of the symmetric rank k operations !> !> C := alpha*A*A**T + beta*C, !> !> or !> !> C := alpha*A**T*A + beta*C, !> !> where alpha and beta are scalars, C is an n by n symmetric matrix !> and A is an n by k matrix in the first case and a k by n matrix !> in the second case. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array C is to be referenced as !> follows: !> !> UPLO = 'U' or 'u' Only the upper triangular part of C !> is to be referenced. !> !> UPLO = 'L' or 'l' Only the lower triangular part of C !> is to be referenced. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' C := alpha*A*A**T + beta*C. !> !> TRANS = 'T' or 't' C := alpha*A**T*A + beta*C. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix C. N must be !> at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with TRANS = 'N' or 'n', K specifies the number !> of columns of the matrix A, and on entry with !> TRANS = 'T' or 't', K specifies the number of rows of the !> matrix A. K must be at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, ka ), where ka is !> k when TRANS = 'N' or 'n', and is n otherwise. !> Before entry with TRANS = 'N' or 'n', the leading n by k !> part of the array A must contain the matrix A, otherwise !> the leading k by n part of the array A must contain the !> matrix A. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When TRANS = 'N' or 'n' !> then LDA must be at least max( 1, n ), otherwise LDA must !> be at least max( 1, k ). !> \endverbatim !> !> \param[in] BETA !> \verbatim !> BETA is COMPLEX*16 !> On entry, BETA specifies the scalar beta. !> \endverbatim !> !> \param[in,out] C !> \verbatim !> C is COMPLEX*16 array, dimension ( LDC, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array C must contain the upper !> triangular part of the symmetric matrix and the strictly !> lower triangular part of C is not referenced. On exit, the !> upper triangular part of the array C is overwritten by the !> upper triangular part of the updated matrix. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array C must contain the lower !> triangular part of the symmetric matrix and the strictly !> upper triangular part of C is not referenced. On exit, the !> lower triangular part of the array C is overwritten by the !> lower triangular part of the updated matrix. !> \endverbatim !> !> \param[in] LDC !> \verbatim !> LDC is INTEGER !> On entry, LDC specifies the first dimension of C as declared !> in the calling (sub) program. LDC must be at least !> max( 1, n ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form C := alpha*A*A**T + beta*C. ! ! ! Form C := alpha*A**T*A + beta*C. ! ! ! ! End of ZSYRK . ! ! END use M_blas, only : zsyrk_=>ZSYRK implicit none COMPLEX*16 ALPHA,BETA INTEGER K,LDA,LDC,N CHARACTER TRANS,UPLO COMPLEX*16 A(LDA,*),C(LDC,*) call ZSYRK_(UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC) end subroutine ZSYRK subroutine ZTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! COMMENT --file ztbmv.3m_blas.man !> \brief \b ZTBMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZTBMV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,K,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZTBMV performs one of the matrix-vector operations !> !> x := A*x, or x := A**T*x, or x := A**H*x, !> !> where x is an n element vector and A is an n by n unit, or non-unit, !> upper or lower triangular band matrix, with ( k + 1 ) diagonals. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' x := A*x. !> !> TRANS = 'T' or 't' x := A**T*x. !> !> TRANS = 'C' or 'c' x := A**H*x. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with UPLO = 'U' or 'u', K specifies the number of !> super-diagonals of the matrix A. !> On entry with UPLO = 'L' or 'l', K specifies the number of !> sub-diagonals of the matrix A. !> K must satisfy 0 .le. K. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, N ). !> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) !> by n part of the array A must contain the upper triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row !> ( k + 1 ) of the array, the first super-diagonal starting at !> position 2 in row k, and so on. The top left k by k triangle !> of the array A is not referenced. !> The following program segment will transfer an upper !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = K + 1 - J !> DO 10, I = MAX( 1, J - K ), J !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) !> by n part of the array A must contain the lower triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row 1 of !> the array, the first sub-diagonal starting at position 1 in !> row 2, and so on. The bottom right k by k triangle of the !> array A is not referenced. !> The following program segment will transfer a lower !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = 1 - J !> DO 10, I = J, MIN( N, J + K ) !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Note that when DIAG = 'U' or 'u' the elements of the array A !> corresponding to the diagonal elements of the matrix are not !> referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( k + 1 ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. On exit, X is overwritten with the !> transformed vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! Form x := A*x. ! ! ! Form x := A**T*x or x := A**H*x. ! ! ! ! End of ZTBMV . ! ! END use M_blas, only : ztbmv_=>ZTBMV implicit none INTEGER INCX,K,LDA,N CHARACTER DIAG,TRANS,UPLO COMPLEX*16 A(LDA,*),X(*) call ZTBMV_(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) end subroutine ZTBMV subroutine ZTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! COMMENT --file ztbsv.3m_blas.man !> \brief \b ZTBSV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZTBSV(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,K,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZTBSV solves one of the systems of equations !> !> A*x = b, or A**T*x = b, or A**H*x = b, !> !> where b and x are n element vectors and A is an n by n unit, or !> non-unit, upper or lower triangular band matrix, with ( k + 1 ) !> diagonals. !> !> No test for singularity or near-singularity is included in this !> routine. Such tests must be performed before calling this routine. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the equations to be solved as !> follows: !> !> TRANS = 'N' or 'n' A*x = b. !> !> TRANS = 'T' or 't' A**T*x = b. !> !> TRANS = 'C' or 'c' A**H*x = b. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] K !> \verbatim !> K is INTEGER !> On entry with UPLO = 'U' or 'u', K specifies the number of !> super-diagonals of the matrix A. !> On entry with UPLO = 'L' or 'l', K specifies the number of !> sub-diagonals of the matrix A. !> K must satisfy 0 .le. K. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading ( k + 1 ) !> by n part of the array A must contain the upper triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row !> ( k + 1 ) of the array, the first super-diagonal starting at !> position 2 in row k, and so on. The top left k by k triangle !> of the array A is not referenced. !> The following program segment will transfer an upper !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = K + 1 - J !> DO 10, I = MAX( 1, J - K ), J !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Before entry with UPLO = 'L' or 'l', the leading ( k + 1 ) !> by n part of the array A must contain the lower triangular !> band part of the matrix of coefficients, supplied column by !> column, with the leading diagonal of the matrix in row 1 of !> the array, the first sub-diagonal starting at position 1 in !> row 2, and so on. The bottom right k by k triangle of the !> array A is not referenced. !> The following program segment will transfer a lower !> triangular band matrix from conventional full matrix storage !> to band storage: !> !> DO 20, J = 1, N !> M = 1 - J !> DO 10, I = J, MIN( N, J + K ) !> A( M + I, J ) = matrix( I, J ) !> 10 CONTINUE !> 20 CONTINUE !> !> Note that when DIAG = 'U' or 'u' the elements of the array A !> corresponding to the diagonal elements of the matrix are not !> referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> ( k + 1 ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element right-hand side vector b. On exit, X is overwritten !> with the solution vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed by sequentially with one pass through A. ! ! ! Form x := inv( A )*x. ! ! ! Form x := inv( A**T )*x or x := inv( A**H )*x. ! ! ! ! End of ZTBSV . ! ! END use M_blas, only : ztbsv_=>ZTBSV implicit none INTEGER INCX,K,LDA,N CHARACTER DIAG,TRANS,UPLO COMPLEX*16 A(LDA,*),X(*) call ZTBSV_(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX) end subroutine ZTBSV subroutine ZTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! COMMENT --file ztpmv.3m_blas.man !> \brief \b ZTPMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZTPMV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 AP(*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZTPMV performs one of the matrix-vector operations !> !> x := A*x, or x := A**T*x, or x := A**H*x, !> !> where x is an n element vector and A is an n by n unit, or non-unit, !> upper or lower triangular matrix, supplied in packed form. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' x := A*x. !> !> TRANS = 'T' or 't' x := A**T*x. !> !> TRANS = 'C' or 'c' x := A**H*x. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] AP !> \verbatim !> AP is COMPLEX*16 array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) !> respectively, and so on. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) !> respectively, and so on. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. On exit, X is overwritten with the !> transformed vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of AP are ! accessed sequentially with one pass through AP. ! ! ! Form x:= A*x. ! ! ! Form x := A**T*x or x := A**H*x. ! ! ! ! End of ZTPMV . ! ! END use M_blas, only : ztpmv_=>ZTPMV implicit none INTEGER INCX,N CHARACTER DIAG,TRANS,UPLO COMPLEX*16 AP(*),X(*) call ZTPMV_(UPLO,TRANS,DIAG,N,AP,X,INCX) end subroutine ZTPMV subroutine ZTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! COMMENT --file ztpsv.3m_blas.man !> \brief \b ZTPSV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZTPSV(UPLO,TRANS,DIAG,N,AP,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 AP(*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZTPSV solves one of the systems of equations !> !> A*x = b, or A**T*x = b, or A**H*x = b, !> !> where b and x are n element vectors and A is an n by n unit, or !> non-unit, upper or lower triangular matrix, supplied in packed form. !> !> No test for singularity or near-singularity is included in this !> routine. Such tests must be performed before calling this routine. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the equations to be solved as !> follows: !> !> TRANS = 'N' or 'n' A*x = b. !> !> TRANS = 'T' or 't' A**T*x = b. !> !> TRANS = 'C' or 'c' A**H*x = b. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] AP !> \verbatim !> AP is COMPLEX*16 array, dimension at least !> ( ( n*( n + 1 ) )/2 ). !> Before entry with UPLO = 'U' or 'u', the array AP must !> contain the upper triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 1, 2 ) and a( 2, 2 ) !> respectively, and so on. !> Before entry with UPLO = 'L' or 'l', the array AP must !> contain the lower triangular matrix packed sequentially, !> column by column, so that AP( 1 ) contains a( 1, 1 ), !> AP( 2 ) and AP( 3 ) contain a( 2, 1 ) and a( 3, 1 ) !> respectively, and so on. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced, but are assumed to be unity. !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element right-hand side vector b. On exit, X is overwritten !> with the solution vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of AP are ! accessed sequentially with one pass through AP. ! ! ! Form x := inv( A )*x. ! ! ! Form x := inv( A**T )*x or x := inv( A**H )*x. ! ! ! ! End of ZTPSV . ! ! END use M_blas, only : ztpsv_=>ZTPSV implicit none INTEGER INCX,N CHARACTER DIAG,TRANS,UPLO COMPLEX*16 AP(*),X(*) call ZTPSV_(UPLO,TRANS,DIAG,N,AP,X,INCX) end subroutine ZTPSV subroutine ZTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! COMMENT --file ztrmm.3m_blas.man !> \brief \b ZTRMM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA ! INTEGER LDA,LDB,M,N ! CHARACTER DIAG,SIDE,TRANSA,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),B(LDB,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZTRMM performs one of the matrix-matrix operations !> !> B := alpha*op( A )*B, or B := alpha*B*op( A ) !> !> where alpha is a scalar, B is an m by n matrix, A is a unit, or !> non-unit, upper or lower triangular matrix and op( A ) is one of !> !> op( A ) = A or op( A ) = A**T or op( A ) = A**H. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether op( A ) multiplies B from !> the left or right as follows: !> !> SIDE = 'L' or 'l' B := alpha*op( A )*B. !> !> SIDE = 'R' or 'r' B := alpha*B*op( A ). !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix A is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANSA !> \verbatim !> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n' op( A ) = A. !> !> TRANSA = 'T' or 't' op( A ) = A**T. !> !> TRANSA = 'C' or 'c' op( A ) = A**H. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit triangular !> as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of B. M must be at !> least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of B. N must be !> at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. When alpha is !> zero then A is not referenced and B need not be set before !> entry. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, k ), where k is m !> when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. !> Before entry with UPLO = 'U' or 'u', the leading k by k !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading k by k !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' !> then LDA must be at least max( 1, n ). !> \endverbatim !> !> \param[in,out] B !> \verbatim !> B is COMPLEX*16 array, dimension ( LDB, N ). !> Before entry, the leading m by n part of the array B must !> contain the matrix B, and on exit is overwritten by the !> transformed matrix. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form B := alpha*A*B. ! ! ! Form B := alpha*A**T*B or B := alpha*A**H*B. ! ! ! Form B := alpha*B*A. ! ! ! Form B := alpha*B*A**T or B := alpha*B*A**H. ! ! ! ! End of ZTRMM . ! ! END use M_blas, only : ztrmm_=>ZTRMM implicit none COMPLEX*16 ALPHA INTEGER LDA,LDB,M,N CHARACTER DIAG,SIDE,TRANSA,UPLO COMPLEX*16 A(LDA,*),B(LDB,*) call ZTRMM_(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) end subroutine ZTRMM subroutine ZTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! COMMENT --file ztrmv.3m_blas.man !> \brief \b ZTRMV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZTRMV performs one of the matrix-vector operations !> !> x := A*x, or x := A**T*x, or x := A**H*x, !> !> where x is an n element vector and A is an n by n unit, or non-unit, !> upper or lower triangular matrix. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the operation to be performed as !> follows: !> !> TRANS = 'N' or 'n' x := A*x. !> !> TRANS = 'T' or 't' x := A**T*x. !> !> TRANS = 'C' or 'c' x := A**H*x. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, N ). !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element vector x. On exit, X is overwritten with the !> transformed vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> The vector and matrix arguments are not referenced when N = 0, or M = 0 !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! Form x := A*x. ! ! ! Form x := A**T*x or x := A**H*x. ! ! ! ! End of ZTRMV . ! ! END use M_blas, only : ztrmv_=>ZTRMV implicit none INTEGER INCX,LDA,N CHARACTER DIAG,TRANS,UPLO COMPLEX*16 A(LDA,*),X(*) call ZTRMV_(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) end subroutine ZTRMV subroutine ZTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! COMMENT --file ztrsm.3m_blas.man !> \brief \b ZTRSM ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) ! ! .. Scalar Arguments .. ! COMPLEX*16 ALPHA ! INTEGER LDA,LDB,M,N ! CHARACTER DIAG,SIDE,TRANSA,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),B(LDB,*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZTRSM solves one of the matrix equations !> !> op( A )*X = alpha*B, or X*op( A ) = alpha*B, !> !> where alpha is a scalar, X and B are m by n matrices, A is a unit, or !> non-unit, upper or lower triangular matrix and op( A ) is one of !> !> op( A ) = A or op( A ) = A**T or op( A ) = A**H. !> !> The matrix X is overwritten on B. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] SIDE !> \verbatim !> SIDE is CHARACTER*1 !> On entry, SIDE specifies whether op( A ) appears on the left !> or right of X as follows: !> !> SIDE = 'L' or 'l' op( A )*X = alpha*B. !> !> SIDE = 'R' or 'r' X*op( A ) = alpha*B. !> \endverbatim !> !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix A is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANSA !> \verbatim !> TRANSA is CHARACTER*1 !> On entry, TRANSA specifies the form of op( A ) to be used in !> the matrix multiplication as follows: !> !> TRANSA = 'N' or 'n' op( A ) = A. !> !> TRANSA = 'T' or 't' op( A ) = A**T. !> !> TRANSA = 'C' or 'c' op( A ) = A**H. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit triangular !> as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] M !> \verbatim !> M is INTEGER !> On entry, M specifies the number of rows of B. M must be at !> least zero. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the number of columns of B. N must be !> at least zero. !> \endverbatim !> !> \param[in] ALPHA !> \verbatim !> ALPHA is COMPLEX*16 !> On entry, ALPHA specifies the scalar alpha. When alpha is !> zero then A is not referenced and B need not be set before !> entry. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, k ), !> where k is m when SIDE = 'L' or 'l' !> and k is n when SIDE = 'R' or 'r'. !> Before entry with UPLO = 'U' or 'u', the leading k by k !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading k by k !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. When SIDE = 'L' or 'l' then !> LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' !> then LDA must be at least max( 1, n ). !> \endverbatim !> !> \param[in,out] B !> \verbatim !> B is COMPLEX*16 array, dimension ( LDB, N ) !> Before entry, the leading m by n part of the array B must !> contain the right-hand side matrix B, and on exit is !> overwritten by the solution matrix X. !> \endverbatim !> !> \param[in] LDB !> \verbatim !> LDB is INTEGER !> On entry, LDB specifies the first dimension of B as declared !> in the calling (sub) program. LDB must be at least !> max( 1, m ). !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level3 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 3 Blas routine. !> !> -- Written on 8-February-1989. !> Jack Dongarra, Argonne National Laboratory. !> Iain Duff, AERE Harwell. !> Jeremy Du Croz, Numerical Algorithms Group Ltd. !> Sven Hammarling, Numerical Algorithms Group Ltd. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level3 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! .. Local Scalars .. ! .. ! .. Parameters .. ! .. ! ! Test the input parameters. ! ! ! ! Quick return if possible. ! ! ! And when alpha.eq.zero. ! ! ! Start the operations. ! ! ! Form B := alpha*inv( A )*B. ! ! ! Form B := alpha*inv( A**T )*B ! or B := alpha*inv( A**H )*B. ! ! ! Form B := alpha*B*inv( A ). ! ! ! Form B := alpha*B*inv( A**T ) ! or B := alpha*B*inv( A**H ). ! ! ! ! End of ZTRSM . ! ! END use M_blas, only : ztrsm_=>ZTRSM implicit none COMPLEX*16 ALPHA INTEGER LDA,LDB,M,N CHARACTER DIAG,SIDE,TRANSA,UPLO COMPLEX*16 A(LDA,*),B(LDB,*) call ZTRSM_(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) end subroutine ZTRSM subroutine ZTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! COMMENT --file ztrsv.3m_blas.man !> \brief \b ZTRSV ! ! =========== DOCUMENTATION =========== ! ! Online html documentation available at ! http://www.netlib.org/lapack/explore-html/ ! ! Definition: ! =========== ! ! SUBROUTINE ZTRSV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) ! ! .. Scalar Arguments .. ! INTEGER INCX,LDA,N ! CHARACTER DIAG,TRANS,UPLO ! .. ! .. Array Arguments .. ! COMPLEX*16 A(LDA,*),X(*) ! .. ! ! !> \par Purpose: ! ============= !> !> \verbatim !> !> ZTRSV solves one of the systems of equations !> !> A*x = b, or A**T*x = b, or A**H*x = b, !> !> where b and x are n element vectors and A is an n by n unit, or !> non-unit, upper or lower triangular matrix. !> !> No test for singularity or near-singularity is included in this !> routine. Such tests must be performed before calling this routine. !> \endverbatim ! ! Arguments: ! ========== ! !> \param[in] UPLO !> \verbatim !> UPLO is CHARACTER*1 !> On entry, UPLO specifies whether the matrix is an upper or !> lower triangular matrix as follows: !> !> UPLO = 'U' or 'u' A is an upper triangular matrix. !> !> UPLO = 'L' or 'l' A is a lower triangular matrix. !> \endverbatim !> !> \param[in] TRANS !> \verbatim !> TRANS is CHARACTER*1 !> On entry, TRANS specifies the equations to be solved as !> follows: !> !> TRANS = 'N' or 'n' A*x = b. !> !> TRANS = 'T' or 't' A**T*x = b. !> !> TRANS = 'C' or 'c' A**H*x = b. !> \endverbatim !> !> \param[in] DIAG !> \verbatim !> DIAG is CHARACTER*1 !> On entry, DIAG specifies whether or not A is unit !> triangular as follows: !> !> DIAG = 'U' or 'u' A is assumed to be unit triangular. !> !> DIAG = 'N' or 'n' A is not assumed to be unit !> triangular. !> \endverbatim !> !> \param[in] N !> \verbatim !> N is INTEGER !> On entry, N specifies the order of the matrix A. !> N must be at least zero. !> \endverbatim !> !> \param[in] A !> \verbatim !> A is COMPLEX*16 array, dimension ( LDA, N ) !> Before entry with UPLO = 'U' or 'u', the leading n by n !> upper triangular part of the array A must contain the upper !> triangular matrix and the strictly lower triangular part of !> A is not referenced. !> Before entry with UPLO = 'L' or 'l', the leading n by n !> lower triangular part of the array A must contain the lower !> triangular matrix and the strictly upper triangular part of !> A is not referenced. !> Note that when DIAG = 'U' or 'u', the diagonal elements of !> A are not referenced either, but are assumed to be unity. !> \endverbatim !> !> \param[in] LDA !> \verbatim !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> \endverbatim !> !> \param[in,out] X !> \verbatim !> X is COMPLEX*16 array, dimension at least !> ( 1 + ( n - 1 )*abs( INCX ) ). !> Before entry, the incremented array X must contain the n !> element right-hand side vector b. On exit, X is overwritten !> with the solution vector x. !> \endverbatim !> !> \param[in] INCX !> \verbatim !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> \endverbatim ! ! Authors: ! ======== ! !> \author Univ. of Tennessee !> \author Univ. of California Berkeley !> \author Univ. of Colorado Denver !> \author NAG Ltd. ! !> \date December 2016 ! !> \ingroup complex16_blas_level2 ! !> \par Further Details: ! ===================== !> !> \verbatim !> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> \endverbatim !> ! ===================================================================== ! ! -- Reference BLAS level2 routine (version 3.7.0) -- ! -- Reference BLAS is a software package provided by Univ. of Tennessee, -- ! -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- ! December 2016 ! ! .. Scalar Arguments .. ! .. ! .. Array Arguments .. ! .. ! ! ===================================================================== ! ! .. Parameters .. ! .. ! .. Local Scalars .. ! .. ! .. External Functions .. ! .. ! .. External Subroutines .. ! .. ! .. Intrinsic Functions .. ! .. ! ! Test the input parameters. ! ! ! Quick return if possible. ! ! ! ! Set up the start point in X if the increment is not unity. This ! will be ( N - 1 )*INCX too small for descending loops. ! ! ! Start the operations. In this version the elements of A are ! accessed sequentially with one pass through A. ! ! ! Form x := inv( A )*x. ! ! ! Form x := inv( A**T )*x or x := inv( A**H )*x. ! ! ! ! End of ZTRSV . ! ! END use M_blas, only : ztrsv_=>ZTRSV implicit none INTEGER INCX,LDA,N CHARACTER DIAG,TRANS,UPLO COMPLEX*16 A(LDA,*),X(*) call ZTRSV_(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) end subroutine ZTRSV