Eigenvalue SoLvers for Petaflop-Applications (ELPA)  2021.05.001
Functions/Subroutines
elpa_impl_math_template.F90 File Reference

Functions/Subroutines

subroutine elpa_eigenvectors_ELPA_IMPL_SUFFIX (self, a, ev, q, error)
 elpa_eigenvectors_d: class method to solve the eigenvalue problem More...
 
subroutine elpa_eigenvectors_ELPA_IMPL_SUFFIX_c (handle, a_p, ev_p, q_p, error)
 
subroutine elpa_eigenvalues_ELPA_IMPL_SUFFIX (self, a, ev, error)
 elpa_eigenvalues_d: class method to solve the eigenvalue problem More...
 
subroutine elpa_eigenvalues_ELPA_IMPL_SUFFIX_c (handle, a_p, ev_p, error)
 
subroutine elpa_generalized_eigenvectors_ELPA_IMPL_SUFFIX (self, a, b, ev, q, is_already_decomposed, error)
 elpa_generalized_eigenvectors_d: class method to solve the eigenvalue problem More...
 
subroutine elpa_generalized_eigenvectors_ELPA_IMPL_SUFFIX_c (handle, a_p, b_p, ev_p, q_p, is_already_decomposed, error)
 
subroutine elpa_generalized_eigenvalues_ELPA_IMPL_SUFFIX (self, a, b, ev, is_already_decomposed, error)
 elpa_generalized_eigenvalues_d: class method to solve the eigenvalue problem More...
 
subroutine elpa_generalized_eigenvalues_ELPA_IMPL_SUFFIX_c (handle, a_p, b_p, ev_p, is_already_decomposed, error)
 
subroutine elpa_hermitian_multiply_ELPA_IMPL_SUFFIX (self, uplo_a, uplo_c, ncb, a, b, nrows_b, ncols_b, c, nrows_c, ncols_c, error)
 elpa_hermitian_multiply_d: class method to perform C : = A**T * B where A is a square matrix (selfna,selfna) which is optionally upper or lower triangular B is a (selfna,ncb) matrix C is a (selfna,ncb) matrix where optionally only the upper or lower triangle may be computed More...
 
subroutine elpa_hermitian_multiply_ELPA_IMPL_SUFFIX_c (handle, uplo_a, uplo_c, ncb, a_p, b, nrows_b, ncols_b, c, nrows_c, ncols_c, error)
 
subroutine elpa_cholesky_ELPA_IMPL_SUFFIX (self, a, error)
 elpa_choleksy_d: class method to do a cholesky factorization More...
 
subroutine elpa_choleksy_ELPA_IMPL_SUFFIX_c (handle, a_p, error)
 
subroutine elpa_invert_trm_ELPA_IMPL_SUFFIX (self, a, error)
 elpa_invert_trm_d: class method to invert a triangular More...
 
subroutine elpa_invert_trm_ELPA_IMPL_SUFFIX_c (handle, a_p, error)
 
subroutine elpa_solve_tridiagonal_ELPA_IMPL_SUFFIX (self, d, e, q, error)
 elpa_solve_tridiagonal_d: class method to solve the eigenvalue problem for a tridiagonal matrix a More...
 

Function/Subroutine Documentation

◆ elpa_choleksy_ELPA_IMPL_SUFFIX_c()

subroutine elpa_choleksy_ELPA_IMPL_SUFFIX_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
integer(kind=c_int), intent(in), optional  error 
)

◆ elpa_cholesky_ELPA_IMPL_SUFFIX()

subroutine elpa_cholesky_ELPA_IMPL_SUFFIX ( class(elpa_impl_t)  self,
  a,
integer, optional  error 
)

elpa_choleksy_d: class method to do a cholesky factorization

The dimensions of the matrix a (locally ditributed and global), the block-cylic-distribution block size, and the MPI communicators are already known to the object and MUST be set BEFORE with the class method "setup"

It is possible to change the behaviour of the method by setting tunable parameters with the class method "set"

Parameters

Parameters
aDistributed matrix for which eigenvalues are to be computed. Distribution is like in Scalapack. The full matrix must be set (not only one half like in scalapack). Destroyed on exit (upper and lower half).
errorinteger, optional: returns an error code, which can be queried with elpa_strerr

◆ elpa_eigenvalues_ELPA_IMPL_SUFFIX()

subroutine elpa_eigenvalues_ELPA_IMPL_SUFFIX ( class(elpa_impl_t)  self,
  a,
real(kind=c_real_datatype), dimension(self%na)  ev,
integer  error 
)

elpa_eigenvalues_d: class method to solve the eigenvalue problem

The dimensions of the matrix a (locally ditributed and global), the block-cyclic distribution blocksize, the number of eigenvectors to be computed and the MPI communicators are already known to the object and MUST be set BEFORE with the class method "setup"

It is possible to change the behaviour of the method by setting tunable parameters with the class method "set"

Parameters

Parameters
aDistributed matrix for which eigenvalues are to be computed. Distribution is like in Scalapack. The full matrix must be set (not only one half like in scalapack). Destroyed on exit (upper and lower half).
evOn output: eigenvalues of a, every processor gets the complete set
errorinteger, optional: returns an error code, which can be queried with elpa_strerr

◆ elpa_eigenvalues_ELPA_IMPL_SUFFIX_c()

subroutine elpa_eigenvalues_ELPA_IMPL_SUFFIX_c ( value  handle,
value  a_p,
value  ev_p,
integer(kind=c_int), intent(in)  error 
)

◆ elpa_eigenvectors_ELPA_IMPL_SUFFIX()

subroutine elpa_eigenvectors_ELPA_IMPL_SUFFIX ( class(elpa_impl_t)  self,
  a,
real(kind=c_real_datatype), dimension(self%na)  ev,
  q,
integer  error 
)

elpa_eigenvectors_d: class method to solve the eigenvalue problem

The dimensions of the matrix a (locally ditributed and global), the block-cyclic distribution blocksize, the number of eigenvectors to be computed and the MPI communicators are already known to the object and MUST be set BEFORE with the class method "setup"

It is possible to change the behaviour of the method by setting tunable parameters with the class method "set"

Parameters

Parameters
aDistributed matrix for which eigenvalues are to be computed. Distribution is like in Scalapack. The full matrix must be set (not only one half like in scalapack). Destroyed on exit (upper and lower half).
evOn output: eigenvalues of a, every processor gets the complete set
qOn output: Eigenvectors of a Distribution is like in Scalapack. Must be always dimensioned to the full size (corresponding to (na,na)) even if only a part of the eigenvalues is needed.
errorinteger, optional: returns an error code, which can be queried with elpa_strerr

◆ elpa_eigenvectors_ELPA_IMPL_SUFFIX_c()

subroutine elpa_eigenvectors_ELPA_IMPL_SUFFIX_c ( value  handle,
value  a_p,
value  ev_p,
value  q_p,
integer(kind=c_int), intent(in)  error 
)

◆ elpa_generalized_eigenvalues_ELPA_IMPL_SUFFIX()

subroutine elpa_generalized_eigenvalues_ELPA_IMPL_SUFFIX ( class(elpa_impl_t)  self,
  a,
  b,
real(kind=c_real_datatype), dimension(self%na)  ev,
logical  is_already_decomposed,
integer, optional  error 
)

elpa_generalized_eigenvalues_d: class method to solve the eigenvalue problem

The dimensions of the matrix a (locally ditributed and global), the block-cyclic distribution blocksize, the number of eigenvectors to be computed and the MPI communicators are already known to the object and MUST be set BEFORE with the class method "setup"

It is possible to change the behaviour of the method by setting tunable parameters with the class method "set"

Parameters

Parameters
aDistributed matrix for which eigenvalues are to be computed. Distribution is like in Scalapack. The full matrix must be set (not only one half like in scalapack). Destroyed on exit (upper and lower half).
bDistributed matrix, part of the generalized eigenvector problem, or the product of a previous call to this function (see is_already_decomposed). Distribution is like in Scalapack. If is_already_decomposed is false, on exit replaced by the decomposition
evOn output: eigenvalues of a, every processor gets the complete set
is_already_decomposedhas to be set to .false. for the first call with a given b and .true. for each subsequent call with the same b, since b then already contains decomposition and thus the decomposing step is skipped
errorinteger, optional: returns an error code, which can be queried with elpa_strerr

◆ elpa_generalized_eigenvalues_ELPA_IMPL_SUFFIX_c()

subroutine elpa_generalized_eigenvalues_ELPA_IMPL_SUFFIX_c ( value  handle,
value  a_p,
value  b_p,
value  ev_p,
integer(kind=c_int), intent(in), value  is_already_decomposed,
integer(kind=c_int), intent(in)  error 
)

◆ elpa_generalized_eigenvectors_ELPA_IMPL_SUFFIX()

subroutine elpa_generalized_eigenvectors_ELPA_IMPL_SUFFIX ( class(elpa_impl_t)  self,
  a,
  b,
real(kind=c_real_datatype), dimension(self%na)  ev,
  q,
logical  is_already_decomposed,
integer, optional  error 
)

elpa_generalized_eigenvectors_d: class method to solve the eigenvalue problem

The dimensions of the matrix a (locally ditributed and global), the block-cyclic distribution blocksize, the number of eigenvectors to be computed and the MPI communicators are already known to the object and MUST be set BEFORE with the class method "setup"

It is possible to change the behaviour of the method by setting tunable parameters with the class method "set"

Parameters

Parameters
aDistributed matrix for which eigenvalues are to be computed. Distribution is like in Scalapack. The full matrix must be set (not only one half like in scalapack). Destroyed on exit (upper and lower half).
bDistributed matrix, part of the generalized eigenvector problem, or the product of a previous call to this function (see is_already_decomposed). Distribution is like in Scalapack. If is_already_decomposed is false, on exit replaced by the decomposition
evOn output: eigenvalues of a, every processor gets the complete set
qOn output: Eigenvectors of a Distribution is like in Scalapack. Must be always dimensioned to the full size (corresponding to (na,na)) even if only a part of the eigenvalues is needed.
is_already_decomposedhas to be set to .false. for the first call with a given b and .true. for each subsequent call with the same b, since b then already contains decomposition and thus the decomposing step is skipped
errorinteger, optional: returns an error code, which can be queried with elpa_strerr

◆ elpa_generalized_eigenvectors_ELPA_IMPL_SUFFIX_c()

subroutine elpa_generalized_eigenvectors_ELPA_IMPL_SUFFIX_c ( value  handle,
value  a_p,
value  b_p,
value  ev_p,
value  q_p,
integer(kind=c_int), intent(in), value  is_already_decomposed,
integer(kind=c_int), intent(in)  error 
)

◆ elpa_hermitian_multiply_ELPA_IMPL_SUFFIX()

subroutine elpa_hermitian_multiply_ELPA_IMPL_SUFFIX ( class(elpa_impl_t)  self,
character*1  uplo_a,
character*1  uplo_c,
integer(kind=c_int), intent(in)  ncb,
  a,
  b,
integer(kind=c_int), intent(in)  nrows_b,
integer(kind=c_int), intent(in)  ncols_b,
  c,
integer(kind=c_int), intent(in)  nrows_c,
integer(kind=c_int), intent(in)  ncols_c,
integer, optional  error 
)

elpa_hermitian_multiply_d: class method to perform C : = A**T * B where A is a square matrix (selfna,selfna) which is optionally upper or lower triangular B is a (selfna,ncb) matrix C is a (selfna,ncb) matrix where optionally only the upper or lower triangle may be computed

the MPI commicators and the block-cyclic distribution block size are already known to the type. Thus the class method "setup" must be called BEFORE this method is used

Parameters
selfclass(elpa_t), the ELPA object
uplo_a'U' if A is upper triangular 'L' if A is lower triangular anything else if A is a full matrix Please note: This pertains to the original A (as set in the calling program) whereas the transpose of A is used for calculations If uplo_a is 'U' or 'L', the other triangle is not used at all, i.e. it may contain arbitrary numbers
uplo_c'U' if only the upper diagonal part of C is needed 'L' if only the upper diagonal part of C is needed anything else if the full matrix C is needed Please note: Even when uplo_c is 'U' or 'L', the other triangle may be written to a certain extent, i.e. one shouldn't rely on the content there!
ncbNumber of columns of global matrices B and C
amatrix a
local_nrowsnumber of rows of local (sub) matrix a, set with class method set("local_nrows",value)
local_ncolsnumber of columns of local (sub) matrix a, set with class method set("local_ncols",value)
bmatrix b
nrows_bnumber of rows of local (sub) matrix b
ncols_bnumber of columns of local (sub) matrix b
cmatrix c
nrows_cnumber of rows of local (sub) matrix c
ncols_cnumber of columns of local (sub) matrix c
erroroptional argument, error code which can be queried with elpa_strerr

◆ elpa_hermitian_multiply_ELPA_IMPL_SUFFIX_c()

subroutine elpa_hermitian_multiply_ELPA_IMPL_SUFFIX_c ( type(c_ptr), intent(in), value  handle,
character(1,c_char), value  uplo_a,
character(1,c_char), value  uplo_c,
integer(kind=c_int), value  ncb,
type(c_ptr), intent(in), value  a_p,
  b,
integer(kind=c_int), value  nrows_b,
integer(kind=c_int), value  ncols_b,
  c,
integer(kind=c_int), value  nrows_c,
integer(kind=c_int), value  ncols_c,
integer(kind=c_int), intent(in), optional  error 
)

◆ elpa_invert_trm_ELPA_IMPL_SUFFIX()

subroutine elpa_invert_trm_ELPA_IMPL_SUFFIX ( class(elpa_impl_t)  self,
  a,
integer, optional  error 
)

elpa_invert_trm_d: class method to invert a triangular

The dimensions of the matrix a (locally ditributed and global), the block-cylic-distribution block size, and the MPI communicators are already known to the object and MUST be set BEFORE with the class method "setup"

It is possible to change the behaviour of the method by setting tunable parameters with the class method "set"

Parameters

Parameters
aDistributed matrix for which eigenvalues are to be computed. Distribution is like in Scalapack. The full matrix must be set (not only one half like in scalapack). Destroyed on exit (upper and lower half).
errorinteger, optional: returns an error code, which can be queried with elpa_strerr

◆ elpa_invert_trm_ELPA_IMPL_SUFFIX_c()

subroutine elpa_invert_trm_ELPA_IMPL_SUFFIX_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
integer(kind=c_int), intent(in), optional  error 
)

◆ elpa_solve_tridiagonal_ELPA_IMPL_SUFFIX()

subroutine elpa_solve_tridiagonal_ELPA_IMPL_SUFFIX ( class(elpa_impl_t)  self,
real(kind=c_real_datatype), dimension(self%na)  d,
real(kind=c_real_datatype), dimension(self%na)  e,
real(kind=c_real_datatype), dimension(self%local_nrows,self%local_ncols)  q,
integer, optional  error 
)

elpa_solve_tridiagonal_d: class method to solve the eigenvalue problem for a tridiagonal matrix a

The dimensions of the matrix a (locally ditributed and global), the block-cylic-distribution block size, and the MPI communicators are already known to the object and MUST be set BEFORE with the class method "setup"

It is possible to change the behaviour of the method by setting tunable parameters with the class method "set"

Parameters

Parameters
darray d on input diagonal elements of tridiagonal matrix, on output the eigenvalues in ascending order
earray e on input subdiagonal elements of matrix, on exit destroyed
qmatrix on exit : contains the eigenvectors
errorinteger, optional: returns an error code, which can be queried with elpa_strerr