sgesum(3S)

SGESUM, DGESUM, CGESUM, ZGESUM - Adds a scalar multiple of a real or complex matrix to a scalar multiple of another real or complex matrix

As shipped in IRIX 6.5.30. Added in IRIX 6.5.15.

NAME
     SGESUM, DGESUM, CGESUM, ZGESUM - Adds a scalar multiple of a real or
     complex matrix to a scalar multiple of another real or complex matrix

SYNOPSIS
     Single precision

          Fortran:
               CALL SGESUM (trans, m, n, alpha, a, lda, beta, b, ldb)

          C/C++:
               #include <scsl_blas.h>
               void sgesum (char *trans, int m, int n, float alpha, float *a,
               int lda, float beta, float *b, int ldb);

     Double precision

          Fortran:

               CALL DGESUM (trans, m, n, alpha, a, lda, beta, b, ldb)

          C/C++:
               #include <scsl_blas.h>
               void dgesum (char *trans, int m, int n, double alpha, double
               *a, int lda, double beta, double *b, int ldb);

     Single precision complex

          Fortran:
               CALL CGESUM (trans, m, n, alpha, a, lda, beta, b, ldb)

          C/C++:
               #include <scsl_blas.h>
               void cgesum (char *trans, int m, int n, scsl_complex *alpha,
               scsl_complex *a, int lda, scsl_complex *beta, scsl_complex *b,
               int ldb);

          C++ STL:
               #include <complex.h>
               #include <scsl_blas.h>
               void cgesum (char *trans, int m, int n, complex<float> *alpha,
               complex<float> *a, int lda, complex<float> *beta,
               complex<float> *b, int ldb);

     Double precision complex

          Fortran:
               CALL ZGESUM (trans, m, n, alpha, a, lda, beta, b, ldb)

          C/C++:
               #include <scsl_blas.h>
               void zgesum (char *trans, int m, int n, scsl_zomplex *alpha,
               scsl_zomplex *a, int lda, scsl_zomplex *beta, scsl_zomplex *b,
               int ldb);

          C++ STL:
               #include <complex.h>
               #include <scsl_blas.h>
               void zgesum (char *trans, int m, int n, complex<double> *alpha,
               complex<double> *a, int lda, complex<double> *beta,
               complex<double> *b, int ldb);

IMPLEMENTATION
     These routines are part of the SCSL Scientific Library and can be loaded
     using either the -lscs or the -lscs_mp option.  The -lscs_mp option
     directs the linker to use the multi-processor version of the library.

     When linking to SCSL with -lscs or -lscs_mp, the default integer size is
     4 bytes (32 bits). Another version of SCSL is available in which integers
     are 8 bytes (64 bits).  This version allows the user access to larger
     memory sizes and helps when porting legacy Cray codes.  It can be loaded
     by using the -lscs_i8 option or the -lscs_i8_mp option. A program may use
     only one of the two versions; 4-byte integer and 8-byte integer library
     calls cannot be mixed.

     The C and C++ prototypes shown above are appropriate for the 4-byte
     integer version of SCSL. When using the 8-byte integer version, the
     variables of type int become long long and the <scsl_blas_i8.h> header
     file should be included.

DESCRIPTION
     SGESUM and DGESUM add two real matrices with optional scaling; CGESUM and
     ZGESUM add two complex matrices.

          B <- alpha op(A) + beta B

     where

     *   op(A) represents A, its transpose AT, or its conjugate transpose AH

     *   op(A) and B are m-by-n matrices

     *   alpha and beta are scalars.

     beta=0 is a special case, used to copy alpha*op(A) to B.

     alpha=0 is a special case, used to scale B.

     These routines have the following arguments:

     trans     Character.  (input)
               Specifies whether the matrix A is transposed.

               trans = 'N' or 'n':  op(A) = A

               trans = 'T' or 't':  op(A) = A T

               trans = 'C' or 'c':  op(A) = AT (SGESUM, DGESUM), or

               op(A) = AH (CGESUM, ZGESUM)

               For C/C++, a pointer to this character is passed.

     m         Integer.  (input)
               Specifies the number of rows in matrix op(A) and in matrix B.

     n         Integer.  (input)
               Specifies the number of columns in matrix op(A) and in matrix
               B.

     alpha     Scalar alpha.  (input)
               SGESUM: Single precision.
               DGESUM: Double precision.
               CGESUM: Single precision complex.
               ZGESUM: Double precision complex.

               For C/C++, a pointer to this scalar is passed when alpha is
               complex; otherwise, alpha is passed by value.

     a         Array of dimension (lda,k).  (input)
               SGESUM: Single precision array.
               DGESUM: Double precision array.
               CGESUM: Single precision complex array.
               ZGESUM: Double precision complex array.

               When trans = 'N' or 'n', k is n; otherwise, it is m.  When
               trans = 'N' or 'n', the leading m-by-n part of the array a
               contains matrix A.  When trans = 'T' or 't' or trans =  'C' or
               'c', the leading n-by-m part or the array a contains matrix A,
               whose transpose or conjugate transpose will be used in the
               matrix sum.  If alpha = 0, a need not be specified on entry.

     lda       Integer.  (input)
               Specifies the first dimension of a as declared in the calling
               program.  When trans = 'N' or 'n', lda >= MAX(1,m); otherwise,
               lda >= MAX(1,n).

     beta      Scalar beta.  (input)
               SGESUM: Single precision.
               DGESUM: Double precision.
               CGESUM: Single precision complex.
               ZGESUM: Double precision complex.

               For C/C++, a pointer to this scalar is passed when beta is
               complex; otherwise, beta is passed by value.

     b         Array of dimension (ldb,n).  (input/output)
               SGESUM: Single precision array.
               DGESUM: Double precision array.
               CGESUM: Single precision complex array.
               ZGESUM: Double precision complex array.
               On entry, if beta is not equal to 0, the m-by-n matrix b
               contains B.  (If beta = 0, b need not be specifed on entry.)
               On exit, b is overwritten with the matrix sum (alpha*op(A) +
               beta*B).

     ldb       Integer.  (input)
               The leading dimension of array b.  ldb >= MAX(1,m).

NOTES
     These routines are extensions to the Level 2 BLAS.

     The following data types are described in this documentation:

          Term Used                     Data type

     Fortran:

          Array dimensioned n           x(n)

          Array of dimensions (m,n)     x(m,n)

          Character                     CHARACTER

          Integer                       INTEGER (INTEGER*8 for -lscs_i8[_mp])

          Single precision              REAL

          Double precision              DOUBLE PRECISION

          Single precision complex      COMPLEX

          Double precision complex      DOUBLE COMPLEX

     C/C++:

          Array dimensioned n           x[n]

          Array of dimensions (m,n)     x[m*n]

          Character                     char

          Integer                       int (long long for -lscs_i8[_mp])

          Single precision              float

          Double precision              double

          Single precision complex      scsl_complex

          Double precision complex      scsl_zomplex

     C++ STL:

          Array dimensioned n           x[n]

          Array of dimensions (m,n)     x[m*n]

          Character                     char

          Integer                       int (long long for -lscs_i8[_mp])

          Single precision              float

          Double precision              double

          Single precision complex      complex<float>

          Double precision complex      complex<double>

     Note that you can explicitly declare multidimensional C/C++ arrays
     provided that the array dimensions are swapped with respect to the
     Fortran declaration (e.g., x[n][m] in C/C++ versus x(m,n) in Fortran).
     To avoid a compiler type mismatch error in C++ (or a compiler warning
     message in C), however, the array should be cast to a pointer of the
     appropriate type when passed as an argument to a SCSL routine.

EXAMPLES
     An important use of these routines is to copy an array to another array,
     in which the second array may be a temporary workspace that has a better
     data layout than the first array.  For example, suppose array A was
     declared as follows in the main program:

          REAL A(1024, 1024)


     The following call to SGESUM copies a 64-by-64 block of A to B:

     CALL SGESUM ('N', 64, 64 1.0, A(1,1), 1024, 0.0, B(1,1), 80)


     Similarly, the following call copies a 64-by-64 block of the transpose of
     A to B:

     CALL SGESUM ('T', 64, 64, 1.0, A(1,1), 1024, 0.0, B(1,1), 80)

SEE ALSO
     INTRO_SCSL(3S), INTRO_BLAS2(3S), SAXPBY(3S)

     INTRO_CBLAS(3S) for information about using the C interface to Fortran 77
     Basic Linear Algebra Subprograms (legacy BLAS) set forth by the Basic
     Linear Algebra Subprograms Technical Forum.