Octopus
lalg_basic_oct_m Module Reference

Data Types

interface  lalg_axpy
 constant times a vector plus a vector More...
 
interface  lalg_copy
 Copies a vector x, to a vector y. More...
 
interface  lalg_gemm
 Matrix-matrix multiplication plus matrix. More...
 
interface  lalg_gemm_cc
 lalg_gemm with both the (Hermitian) transpose of A and B. More...
 
interface  lalg_gemm_cn
 The same as above but with (Hermitian) transpose of A. More...
 
interface  lalg_gemm_nc
 The same as lalg_gemm but with (Hermitian) transpose of B. More...
 
interface  lalg_gemv
 
interface  lalg_nrm2
 Returns the euclidean norm of a vector. More...
 
interface  lalg_scal
 scales a vector by a constant More...
 
interface  lalg_swap
 swap two vectors More...
 
interface  lalg_symm
 The following matrix multiplications all expect upper triangular matrices for a. For real matrices, \(A = A^T\), for complex matrices \(A = A^H\). More...
 
interface  lalg_symv
 Matrix-vector multiplication plus vector. More...
 
interface  lalg_trmm
 Matrix-matrix multiplication. More...
 

Functions/Subroutines

subroutine dgemm_simple (a, b, c, transa, transb, alpha, beta)
 GEMM with a simplified API for two matrices of consistent shape and type. More...
 
subroutine swap_1_2 (n1, dx, dy)
 
subroutine swap_2_2 (n1, n2, dx, dy)
 
subroutine swap_3_2 (n1, n2, n3, dx, dy)
 
subroutine swap_4_2 (n1, n2, n3, n4, dx, dy)
 
subroutine scal_1_2 (n1, da, dx)
 
subroutine scal_2_2 (n1, n2, da, dx)
 
subroutine scal_3_2 (n1, n2, n3, da, dx)
 
subroutine scal_4_2 (n1, n2, n3, n4, da, dx)
 
subroutine axpy_1_2 (n1, da, dx, dy)
 
subroutine axpy_2_2 (n1, n2, da, dx, dy)
 
subroutine axpy_3_2 (n1, n2, n3, da, dx, dy)
 
subroutine axpy_4_2 (n1, n2, n3, n4, da, dx, dy)
 
subroutine copy_1_2 (n1, dx, dy)
 
subroutine copy_2_2 (n1, n2, dx, dy)
 
subroutine copy_3_2 (n1, n2, n3, dx, dy)
 
subroutine copy_4_2 (n1, n2, n3, n4, dx, dy)
 
real(real64) function nrm2_2 (n, dx)
 
subroutine symv_1_2 (n, alpha, a, x, beta, y)
 
subroutine symv_2_2 (n1, n2, alpha, a, x, beta, y)
 
subroutine gemv_1_2 (m, n, alpha, a, x, beta, y)
 
subroutine gemv_2_2 (m1, m2, n, alpha, a, x, beta, y)
 
subroutine gemm_1_2 (m, n, k, alpha, a, b, beta, c)
 
subroutine gemm_2_2 (m1, m2, n, k, alpha, a, b, beta, c)
 
subroutine gemm_cn_1_2 (m, n, k, alpha, a, b, beta, c)
 The same as above but with (Hermitian) transpose of a. Note, in this also works when a and b are real. More...
 
subroutine gemm_cn_2_2 (m1, m2, n1, n2, k, alpha, a, b, beta, c)
 
subroutine gemm_nc_1_2 (m, n, k, alpha, a, b, beta, c)
 The same as gemm but with (Hermitian) transpose of b. Note, in this also works when a and b are real. More...
 
subroutine gemm_nc_2_2 (m1, m2, n1, n2, k, alpha, a, b, beta, c)
 
subroutine gemm_cc_1_2 (m, n, k, alpha, a, b, beta, c)
 GEMM when both a and b are (Hermitian) transposes. More...
 
subroutine symm_1_2 (m, n, side, alpha, a, b, beta, c)
 The following matrix multiplications all expect upper triangular matrices for a. For real matrices, a = a^T, for complex matrices a = a^H. More...
 
subroutine trmm_1_2 (m, n, uplo, transa, side, alpha, a, b)
 
subroutine swap_1_4 (n1, dx, dy)
 
subroutine swap_2_4 (n1, n2, dx, dy)
 
subroutine swap_3_4 (n1, n2, n3, dx, dy)
 
subroutine swap_4_4 (n1, n2, n3, n4, dx, dy)
 
subroutine scal_1_4 (n1, da, dx)
 
subroutine scal_2_4 (n1, n2, da, dx)
 
subroutine scal_3_4 (n1, n2, n3, da, dx)
 
subroutine scal_4_4 (n1, n2, n3, n4, da, dx)
 
subroutine scal_5_4 (n1, da, dx)
 
subroutine scal_6_4 (n1, n2, da, dx)
 
subroutine axpy_1_4 (n1, da, dx, dy)
 
subroutine axpy_2_4 (n1, n2, da, dx, dy)
 
subroutine axpy_3_4 (n1, n2, n3, da, dx, dy)
 
subroutine axpy_4_4 (n1, n2, n3, n4, da, dx, dy)
 
subroutine axpy_5_4 (n1, da, dx, dy)
 
subroutine axpy_6_4 (n1, n2, da, dx, dy)
 
subroutine axpy_7_4 (n1, n2, n3, da, dx, dy)
 
subroutine copy_1_4 (n1, dx, dy)
 
subroutine copy_2_4 (n1, n2, dx, dy)
 
subroutine copy_3_4 (n1, n2, n3, dx, dy)
 
subroutine copy_4_4 (n1, n2, n3, n4, dx, dy)
 
real(real64) function nrm2_4 (n, dx)
 
subroutine symv_1_4 (n, alpha, a, x, beta, y)
 
subroutine symv_2_4 (n1, n2, alpha, a, x, beta, y)
 
subroutine gemv_1_4 (m, n, alpha, a, x, beta, y)
 
subroutine gemv_2_4 (m1, m2, n, alpha, a, x, beta, y)
 
subroutine gemm_1_4 (m, n, k, alpha, a, b, beta, c)
 
subroutine gemm_2_4 (m1, m2, n, k, alpha, a, b, beta, c)
 
subroutine gemm_cn_1_4 (m, n, k, alpha, a, b, beta, c)
 The same as above but with (Hermitian) transpose of a. Note, in this also works when a and b are real. More...
 
subroutine gemm_cn_2_4 (m1, m2, n1, n2, k, alpha, a, b, beta, c)
 
subroutine gemm_nc_1_4 (m, n, k, alpha, a, b, beta, c)
 The same as gemm but with (Hermitian) transpose of b. Note, in this also works when a and b are real. More...
 
subroutine gemm_nc_2_4 (m1, m2, n1, n2, k, alpha, a, b, beta, c)
 
subroutine gemm_cc_1_4 (m, n, k, alpha, a, b, beta, c)
 GEMM when both a and b are (Hermitian) transposes. More...
 
subroutine symm_1_4 (m, n, side, alpha, a, b, beta, c)
 The following matrix multiplications all expect upper triangular matrices for a. For real matrices, a = a^T, for complex matrices a = a^H. More...
 
subroutine trmm_1_4 (m, n, uplo, transa, side, alpha, a, b)
 

Function/Subroutine Documentation

◆ dgemm_simple()

subroutine lalg_basic_oct_m::dgemm_simple ( real(real64), dimension(:,:), intent(in), contiguous  a,
real(real64), dimension(:,:), intent(in), contiguous  b,
real(real64), dimension(:,:), intent(inout), contiguous  c,
character(len=1), intent(in), optional  transa,
character(len=1), intent(in), optional  transb,
real(real64), intent(in), optional  alpha,
real(real64), intent(in), optional  beta 
)
private

GEMM with a simplified API for two matrices of consistent shape and type.

GEMM 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
either or(at your option) !! any later version. !! !! This program is distributed in the hope that it will be useful

operating on all elements of both matrices. If all defaults are used, the routine performs \(C = A B\). See the official [lapack](https: documentation for more details.

Parameters
[in,out]cIf not summing to c, it does not need to be
[in]transbTranspose a and b
[in]alphaScale the product, op( A )*op( B )
[in]betaScale input value of c.

Definition at line 287 of file lalg_basic.F90.

◆ swap_1_2()

subroutine lalg_basic_oct_m::swap_1_2 ( integer, intent(in)  n1,
real(real64), dimension(:), intent(inout), contiguous  dx,
real(real64), dimension(:), intent(inout), contiguous  dy 
)
private

BLAS level I

Definition at line 369 of file lalg_basic.F90.

◆ swap_2_2()

subroutine lalg_basic_oct_m::swap_2_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
real(real64), dimension(:,:), intent(inout), contiguous  dx,
real(real64), dimension(:,:), intent(inout), contiguous  dy 
)
private

Definition at line 386 of file lalg_basic.F90.

◆ swap_3_2()

subroutine lalg_basic_oct_m::swap_3_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
real(real64), dimension(:,:,:), intent(inout), contiguous  dx,
real(real64), dimension(:,:,:), intent(inout), contiguous  dy 
)
private

Definition at line 412 of file lalg_basic.F90.

◆ swap_4_2()

subroutine lalg_basic_oct_m::swap_4_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
integer, intent(in)  n4,
real(real64), dimension(:,:,:,:), intent(inout), contiguous  dx,
real(real64), dimension(:,:,:,:), intent(inout), contiguous  dy 
)
private

Definition at line 433 of file lalg_basic.F90.

◆ scal_1_2()

subroutine lalg_basic_oct_m::scal_1_2 ( integer, intent(in)  n1,
real(real64), intent(in)  da,
real(real64), dimension(:), intent(inout), contiguous  dx 
)
private

scales a vector by a constant

Definition at line 460 of file lalg_basic.F90.

◆ scal_2_2()

subroutine lalg_basic_oct_m::scal_2_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
real(real64), intent(in)  da,
real(real64), dimension(:, :), intent(inout), contiguous  dx 
)
private

Definition at line 477 of file lalg_basic.F90.

◆ scal_3_2()

subroutine lalg_basic_oct_m::scal_3_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
real(real64), intent(in)  da,
real(real64), dimension(:, :, :), intent(inout), contiguous  dx 
)
private

Definition at line 502 of file lalg_basic.F90.

◆ scal_4_2()

subroutine lalg_basic_oct_m::scal_4_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
integer, intent(in)  n4,
real(real64), intent(in)  da,
real(real64), dimension(:, :, :, :), intent(inout), contiguous  dx 
)
private

Definition at line 521 of file lalg_basic.F90.

◆ axpy_1_2()

subroutine lalg_basic_oct_m::axpy_1_2 ( integer, intent(in)  n1,
real(real64), intent(in)  da,
real(real64), dimension(:), intent(in), contiguous  dx,
real(real64), dimension(:), intent(inout), contiguous  dy 
)
private

constant times a vector plus a vector

Definition at line 545 of file lalg_basic.F90.

◆ axpy_2_2()

subroutine lalg_basic_oct_m::axpy_2_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
real(real64), intent(in)  da,
real(real64), dimension(:, :), intent(in), contiguous  dx,
real(real64), dimension(:, :), intent(inout), contiguous  dy 
)
private

Definition at line 574 of file lalg_basic.F90.

◆ axpy_3_2()

subroutine lalg_basic_oct_m::axpy_3_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
real(real64), intent(in)  da,
real(real64), dimension(:, :, :), intent(in), contiguous  dx,
real(real64), dimension(:, :, :), intent(inout), contiguous  dy 
)
private

Definition at line 613 of file lalg_basic.F90.

◆ axpy_4_2()

subroutine lalg_basic_oct_m::axpy_4_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
integer, intent(in)  n4,
real(real64), intent(in)  da,
real(real64), dimension(:, :, :, :), intent(in), contiguous  dx,
real(real64), dimension(:, :, :, :), intent(inout), contiguous  dy 
)
private

Definition at line 645 of file lalg_basic.F90.

◆ copy_1_2()

subroutine lalg_basic_oct_m::copy_1_2 ( integer, intent(in)  n1,
real(real64), dimension(:), intent(in), contiguous  dx,
real(real64), dimension(:), intent(inout), contiguous  dy 
)
private

Copies a vector x, to a vector y

Definition at line 683 of file lalg_basic.F90.

◆ copy_2_2()

subroutine lalg_basic_oct_m::copy_2_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
real(real64), dimension(:,:), intent(in), contiguous  dx,
real(real64), dimension(:,:), intent(inout), contiguous  dy 
)
private

Definition at line 706 of file lalg_basic.F90.

◆ copy_3_2()

subroutine lalg_basic_oct_m::copy_3_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
real(real64), dimension(:,:,:), intent(in), contiguous  dx,
real(real64), dimension(:,:,:), intent(inout), contiguous  dy 
)
private

Definition at line 737 of file lalg_basic.F90.

◆ copy_4_2()

subroutine lalg_basic_oct_m::copy_4_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
integer, intent(in)  n4,
real(real64), dimension(:,:,:,:), intent(in), contiguous  dx,
real(real64), dimension(:,:,:,:), intent(inout), contiguous  dy 
)
private

Definition at line 762 of file lalg_basic.F90.

◆ nrm2_2()

real(real64) function lalg_basic_oct_m::nrm2_2 ( integer, intent(in)  n,
real(real64), dimension(:), intent(in)  dx 
)
private

Returns the euclidean norm of a vector

Definition at line 793 of file lalg_basic.F90.

◆ symv_1_2()

subroutine lalg_basic_oct_m::symv_1_2 ( integer, intent(in)  n,
real(real64), intent(in)  alpha,
real(real64), dimension(:, :), intent(in), contiguous  a,
real(real64), dimension(:), intent(in), contiguous  x,
real(real64), intent(in)  beta,
real(real64), dimension(:), intent(inout), contiguous  y 
)
private

BLAS level II

Matrix-vector multiplication plus vector.

Definition at line 821 of file lalg_basic.F90.

◆ symv_2_2()

subroutine lalg_basic_oct_m::symv_2_2 ( integer, intent(in)  n1,
integer, intent(in)  n2,
real(real64), intent(in)  alpha,
real(real64), dimension(:, :, :), intent(in), contiguous  a,
real(real64), dimension(:), intent(in), contiguous  x,
real(real64), intent(in)  beta,
real(real64), dimension(:, :), intent(inout), contiguous  y 
)
private

Definition at line 839 of file lalg_basic.F90.

◆ gemv_1_2()

subroutine lalg_basic_oct_m::gemv_1_2 ( integer, intent(in)  m,
integer, intent(in)  n,
real(real64), intent(in)  alpha,
real(real64), dimension(:,:), intent(in), contiguous  a,
real(real64), dimension(:), intent(in), contiguous  x,
real(real64), intent(in)  beta,
real(real64), dimension(:), intent(inout), contiguous  y 
)
private

Definition at line 861 of file lalg_basic.F90.

◆ gemv_2_2()

subroutine lalg_basic_oct_m::gemv_2_2 ( integer, intent(in)  m1,
integer, intent(in)  m2,
integer, intent(in)  n,
real(real64), intent(in)  alpha,
real(real64), dimension(:,:,:), intent(in), contiguous  a,
real(real64), dimension(:), intent(in), contiguous  x,
real(real64), intent(in)  beta,
real(real64), dimension(:,:), intent(inout), contiguous  y 
)
private

Definition at line 880 of file lalg_basic.F90.

◆ gemm_1_2()

subroutine lalg_basic_oct_m::gemm_1_2 ( integer, intent(in)  m,
integer, intent(in)  n,
integer, intent(in)  k,
real(real64), intent(in)  alpha,
real(real64), dimension(:,:), intent(in), contiguous  a,
real(real64), dimension(:,:), intent(in), contiguous  b,
real(real64), intent(in)  beta,
real(real64), dimension(:,:), intent(inout), contiguous  c 
)
private

BLAS level III

Matrix-matrix multiplication plus matrix.

Definition at line 911 of file lalg_basic.F90.

◆ gemm_2_2()

subroutine lalg_basic_oct_m::gemm_2_2 ( integer, intent(in)  m1,
integer, intent(in)  m2,
integer, intent(in)  n,
integer, intent(in)  k,
real(real64), intent(in)  alpha,
real(real64), dimension(:, :, :), intent(in), contiguous  a,
real(real64), dimension(:, :), intent(in), contiguous  b,
real(real64), intent(in)  beta,
real(real64), dimension(:, :, :), intent(inout), contiguous  c 
)
private
Parameters
[in]aa(m1, m2, k)
[in]bb(k, n)
[in,out]cc(m1, m2, n)

Definition at line 932 of file lalg_basic.F90.

◆ gemm_cn_1_2()

subroutine lalg_basic_oct_m::gemm_cn_1_2 ( integer, intent(in)  m,
integer, intent(in)  n,
integer, intent(in)  k,
real(real64), intent(in)  alpha,
real(real64), dimension(:,:), intent(in), contiguous  a,
real(real64), dimension(:,:), intent(in), contiguous  b,
real(real64), intent(in)  beta,
real(real64), dimension(:,:), intent(inout), contiguous  c 
)
private

The same as above but with (Hermitian) transpose of a. Note, in this also works when a and b are real.

Parameters
[in]aa(k, m)
[in]bb(k, n)
[in,out]cc(m, n)

Definition at line 958 of file lalg_basic.F90.

◆ gemm_cn_2_2()

subroutine lalg_basic_oct_m::gemm_cn_2_2 ( integer, intent(in)  m1,
integer, intent(in)  m2,
integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  k,
real(real64), intent(in)  alpha,
real(real64), dimension(:, :, :), intent(in), contiguous  a,
real(real64), dimension(:, :, :), intent(in), contiguous  b,
real(real64), intent(in)  beta,
real(real64), dimension(:, :), intent(inout), contiguous  c 
)
private
Parameters
[in]aa(k, m2, m1)
[in]bb(k, n2, n1)
[in,out]cc(m1*m2, n1*n2)

Definition at line 979 of file lalg_basic.F90.

◆ gemm_nc_1_2()

subroutine lalg_basic_oct_m::gemm_nc_1_2 ( integer, intent(in)  m,
integer, intent(in)  n,
integer, intent(in)  k,
real(real64), intent(in)  alpha,
real(real64), dimension(:,:), intent(in), contiguous  a,
real(real64), dimension(:,:), intent(in), contiguous  b,
real(real64), intent(in)  beta,
real(real64), dimension(:,:), intent(inout), contiguous  c 
)
private

The same as gemm but with (Hermitian) transpose of b. Note, in this also works when a and b are real.

Parameters
[in]aa(m, k)
[in]bb(n, k)
[in,out]cc(m, n)

Definition at line 1006 of file lalg_basic.F90.

◆ gemm_nc_2_2()

subroutine lalg_basic_oct_m::gemm_nc_2_2 ( integer, intent(in)  m1,
integer, intent(in)  m2,
integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  k,
real(real64), intent(in)  alpha,
real(real64), dimension(:, :, :), intent(in), contiguous  a,
real(real64), dimension(:, :, :), intent(in), contiguous  b,
real(real64), intent(in)  beta,
real(real64), dimension(:, :), intent(inout), contiguous  c 
)
private
Parameters
[in]aa(k, m2, m1)
[in]bb(k, n2, n1)
[in,out]cc(m1*m2, n1*n2)

Definition at line 1027 of file lalg_basic.F90.

◆ gemm_cc_1_2()

subroutine lalg_basic_oct_m::gemm_cc_1_2 ( integer, intent(in)  m,
integer, intent(in)  n,
integer, intent(in)  k,
real(real64), intent(in)  alpha,
real(real64), dimension(:,:), intent(in), contiguous  a,
real(real64), dimension(:,:), intent(in), contiguous  b,
real(real64), intent(in)  beta,
real(real64), dimension(:,:), intent(inout), contiguous  c 
)
private

GEMM when both a and b are (Hermitian) transposes.

\[ \mathbf{C} = \mathbf{A}^\dagger \mathbf{B}^\dagger \]

Note that one can equivalently perform:

\[ \mathbf{C} = \left[\mathbf{B} \mathbf{A} \right]^\dagger \]

It might be more efficient to replace the implementation with the second operation defined above - requires testing.

Parameters
[in]aa(k, m)
[in]bb(n, k)
[in,out]cc(m, n)

Definition at line 1065 of file lalg_basic.F90.

◆ symm_1_2()

subroutine lalg_basic_oct_m::symm_1_2 ( integer, intent(in)  m,
integer, intent(in)  n,
character(1), intent(in)  side,
real(real64), intent(in)  alpha,
real(real64), dimension(:, :), intent(in), contiguous  a,
real(real64), dimension(:, :), intent(in), contiguous  b,
real(real64), intent(in)  beta,
real(real64), dimension(:, :), intent(inout), contiguous  c 
)
private

The following matrix multiplications all expect upper triangular matrices for a. For real matrices, a = a^T, for complex matrices a = a^H.

Definition at line 1090 of file lalg_basic.F90.

◆ trmm_1_2()

subroutine lalg_basic_oct_m::trmm_1_2 ( integer, intent(in)  m,
integer, intent(in)  n,
character(1), intent(in)  uplo,
character(1), intent(in)  transa,
character(1), intent(in)  side,
real(real64), intent(in)  alpha,
real(real64), dimension(:, :), intent(in), contiguous  a,
real(real64), dimension(:, :), intent(inout), contiguous  b 
)
private

Matrix-matrix multiplication.

Definition at line 1120 of file lalg_basic.F90.

◆ swap_1_4()

subroutine lalg_basic_oct_m::swap_1_4 ( integer, intent(in)  n1,
complex(real64), dimension(:), intent(inout), contiguous  dx,
complex(real64), dimension(:), intent(inout), contiguous  dy 
)
private

BLAS level I

Definition at line 1190 of file lalg_basic.F90.

◆ swap_2_4()

subroutine lalg_basic_oct_m::swap_2_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
complex(real64), dimension(:,:), intent(inout), contiguous  dx,
complex(real64), dimension(:,:), intent(inout), contiguous  dy 
)
private

Definition at line 1207 of file lalg_basic.F90.

◆ swap_3_4()

subroutine lalg_basic_oct_m::swap_3_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
complex(real64), dimension(:,:,:), intent(inout), contiguous  dx,
complex(real64), dimension(:,:,:), intent(inout), contiguous  dy 
)
private

Definition at line 1233 of file lalg_basic.F90.

◆ swap_4_4()

subroutine lalg_basic_oct_m::swap_4_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
integer, intent(in)  n4,
complex(real64), dimension(:,:,:,:), intent(inout), contiguous  dx,
complex(real64), dimension(:,:,:,:), intent(inout), contiguous  dy 
)
private

Definition at line 1254 of file lalg_basic.F90.

◆ scal_1_4()

subroutine lalg_basic_oct_m::scal_1_4 ( integer, intent(in)  n1,
complex(real64), intent(in)  da,
complex(real64), dimension(:), intent(inout), contiguous  dx 
)
private

scales a vector by a constant

Definition at line 1281 of file lalg_basic.F90.

◆ scal_2_4()

subroutine lalg_basic_oct_m::scal_2_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
complex(real64), intent(in)  da,
complex(real64), dimension(:, :), intent(inout), contiguous  dx 
)
private

Definition at line 1298 of file lalg_basic.F90.

◆ scal_3_4()

subroutine lalg_basic_oct_m::scal_3_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
complex(real64), intent(in)  da,
complex(real64), dimension(:, :, :), intent(inout), contiguous  dx 
)
private

Definition at line 1323 of file lalg_basic.F90.

◆ scal_4_4()

subroutine lalg_basic_oct_m::scal_4_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
integer, intent(in)  n4,
complex(real64), intent(in)  da,
complex(real64), dimension(:, :, :, :), intent(inout), contiguous  dx 
)
private

Definition at line 1342 of file lalg_basic.F90.

◆ scal_5_4()

subroutine lalg_basic_oct_m::scal_5_4 ( integer, intent(in)  n1,
real(real64), intent(in)  da,
complex(real64), dimension(:), intent(inout), contiguous  dx 
)
private

Definition at line 1363 of file lalg_basic.F90.

◆ scal_6_4()

subroutine lalg_basic_oct_m::scal_6_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
real(real64), intent(in)  da,
complex(real64), dimension(:, :), intent(inout), contiguous  dx 
)
private

Definition at line 1380 of file lalg_basic.F90.

◆ axpy_1_4()

subroutine lalg_basic_oct_m::axpy_1_4 ( integer, intent(in)  n1,
complex(real64), intent(in)  da,
complex(real64), dimension(:), intent(in), contiguous  dx,
complex(real64), dimension(:), intent(inout), contiguous  dy 
)
private

constant times a vector plus a vector

Definition at line 1411 of file lalg_basic.F90.

◆ axpy_2_4()

subroutine lalg_basic_oct_m::axpy_2_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
complex(real64), intent(in)  da,
complex(real64), dimension(:, :), intent(in), contiguous  dx,
complex(real64), dimension(:, :), intent(inout), contiguous  dy 
)
private

Definition at line 1440 of file lalg_basic.F90.

◆ axpy_3_4()

subroutine lalg_basic_oct_m::axpy_3_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
complex(real64), intent(in)  da,
complex(real64), dimension(:, :, :), intent(in), contiguous  dx,
complex(real64), dimension(:, :, :), intent(inout), contiguous  dy 
)
private

Definition at line 1479 of file lalg_basic.F90.

◆ axpy_4_4()

subroutine lalg_basic_oct_m::axpy_4_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
integer, intent(in)  n4,
complex(real64), intent(in)  da,
complex(real64), dimension(:, :, :, :), intent(in), contiguous  dx,
complex(real64), dimension(:, :, :, :), intent(inout), contiguous  dy 
)
private

Definition at line 1511 of file lalg_basic.F90.

◆ axpy_5_4()

subroutine lalg_basic_oct_m::axpy_5_4 ( integer, intent(in)  n1,
real(real64), intent(in)  da,
complex(real64), dimension(:), intent(in), contiguous  dx,
complex(real64), dimension(:), intent(inout), contiguous  dy 
)
private

Definition at line 1546 of file lalg_basic.F90.

◆ axpy_6_4()

subroutine lalg_basic_oct_m::axpy_6_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
real(real64), intent(in)  da,
complex(real64), dimension(:, :), intent(in), contiguous  dx,
complex(real64), dimension(:, :), intent(inout), contiguous  dy 
)
private

Definition at line 1571 of file lalg_basic.F90.

◆ axpy_7_4()

subroutine lalg_basic_oct_m::axpy_7_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
real(real64), intent(in)  da,
complex(real64), dimension(:, :, :), intent(in), contiguous  dx,
complex(real64), dimension(:, :, :), intent(inout), contiguous  dy 
)
private

Definition at line 1607 of file lalg_basic.F90.

◆ copy_1_4()

subroutine lalg_basic_oct_m::copy_1_4 ( integer, intent(in)  n1,
complex(real64), dimension(:), intent(in), contiguous  dx,
complex(real64), dimension(:), intent(inout), contiguous  dy 
)
private

Copies a vector x, to a vector y

Definition at line 1640 of file lalg_basic.F90.

◆ copy_2_4()

subroutine lalg_basic_oct_m::copy_2_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
complex(real64), dimension(:,:), intent(in), contiguous  dx,
complex(real64), dimension(:,:), intent(inout), contiguous  dy 
)
private

Definition at line 1663 of file lalg_basic.F90.

◆ copy_3_4()

subroutine lalg_basic_oct_m::copy_3_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
complex(real64), dimension(:,:,:), intent(in), contiguous  dx,
complex(real64), dimension(:,:,:), intent(inout), contiguous  dy 
)
private

Definition at line 1694 of file lalg_basic.F90.

◆ copy_4_4()

subroutine lalg_basic_oct_m::copy_4_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  n3,
integer, intent(in)  n4,
complex(real64), dimension(:,:,:,:), intent(in), contiguous  dx,
complex(real64), dimension(:,:,:,:), intent(inout), contiguous  dy 
)
private

Definition at line 1719 of file lalg_basic.F90.

◆ nrm2_4()

real(real64) function lalg_basic_oct_m::nrm2_4 ( integer, intent(in)  n,
complex(real64), dimension(:), intent(in)  dx 
)
private

Returns the euclidean norm of a vector

Definition at line 1750 of file lalg_basic.F90.

◆ symv_1_4()

subroutine lalg_basic_oct_m::symv_1_4 ( integer, intent(in)  n,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:, :), intent(in), contiguous  a,
complex(real64), dimension(:), intent(in), contiguous  x,
complex(real64), intent(in)  beta,
complex(real64), dimension(:), intent(inout), contiguous  y 
)
private

BLAS level II

Matrix-vector multiplication plus vector.

Definition at line 1778 of file lalg_basic.F90.

◆ symv_2_4()

subroutine lalg_basic_oct_m::symv_2_4 ( integer, intent(in)  n1,
integer, intent(in)  n2,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:, :, :), intent(in), contiguous  a,
complex(real64), dimension(:), intent(in), contiguous  x,
complex(real64), intent(in)  beta,
complex(real64), dimension(:, :), intent(inout), contiguous  y 
)
private

Definition at line 1796 of file lalg_basic.F90.

◆ gemv_1_4()

subroutine lalg_basic_oct_m::gemv_1_4 ( integer, intent(in)  m,
integer, intent(in)  n,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:,:), intent(in), contiguous  a,
complex(real64), dimension(:), intent(in), contiguous  x,
complex(real64), intent(in)  beta,
complex(real64), dimension(:), intent(inout), contiguous  y 
)
private

Definition at line 1818 of file lalg_basic.F90.

◆ gemv_2_4()

subroutine lalg_basic_oct_m::gemv_2_4 ( integer, intent(in)  m1,
integer, intent(in)  m2,
integer, intent(in)  n,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:,:,:), intent(in), contiguous  a,
complex(real64), dimension(:), intent(in), contiguous  x,
complex(real64), intent(in)  beta,
complex(real64), dimension(:,:), intent(inout), contiguous  y 
)
private

Definition at line 1837 of file lalg_basic.F90.

◆ gemm_1_4()

subroutine lalg_basic_oct_m::gemm_1_4 ( integer, intent(in)  m,
integer, intent(in)  n,
integer, intent(in)  k,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:,:), intent(in), contiguous  a,
complex(real64), dimension(:,:), intent(in), contiguous  b,
complex(real64), intent(in)  beta,
complex(real64), dimension(:,:), intent(inout), contiguous  c 
)
private

BLAS level III

Matrix-matrix multiplication plus matrix.

Definition at line 1868 of file lalg_basic.F90.

◆ gemm_2_4()

subroutine lalg_basic_oct_m::gemm_2_4 ( integer, intent(in)  m1,
integer, intent(in)  m2,
integer, intent(in)  n,
integer, intent(in)  k,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:, :, :), intent(in), contiguous  a,
complex(real64), dimension(:, :), intent(in), contiguous  b,
complex(real64), intent(in)  beta,
complex(real64), dimension(:, :, :), intent(inout), contiguous  c 
)
private
Parameters
[in]aa(m1, m2, k)
[in]bb(k, n)
[in,out]cc(m1, m2, n)

Definition at line 1889 of file lalg_basic.F90.

◆ gemm_cn_1_4()

subroutine lalg_basic_oct_m::gemm_cn_1_4 ( integer, intent(in)  m,
integer, intent(in)  n,
integer, intent(in)  k,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:,:), intent(in), contiguous  a,
complex(real64), dimension(:,:), intent(in), contiguous  b,
complex(real64), intent(in)  beta,
complex(real64), dimension(:,:), intent(inout), contiguous  c 
)
private

The same as above but with (Hermitian) transpose of a. Note, in this also works when a and b are real.

Parameters
[in]aa(k, m)
[in]bb(k, n)
[in,out]cc(m, n)

Definition at line 1915 of file lalg_basic.F90.

◆ gemm_cn_2_4()

subroutine lalg_basic_oct_m::gemm_cn_2_4 ( integer, intent(in)  m1,
integer, intent(in)  m2,
integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  k,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:, :, :), intent(in), contiguous  a,
complex(real64), dimension(:, :, :), intent(in), contiguous  b,
complex(real64), intent(in)  beta,
complex(real64), dimension(:, :), intent(inout), contiguous  c 
)
private
Parameters
[in]aa(k, m2, m1)
[in]bb(k, n2, n1)
[in,out]cc(m1*m2, n1*n2)

Definition at line 1936 of file lalg_basic.F90.

◆ gemm_nc_1_4()

subroutine lalg_basic_oct_m::gemm_nc_1_4 ( integer, intent(in)  m,
integer, intent(in)  n,
integer, intent(in)  k,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:,:), intent(in), contiguous  a,
complex(real64), dimension(:,:), intent(in), contiguous  b,
complex(real64), intent(in)  beta,
complex(real64), dimension(:,:), intent(inout), contiguous  c 
)
private

The same as gemm but with (Hermitian) transpose of b. Note, in this also works when a and b are real.

Parameters
[in]aa(m, k)
[in]bb(n, k)
[in,out]cc(m, n)

Definition at line 1963 of file lalg_basic.F90.

◆ gemm_nc_2_4()

subroutine lalg_basic_oct_m::gemm_nc_2_4 ( integer, intent(in)  m1,
integer, intent(in)  m2,
integer, intent(in)  n1,
integer, intent(in)  n2,
integer, intent(in)  k,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:, :, :), intent(in), contiguous  a,
complex(real64), dimension(:, :, :), intent(in), contiguous  b,
complex(real64), intent(in)  beta,
complex(real64), dimension(:, :), intent(inout), contiguous  c 
)
private
Parameters
[in]aa(k, m2, m1)
[in]bb(k, n2, n1)
[in,out]cc(m1*m2, n1*n2)

Definition at line 1984 of file lalg_basic.F90.

◆ gemm_cc_1_4()

subroutine lalg_basic_oct_m::gemm_cc_1_4 ( integer, intent(in)  m,
integer, intent(in)  n,
integer, intent(in)  k,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:,:), intent(in), contiguous  a,
complex(real64), dimension(:,:), intent(in), contiguous  b,
complex(real64), intent(in)  beta,
complex(real64), dimension(:,:), intent(inout), contiguous  c 
)
private

GEMM when both a and b are (Hermitian) transposes.

\[ \mathbf{C} = \mathbf{A}^\dagger \mathbf{B}^\dagger \]

Note that one can equivalently perform:

\[ \mathbf{C} = \left[\mathbf{B} \mathbf{A} \right]^\dagger \]

It might be more efficient to replace the implementation with the second operation defined above - requires testing.

Parameters
[in]aa(k, m)
[in]bb(n, k)
[in,out]cc(m, n)

Definition at line 2022 of file lalg_basic.F90.

◆ symm_1_4()

subroutine lalg_basic_oct_m::symm_1_4 ( integer, intent(in)  m,
integer, intent(in)  n,
character(1), intent(in)  side,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:, :), intent(in), contiguous  a,
complex(real64), dimension(:, :), intent(in), contiguous  b,
complex(real64), intent(in)  beta,
complex(real64), dimension(:, :), intent(inout), contiguous  c 
)
private

The following matrix multiplications all expect upper triangular matrices for a. For real matrices, a = a^T, for complex matrices a = a^H.

Definition at line 2047 of file lalg_basic.F90.

◆ trmm_1_4()

subroutine lalg_basic_oct_m::trmm_1_4 ( integer, intent(in)  m,
integer, intent(in)  n,
character(1), intent(in)  uplo,
character(1), intent(in)  transa,
character(1), intent(in)  side,
complex(real64), intent(in)  alpha,
complex(real64), dimension(:, :), intent(in), contiguous  a,
complex(real64), dimension(:, :), intent(inout), contiguous  b 
)
private

Matrix-matrix multiplication.

Definition at line 2077 of file lalg_basic.F90.