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 285 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 367 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 384 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 410 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 431 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 458 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 475 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 500 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 519 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 543 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 572 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 611 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 643 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 681 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 704 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 735 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 760 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 791 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 819 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 837 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 859 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 878 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 909 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 930 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 956 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 977 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 1004 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 1025 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 1063 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 1088 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 1118 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 1188 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 1205 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 1231 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 1252 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 1279 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 1296 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 1321 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 1340 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 1361 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 1378 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 1409 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 1438 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 1477 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 1509 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 1544 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 1569 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 1605 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 1638 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 1661 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 1692 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 1717 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 1748 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 1776 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 1794 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 1816 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 1835 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 1866 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 1887 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 1913 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 1934 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 1961 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 1982 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 2020 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 2045 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 2075 of file lalg_basic.F90.