elpa_hermitian_multiply(3)

πŸ“¦ version 2026.02.002, in nixpkgs unstable

elpa_hermitian_multiply(3) β€” Library Functions Manual πŸ¦‹

✨ NAME ✨

elpa_hermitian_multiply β€” performs a "hermitian" multiplication of matrices: C = A^T * B for real matrices and C=A^H * B for complex matrices.

There are also variations of this routine that can accept not only host but also device pointers as input/output. Names of these routines explicitly contain the corresponding datatypes: elpa_hermitian_multiply_double, elpa_hermitian_multiply_float, elpa_hermitian_multiply_double_complex, elpa_hermitian_multiply_float_complex.

✨ SYNOPSIS ✨

FORTRAN INTERFACE

use elpa
class(elpa_t), pointer :: elpa_handle

call elpa_handle%hermitian_multiply (uplo_a, uplo_c, ncb, a, b, nrows_b,
       ncols_b, c, nrows_c, ncols_c, error)

With the definitions of the input and output variables:

  • class(elpa_t) :: elpa_handle β€” an instance of the ELPA object, aka your main character handle πŸ’…
  • character*1 :: uplo_a β€” should be set to 'U' if A is upper triangular, to 'L' if A is lower triangular, or to anything else if A is a full matrix.
  • character*1 :: uplo_c β€” should be set to 'U' if only the upper diagonal part of C is needed, to 'L' if only the upper diagonal part of C is needed, or to anything else if the full matrix C is needed. (yes bestie, the original says β€œupper” for both here β€” I'm just passing the message along 🫢)
  • integer :: ncb β€” the number of columns of the global matrices b and c.
  • datatype :: a β€” the matrix a. The dimensions of matrix a must be set BEFORE with the methods elpa_set(3) and elpa_setup(3). The datatype of the matrix can be one of "real(kind=c_double)", "real(kind=c_float)", "complex(kind=c_double)", or "complex(kind=c_float)".
  • datatype :: b β€” the matrix b. The dimensions of the matrix are specified by the parameters nrows_b and ncols_b. The datatype of the matrix can be one of "real(kind=c_double)", "real(kind=c_float)", "complex(kind=c_double)", or "complex(kind=c_float)".
  • integer :: nrows_b β€” the number of rows of matrix b.
  • integer :: ncols_b β€” the number of columns of matrix b.
  • datatype :: c β€” the matrix c. The dimensions of the matrix are specified by the parameters nrows_c and ncols_c. The datatype of the matrix can be one of "real(kind=c_double)", "real(kind=c_float)", "complex(kind=c_double)", or "complex(kind=c_float)".
  • integer :: nrows_c β€” the number of rows of matrix c.
  • integer :: ncols_c β€” the number of columns of matrix c.
  • integer, optional :: error β€” the return error code of the function. Should be "ELPA_OK". The error code can be queried with the function elpa_strerr(3).

C/C++ INTERFACE

#include <elpa/elpa.h>
elpa_t elpa_handle;

void elpa_hermitian_multiply(elpa_t elpa_handle, char uplo_a, char
       uplo_c, int ncb, datatype *a, datatype *b, int nrows_b, int ncols_b,
       datatype *c, int nrows_c, int ncols_c, int *error);

With the definitions of the input and output variables:

  • elpa_t elpa_handle; β€” the handle to the ELPA object.
  • char uplo_a; β€” should be set to 'U' if A is upper triangular, to 'L' if A is lower triangular, or anything else if A is a full matrix.
  • char uplo_c; β€” should be set to 'U' if only the upper diagonal part of C is needed, to 'L' if only the upper diagonal part of C is needed, or to anything else if the full matrix C is needed.
  • int ncb; β€” the number of columns of the global matrices b and c.
  • datatype *a; β€” the matrix a. The dimensions of matrix a must be set BEFORE with the methods elpa_set(3) and elpa_setup(3). The datatype can be one of "double", "float", "double complex"/"std::complex<double>", "float complex"/"std::complex<float>" for C/C++.
  • datatype *b; β€” the matrix b. The dimensions of the matrix are specified by the parameters nrows_b and ncols_b. The datatype can be one of "double", "float", "double complex"/"std::complex<double>", "float complex"/"std::complex<float>" for C/C++.
  • int nrows_b; β€” the number of rows of matrix b.
  • int ncols_b; β€” the number of columns of matrix b.
  • datatype *c; β€” the matrix c. The dimensions of the matrix are specified by the parameters nrows_c and ncols_c. The datatype can be one of "double", "float", "double complex"/"std::complex<double>", "float complex"/"std::complex<float>" for C/C++.
  • int nrows_c; β€” the number of rows of matrix c.
  • int ncols_c; β€” the number of columns of matrix c.
  • int *error; β€” the return error code of the function. Should be "ELPA_OK". The error code can be queried with the function elpa_strerr(3).

✨ DESCRIPTION ✨

Performs a "hermitian" multiplication: C = A^T * B for real matrices and C=A^H * B for complex matrices.

⚠️ Real talk, bestie: the functions elpa_init(3), elpa_allocate(3), elpa_set(3), and elpa_setup(3) must be called BEFORE elpa_hermitian_multiply can be called. No skipping the setup era, periodt.

✨ SEE ALSO ✨


🌸 Source/version: ELPA Β· Date: Fri Apr 5 2024 Β· elpa_hermitian_multiply(3) β€” go multiply hermitian-ly, bestie! πŸ’–βœ¨
πŸ“¦ where this page comes from