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 881 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 914 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 935 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 961 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 982 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(k, n)
[in,out]cc(m, n)

Definition at line 1009 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 1030 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 1068 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 1093 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 1125 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 1195 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 1212 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 1238 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 1259 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 1286 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 1303 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 1328 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 1347 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 1368 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 1385 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 1416 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 1445 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 1484 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 1516 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 1551 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 1576 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 1612 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 1645 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 1668 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 1699 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 1724 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 1755 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 1783 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 1801 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 1823 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 1845 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 1878 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 1899 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 1925 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 1946 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(k, n)
[in,out]cc(m, n)

Definition at line 1973 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 1994 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 2032 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 2057 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 2089 of file lalg_basic.F90.