Eigenvalue SoLvers for Petaflop-Applications (ELPA)  2017.11.001
Data Types | Functions/Subroutines
elpa_impl Module Reference

Fortran module which provides the actual implementation of the API. Do not use directly! Use the module "elpa". More...

Data Types

type  elpa_impl_t
 Definition of the extended elpa_impl_t type. More...
 

Functions/Subroutines

type(elpa_impl_t) function, pointer, public elpa_impl_allocate (error)
 the implementation of the generic methods More...
 
type(c_ptr) function elpa_impl_allocate_c (error)
 
subroutine elpa_impl_deallocate_c (handle)
 
subroutine elpa_autotune_impl_deallocate_c (autotune_handle)
 
integer function elpa_setup (self)
 function to setup an ELPA object and to store the MPI communicators internally Parameters More...
 
integer(kind=c_int) function elpa_setup_c (handle)
 
subroutine elpa_set_integer_c (handle, name_p, value, error)
 
subroutine elpa_get_integer_c (handle, name_p, value, error)
 
integer function elpa_is_set (self, name)
 function to check whether a key/value pair is set Parameters More...
 
integer function elpa_can_set (self, name, value)
 function to check whether a key/value pair can be set Parameters More...
 
character(kind=c_char, len=elpa_index_int_value_to_strlen_c(self%index, option_name//c_null_char)) function, pointer elpa_value_to_string (self, option_name, error)
 function to convert a value to an human readable string Parameters More...
 
subroutine elpa_set_double_c (handle, name_p, value, error)
 
subroutine elpa_get_double_c (handle, name_p, value, error)
 
integer(kind=c_int) function, pointer elpa_associate_int (self, name)
 function to associate a pointer with an integer value Parameters More...
 
real(kind=c_double) function elpa_get_time (self, name1, name2, name3, name4, name5, name6)
 function to querry the timing information at a certain level Parameters More...
 
subroutine elpa_print_times (self, name1, name2, name3, name4)
 function to print the timing tree below at a certain level Parameters More...
 
subroutine elpa_timer_start (self, name)
 function to start the timing of a code region Parameters More...
 
subroutine elpa_timer_stop (self, name)
 function to stop the timing of a code region Parameters More...
 
subroutine elpa_eigenvectors_d (self, a, ev, q, error)
 elpa_eigenvectors_d: class method to solve the eigenvalue problem for double real matrices More...
 
subroutine elpa_eigenvectors_d_c (handle, a_p, ev_p, q_p, error)
 
subroutine elpa_eigenvectors_f (self, a, ev, q, error)
 elpa_eigenvectors_f: class method to solve the eigenvalue problem for float real matrices More...
 
subroutine elpa_eigenvectors_f_c (handle, a_p, ev_p, q_p, error)
 
subroutine elpa_eigenvectors_dc (self, a, ev, q, error)
 elpa_eigenvectors_dc: class method to solve the eigenvalue problem for double complex matrices More...
 
subroutine elpa_eigenvectors_dc_c (handle, a_p, ev_p, q_p, error)
 
subroutine elpa_eigenvectors_fc (self, a, ev, q, error)
 elpa_eigenvectors_fc: class method to solve the eigenvalue problem for float complex matrices More...
 
subroutine elpa_eigenvectors_fc_c (handle, a_p, ev_p, q_p, error)
 
subroutine elpa_eigenvalues_d (self, a, ev, error)
 elpa_eigenvalues_d: class method to solve the eigenvalue problem for double real matrices More...
 
subroutine elpa_eigenvalues_d_c (handle, a_p, ev_p, error)
 
subroutine elpa_eigenvalues_f (self, a, ev, error)
 elpa_eigenvectors_f: class method to solve the eigenvalue problem for float real matrices More...
 
subroutine elpa_eigenvalues_f_c (handle, a_p, ev_p, error)
 
subroutine elpa_eigenvalues_dc (self, a, ev, error)
 elpa_eigenvalues_dc: class method to solve the eigenvalue problem for double complex matrices More...
 
subroutine elpa_eigenvalues_dc_c (handle, a_p, ev_p, error)
 
subroutine elpa_eigenvalues_fc (self, a, ev, error)
 elpa_eigenvalues_fc: class method to solve the eigenvalue problem for float complex matrices More...
 
subroutine elpa_eigenvalues_fc_c (handle, a_p, ev_p, error)
 
subroutine elpa_hermitian_multiply_d (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 for double real matrices 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_d_c (handle, uplo_a, uplo_c, ncb, a_p, b, nrows_b, ncols_b, c, nrows_c, ncols_c, error)
 
subroutine elpa_hermitian_multiply_f (self, uplo_a, uplo_c, ncb, a, b, nrows_b, ncols_b, c, nrows_c, ncols_c, error)
 elpa_hermitian_multiply_f: class method to perform C : = A**T * B for float real matrices 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_f_c (handle, uplo_a, uplo_c, ncb, a_p, b, nrows_b, ncols_b, c, nrows_c, ncols_c, error)
 
subroutine elpa_hermitian_multiply_dc (self, uplo_a, uplo_c, ncb, a, b, nrows_b, ncols_b, c, nrows_c, ncols_c, error)
 elpa_hermitian_multiply_dc: class method to perform C : = A**H * B for double complex matrices 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_dc_c (handle, uplo_a, uplo_c, ncb, a_p, b, nrows_b, ncols_b, c, nrows_c, ncols_c, error)
 
subroutine elpa_hermitian_multiply_fc (self, uplo_a, uplo_c, ncb, a, b, nrows_b, ncols_b, c, nrows_c, ncols_c, error)
 elpa_hermitian_multiply_fc: class method to perform C : = A**H * B for float complex matrices 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_fc_c (handle, uplo_a, uplo_c, ncb, a_p, b, nrows_b, ncols_b, c, nrows_c, ncols_c, error)
 
subroutine elpa_cholesky_d (self, a, error)
 elpa_choleksy_d: class method to do a cholesky factorization for a double real matrix More...
 
subroutine elpa_choleksy_d_c (handle, a_p, error)
 
subroutine elpa_cholesky_f (self, a, error)
 elpa_choleksy_f: class method to do a cholesky factorization for a float real matrix More...
 
subroutine elpa_choleksy_f_c (handle, a_p, error)
 
subroutine elpa_cholesky_dc (self, a, error)
 elpa_choleksy_d: class method to do a cholesky factorization for a double complex matrix More...
 
subroutine elpa_choleksy_dc_c (handle, a_p, error)
 
subroutine elpa_cholesky_fc (self, a, error)
 elpa_choleksy_fc: class method to do a cholesky factorization for a float complex matrix More...
 
subroutine elpa_choleksy_fc_c (handle, a_p, error)
 
subroutine elpa_invert_trm_d (self, a, error)
 elpa_invert_trm_d: class method to invert a triangular double real matrix More...
 
subroutine elpa_invert_trm_d_c (handle, a_p, error)
 
subroutine elpa_invert_trm_f (self, a, error)
 elpa_invert_trm_f: class method to invert a triangular float real matrix More...
 
subroutine elpa_invert_trm_f_c (handle, a_p, error)
 
subroutine elpa_invert_trm_dc (self, a, error)
 elpa_invert_trm_dc: class method to invert a triangular double complex matrix More...
 
subroutine elpa_invert_trm_dc_c (handle, a_p, error)
 
subroutine elpa_invert_trm_fc (self, a, error)
 elpa_invert_trm_fc: class method to invert a triangular float complex matrix More...
 
subroutine elpa_invert_trm_fc_c (handle, a_p, error)
 
subroutine elpa_solve_tridiagonal_d (self, d, e, q, error)
 elpa_solve_tridiagonal_d: class method to solve the eigenvalue problem for a double real tridiagonal matrix a More...
 
subroutine elpa_solve_tridiagonal_f (self, d, e, q, error)
 elpa_solve_tridiagonal_f: class method to solve the eigenvalue problem for a float real tridiagonal matrix a More...
 
subroutine elpa_destroy (self)
 function to destroy an elpa object Parameters More...
 
class(elpa_autotune_t) function, pointer elpa_autotune_setup (self, level, domain, error)
 function to setup the ELPA autotuning and create the autotune object Parameters More...
 
type(c_ptr) function elpa_autotune_setup_c (handle, level, domain, error)
 
logical function elpa_autotune_step (self, tune_state)
 function to do an autotunig step Parameters More...
 
integer(kind=c_int) function elpa_autotune_step_c (handle, autotune_handle)
 
subroutine elpa_autotune_set_best (self, tune_state)
 function to set the up-to-know best options of the autotuning Parameters More...
 
subroutine elpa_autotune_set_best_c (handle, autotune_handle)
 

Detailed Description

Fortran module which provides the actual implementation of the API. Do not use directly! Use the module "elpa".

Function/Subroutine Documentation

◆ elpa_associate_int()

integer(kind=c_int) function, pointer elpa_impl::elpa_associate_int ( class(elpa_impl_t self,
character(*), intent(in)  name 
)
private

function to associate a pointer with an integer value Parameters

Parameters
selfclass(elpa_impl_t) the allocated ELPA object
namestring: the name of the entry
Returns
value integer, pointer: the value for the entry

◆ elpa_autotune_impl_deallocate_c()

subroutine elpa_impl::elpa_autotune_impl_deallocate_c ( type(c_ptr), value  autotune_handle)
private

◆ elpa_autotune_set_best()

subroutine elpa_impl::elpa_autotune_set_best ( class(elpa_impl_t), intent(inout)  self,
class(elpa_autotune_t), intent(in), target  tune_state 
)
private

function to set the up-to-know best options of the autotuning Parameters

Parameters
selfclass(elpa_impl_t) the allocated ELPA object
tune_stateclass(elpa_autotune_t): the autotuning object

◆ elpa_autotune_set_best_c()

subroutine elpa_impl::elpa_autotune_set_best_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  autotune_handle 
)
private

◆ elpa_autotune_setup()

class(elpa_autotune_t) function, pointer elpa_impl::elpa_autotune_setup ( class(elpa_impl_t), intent(inout), target  self,
integer, intent(in)  level,
integer, intent(in)  domain,
integer(kind=c_int), optional  error 
)
private

function to setup the ELPA autotuning and create the autotune object Parameters

Parameters
selfthe allocated ELPA object
levelinteger: the "thoroughness" of the planed autotuning
domaininteger: the domain (real/complex) which should be tuned
Returns
tune_state the created autotuning object

◆ elpa_autotune_setup_c()

type(c_ptr) function elpa_impl::elpa_autotune_setup_c ( type(c_ptr), intent(in), value  handle,
integer(kind=c_int), intent(in), value  level,
integer(kind=c_int), intent(in), value  domain,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_autotune_step()

logical function elpa_impl::elpa_autotune_step ( class(elpa_impl_t), intent(inout)  self,
class(elpa_autotune_t), intent(inout), target  tune_state 
)
private

function to do an autotunig step Parameters

Parameters
selfclass(elpa_impl_t) the allocated ELPA object
tune_stateclass(elpa_autotune_t): the autotuning object
Returns
unfinished logical: describes the state of the autotuning (completed/uncompleted)

◆ elpa_autotune_step_c()

integer(kind=c_int) function elpa_impl::elpa_autotune_step_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  autotune_handle 
)
private

◆ elpa_can_set()

integer function elpa_impl::elpa_can_set ( class(elpa_impl_t self,
character(*), intent(in)  name,
integer(kind=c_int), intent(in)  value 
)
private

function to check whether a key/value pair can be set Parameters

Parameters
selfclass(elpa_impl_t) the allocated ELPA object
namestring, the key
valueinteger, value
Returns
error integer, error code

◆ elpa_choleksy_d_c()

subroutine elpa_impl::elpa_choleksy_d_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_choleksy_dc_c()

subroutine elpa_impl::elpa_choleksy_dc_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_choleksy_f_c()

subroutine elpa_impl::elpa_choleksy_f_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_choleksy_fc_c()

subroutine elpa_impl::elpa_choleksy_fc_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_cholesky_d()

subroutine elpa_impl::elpa_cholesky_d ( class(elpa_impl_t self,
real(kind=rk8), dimension(self%local_nrows,*)  a,
integer, optional  error 
)
private

elpa_choleksy_d: class method to do a cholesky factorization for a double real matrix

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_cholesky_dc()

subroutine elpa_impl::elpa_cholesky_dc ( class(elpa_impl_t self,
complex(kind=ck8), dimension(self%local_nrows,*)  a,
integer, optional  error 
)
private

elpa_choleksy_d: class method to do a cholesky factorization for a double complex matrix

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_cholesky_f()

subroutine elpa_impl::elpa_cholesky_f ( class(elpa_impl_t self,
real(kind=rk4), dimension(self%local_nrows,*)  a,
integer, optional  error 
)
private

elpa_choleksy_f: class method to do a cholesky factorization for a float real matrix

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_cholesky_fc()

subroutine elpa_impl::elpa_cholesky_fc ( class(elpa_impl_t self,
complex(kind=c_float_complex), dimension(self%local_nrows,*)  a,
integer, optional  error 
)
private

elpa_choleksy_fc: class method to do a cholesky factorization for a float complex matrix

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_destroy()

subroutine elpa_impl::elpa_destroy ( class(elpa_impl_t self)
private

function to destroy an elpa object Parameters

Parameters
selfclass(elpa_impl_t) the allocated ELPA object

◆ elpa_eigenvalues_d()

subroutine elpa_impl::elpa_eigenvalues_d ( class(elpa_impl_t self,
real(kind=c_double), dimension(self%local_nrows, *)  a,
real(kind=c_double), dimension(self%na)  ev,
integer, optional  error 
)
private

elpa_eigenvalues_d: class method to solve the eigenvalue problem for double real matrices

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_d_c()

subroutine elpa_impl::elpa_eigenvalues_d_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
type(c_ptr), intent(in), value  ev_p,
integer(kind=c_int), intent(in)  error 
)
private

◆ elpa_eigenvalues_dc()

subroutine elpa_impl::elpa_eigenvalues_dc ( class(elpa_impl_t self,
complex(kind=c_double_complex), dimension(self%local_nrows, *)  a,
real(kind=c_double), dimension(self%na)  ev,
integer, optional  error 
)
private

elpa_eigenvalues_dc: class method to solve the eigenvalue problem for double complex matrices

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_dc_c()

subroutine elpa_impl::elpa_eigenvalues_dc_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
type(c_ptr), intent(in), value  ev_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_eigenvalues_f()

subroutine elpa_impl::elpa_eigenvalues_f ( class(elpa_impl_t self,
real(kind=c_float), dimension(self%local_nrows, *)  a,
real(kind=c_float), dimension(self%na)  ev,
integer, optional  error 
)
private

elpa_eigenvectors_f: class method to solve the eigenvalue problem for float real matrices

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_f_c()

subroutine elpa_impl::elpa_eigenvalues_f_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
type(c_ptr), intent(in), value  ev_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_eigenvalues_fc()

subroutine elpa_impl::elpa_eigenvalues_fc ( class(elpa_impl_t self,
complex(kind=c_float_complex), dimension(self%local_nrows, *)  a,
real(kind=c_float), dimension(self%na)  ev,
integer, optional  error 
)
private

elpa_eigenvalues_fc: class method to solve the eigenvalue problem for float complex matrices

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_fc_c()

subroutine elpa_impl::elpa_eigenvalues_fc_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
type(c_ptr), intent(in), value  ev_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_eigenvectors_d()

subroutine elpa_impl::elpa_eigenvectors_d ( class(elpa_impl_t self,
real(kind=c_double), dimension(self%local_nrows, *)  a,
real(kind=c_double), dimension(self%na)  ev,
real(kind=c_double), dimension(self%local_nrows, *)  q,
integer, optional  error 
)
private

elpa_eigenvectors_d: class method to solve the eigenvalue problem for double real matrices

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_d_c()

subroutine elpa_impl::elpa_eigenvectors_d_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
type(c_ptr), intent(in), value  ev_p,
type(c_ptr), intent(in), value  q_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_eigenvectors_dc()

subroutine elpa_impl::elpa_eigenvectors_dc ( class(elpa_impl_t self,
complex(kind=c_double_complex), dimension(self%local_nrows, *)  a,
real(kind=c_double), dimension(self%na)  ev,
complex(kind=c_double_complex), dimension(self%local_nrows, *)  q,
integer, optional  error 
)
private

elpa_eigenvectors_dc: class method to solve the eigenvalue problem for double complex matrices

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_dc_c()

subroutine elpa_impl::elpa_eigenvectors_dc_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
type(c_ptr), intent(in), value  ev_p,
type(c_ptr), intent(in), value  q_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_eigenvectors_f()

subroutine elpa_impl::elpa_eigenvectors_f ( class(elpa_impl_t self,
real(kind=c_float), dimension(self%local_nrows, *)  a,
real(kind=c_float), dimension(self%na)  ev,
real(kind=c_float), dimension(self%local_nrows, *)  q,
integer, optional  error 
)
private

elpa_eigenvectors_f: class method to solve the eigenvalue problem for float real matrices

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_f_c()

subroutine elpa_impl::elpa_eigenvectors_f_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
type(c_ptr), intent(in), value  ev_p,
type(c_ptr), intent(in), value  q_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_eigenvectors_fc()

subroutine elpa_impl::elpa_eigenvectors_fc ( class(elpa_impl_t self,
complex(kind=c_float_complex), dimension(self%local_nrows, *)  a,
real(kind=c_float), dimension(self%na)  ev,
complex(kind=c_float_complex), dimension(self%local_nrows, *)  q,
integer, optional  error 
)
private

elpa_eigenvectors_fc: class method to solve the eigenvalue problem for float complex matrices

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_fc_c()

subroutine elpa_impl::elpa_eigenvectors_fc_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
type(c_ptr), intent(in), value  ev_p,
type(c_ptr), intent(in), value  q_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_get_double_c()

subroutine elpa_impl::elpa_get_double_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  name_p,
real(kind=c_double)  value,
integer(kind=c_int), intent(inout), optional  error 
)
private

◆ elpa_get_integer_c()

subroutine elpa_impl::elpa_get_integer_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  name_p,
integer(kind=c_int)  value,
integer(kind=c_int), intent(inout)  error 
)
private

◆ elpa_get_time()

real(kind=c_double) function elpa_impl::elpa_get_time ( class(elpa_impl_t), intent(in)  self,
character(len=*), intent(in), optional  name1,
character(len=*), intent(in), optional  name2,
character(len=*), intent(in), optional  name3,
character(len=*), intent(in), optional  name4,
character(len=*), intent(in), optional  name5,
character(len=*), intent(in), optional  name6 
)
private

function to querry the timing information at a certain level Parameters

Parameters
selfclass(elpa_impl_t) the allocated ELPA object
name1.. name6 string: the string identifier for the timer region. at the moment 6 nested levels can be queried
Returns
s double: the timer metric for the region. Might be seconds, or any other supported metric

◆ elpa_hermitian_multiply_d()

subroutine elpa_impl::elpa_hermitian_multiply_d ( class(elpa_impl_t self,
character*1  uplo_a,
character*1  uplo_c,
integer(kind=c_int), intent(in)  ncb,
real(kind=c_double), dimension(self%local_nrows,self%local_ncols)  a,
real(kind=c_double), dimension(nrows_b,ncols_b)  b,
integer(kind=c_int), intent(in)  nrows_b,
integer(kind=c_int), intent(in)  ncols_b,
real(kind=c_double), dimension(nrows_c,ncols_c)  c,
integer(kind=c_int), intent(in)  nrows_c,
integer(kind=c_int), intent(in)  ncols_c,
integer, optional  error 
)
private

elpa_hermitian_multiply_d: class method to perform C : = A**T * B for double real matrices 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_d_c()

subroutine elpa_impl::elpa_hermitian_multiply_d_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,
real(kind=c_double), dimension(nrows_b,ncols_b)  b,
integer(kind=c_int), value  nrows_b,
integer(kind=c_int), value  ncols_b,
real(kind=c_double), dimension(nrows_c,ncols_c)  c,
integer(kind=c_int), value  nrows_c,
integer(kind=c_int), value  ncols_c,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_hermitian_multiply_dc()

subroutine elpa_impl::elpa_hermitian_multiply_dc ( class(elpa_impl_t self,
character*1  uplo_a,
character*1  uplo_c,
integer(kind=c_int), intent(in)  ncb,
complex(kind=c_double_complex), dimension(self%local_nrows,self%local_ncols)  a,
complex(kind=c_double_complex), dimension(nrows_b,ncols_b)  b,
integer(kind=c_int), intent(in)  nrows_b,
integer(kind=c_int), intent(in)  ncols_b,
complex(kind=c_double_complex), dimension(nrows_c,ncols_c)  c,
integer(kind=c_int), intent(in)  nrows_c,
integer(kind=c_int), intent(in)  ncols_c,
integer, optional  error 
)
private

elpa_hermitian_multiply_dc: class method to perform C : = A**H * B for double complex matrices 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
self%local_nrowsnumber of rows of local (sub) matrix a, set with class method set("local_nows",value)
self%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, returns an error code, which can be queried with elpa_strerr

◆ elpa_hermitian_multiply_dc_c()

subroutine elpa_impl::elpa_hermitian_multiply_dc_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,
complex(kind=c_double_complex), dimension(nrows_b,ncols_b)  b,
integer(kind=c_int), value  nrows_b,
integer(kind=c_int), value  ncols_b,
complex(kind=c_double_complex), dimension(nrows_c,ncols_c)  c,
integer(kind=c_int), value  nrows_c,
integer(kind=c_int), value  ncols_c,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_hermitian_multiply_f()

subroutine elpa_impl::elpa_hermitian_multiply_f ( class(elpa_impl_t self,
character*1  uplo_a,
character*1  uplo_c,
integer(kind=c_int), intent(in)  ncb,
real(kind=c_float), dimension(self%local_nrows,*)  a,
real(kind=c_float), dimension(self%local_nrows,*)  b,
integer(kind=c_int), intent(in)  nrows_b,
integer(kind=c_int), intent(in)  ncols_b,
real(kind=c_float), dimension(nrows_c,*)  c,
integer(kind=c_int), intent(in)  nrows_c,
integer(kind=c_int), intent(in)  ncols_c,
integer, optional  error 
)
private

elpa_hermitian_multiply_f: class method to perform C : = A**T * B for float real matrices 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
self%local_nrowsnumber of rows of local (sub) matrix a, set with class method set("local_nrows",value)
self%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, returns an error code, which can be queried with elpa_strerr

◆ elpa_hermitian_multiply_f_c()

subroutine elpa_impl::elpa_hermitian_multiply_f_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,
real(kind=c_float), dimension(nrows_b,*)  b,
integer(kind=c_int), value  nrows_b,
integer(kind=c_int), value  ncols_b,
real(kind=c_float), dimension(nrows_c,*)  c,
integer(kind=c_int), value  nrows_c,
integer(kind=c_int), value  ncols_c,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_hermitian_multiply_fc()

subroutine elpa_impl::elpa_hermitian_multiply_fc ( class(elpa_impl_t self,
character*1  uplo_a,
character*1  uplo_c,
integer(kind=c_int), intent(in)  ncb,
complex(kind=c_float_complex), dimension(self%local_nrows,*)  a,
complex(kind=c_float_complex), dimension(nrows_b,*)  b,
integer(kind=c_int), intent(in)  nrows_b,
integer(kind=c_int), intent(in)  ncols_b,
complex(kind=c_float_complex), dimension(nrows_c,*)  c,
integer(kind=c_int), intent(in)  nrows_c,
integer(kind=c_int), intent(in)  ncols_c,
integer, optional  error 
)
private

elpa_hermitian_multiply_fc: class method to perform C : = A**H * B for float complex matrices 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
self%local_nrowsnumber of rows of local (sub) matrix a, set with class method set("local_nrows",value)
self%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, returns an error code, which can be queried with elpa_strerr

◆ elpa_hermitian_multiply_fc_c()

subroutine elpa_impl::elpa_hermitian_multiply_fc_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,
complex(kind=c_float_complex), dimension(nrows_b,*)  b,
integer(kind=c_int), value  nrows_b,
integer(kind=c_int), value  ncols_b,
complex(kind=c_float_complex), dimension(nrows_c,*)  c,
integer(kind=c_int), value  nrows_c,
integer(kind=c_int), value  ncols_c,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_impl_allocate()

type(elpa_impl_t) function, pointer, public elpa_impl::elpa_impl_allocate ( integer, optional  error)

the implementation of the generic methods

function to allocate an ELPA object Parameters

Parameters
errorinteger, optional to get an error code
Returns
obj class(elpa_impl_t) allocated ELPA object

◆ elpa_impl_allocate_c()

type(c_ptr) function elpa_impl::elpa_impl_allocate_c ( integer(kind=c_int)  error)
private

◆ elpa_impl_deallocate_c()

subroutine elpa_impl::elpa_impl_deallocate_c ( type(c_ptr), value  handle)
private

◆ elpa_invert_trm_d()

subroutine elpa_impl::elpa_invert_trm_d ( class(elpa_impl_t self,
real(kind=c_double), dimension(self%local_nrows,*)  a,
integer, optional  error 
)
private

elpa_invert_trm_d: class method to invert a triangular double real matrix

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_d_c()

subroutine elpa_impl::elpa_invert_trm_d_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_invert_trm_dc()

subroutine elpa_impl::elpa_invert_trm_dc ( class(elpa_impl_t self,
complex(kind=ck8), dimension(self%local_nrows,*)  a,
integer, optional  error 
)
private

elpa_invert_trm_dc: class method to invert a triangular double complex matrix

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_dc_c()

subroutine elpa_impl::elpa_invert_trm_dc_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_invert_trm_f()

subroutine elpa_impl::elpa_invert_trm_f ( class(elpa_impl_t self,
real(kind=c_float), dimension(self%local_nrows,*)  a,
integer, optional  error 
)
private

elpa_invert_trm_f: class method to invert a triangular float real matrix

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_f_c()

subroutine elpa_impl::elpa_invert_trm_f_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_invert_trm_fc()

subroutine elpa_impl::elpa_invert_trm_fc ( class(elpa_impl_t self,
complex(kind=c_float_complex), dimension(self%local_nrows,*)  a,
integer, optional  error 
)
private

elpa_invert_trm_fc: class method to invert a triangular float complex matrix

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_fc_c()

subroutine elpa_impl::elpa_invert_trm_fc_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  a_p,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_is_set()

integer function elpa_impl::elpa_is_set ( class(elpa_impl_t self,
character(*), intent(in)  name 
)
private

function to check whether a key/value pair is set Parameters

Parameters
selfclass(elpa_impl_t) the allocated ELPA object
namestring, the key
Returns
state integer, the state of the key/value pair

◆ elpa_print_times()

subroutine elpa_impl::elpa_print_times ( class(elpa_impl_t), intent(in)  self,
character(len=*), intent(in), optional  name1,
character(len=*), intent(in), optional  name2,
character(len=*), intent(in), optional  name3,
character(len=*), intent(in), optional  name4 
)
private

function to print the timing tree below at a certain level Parameters

Parameters
selfclass(elpa_impl_t) the allocated ELPA object
name1.. name6 string: the string identifier for the timer region. at the moment 4 nested levels can be specified

◆ elpa_set_double_c()

subroutine elpa_impl::elpa_set_double_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  name_p,
real(kind=c_double), intent(in), value  value,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_set_integer_c()

subroutine elpa_impl::elpa_set_integer_c ( type(c_ptr), intent(in), value  handle,
type(c_ptr), intent(in), value  name_p,
integer(kind=c_int), intent(in), value  value,
integer(kind=c_int), intent(in), optional  error 
)
private

◆ elpa_setup()

integer function elpa_impl::elpa_setup ( class(elpa_impl_t), intent(inout)  self)
private

function to setup an ELPA object and to store the MPI communicators internally Parameters

Parameters
selfclass(elpa_impl_t), the allocated ELPA object
Returns
error integer, the error code

◆ elpa_setup_c()

integer(kind=c_int) function elpa_impl::elpa_setup_c ( type(c_ptr), intent(in), value  handle)
private

◆ elpa_solve_tridiagonal_d()

subroutine elpa_impl::elpa_solve_tridiagonal_d ( class(elpa_impl_t self,
real(kind=rk8), dimension(self%na)  d,
real(kind=rk8), dimension(self%na)  e,
real(kind=rk8), dimension(self%local_nrows,*)  q,
integer, optional  error 
)
private

elpa_solve_tridiagonal_d: class method to solve the eigenvalue problem for a double real 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
Todo:
e should have dimension (na - 1)

◆ elpa_solve_tridiagonal_f()

subroutine elpa_impl::elpa_solve_tridiagonal_f ( class(elpa_impl_t self,
real(kind=rk4), dimension(self%na)  d,
real(kind=rk4), dimension(self%na)  e,
real(kind=rk4), dimension(self%local_nrows,*)  q,
integer, optional  error 
)
private

elpa_solve_tridiagonal_f: class method to solve the eigenvalue problem for a float real 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
Todo:
e should have dimension (na - 1)

◆ elpa_timer_start()

subroutine elpa_impl::elpa_timer_start ( class(elpa_impl_t), intent(inout)  self,
character(len=*), intent(in)  name 
)
private

function to start the timing of a code region Parameters

Parameters
selfclass(elpa_impl_t) the allocated ELPA object
namestring: a chosen identifier name for the code region

◆ elpa_timer_stop()

subroutine elpa_impl::elpa_timer_stop ( class(elpa_impl_t), intent(inout)  self,
character(len=*), intent(in)  name 
)
private

function to stop the timing of a code region Parameters

Parameters
selfclass(elpa_impl_t) the allocated ELPA object
namestring: identifier name for the code region to stop

◆ elpa_value_to_string()

character(kind=c_char, len=elpa_index_int_value_to_strlen_c(self%index, option_name // c_null_char)) function, pointer elpa_impl::elpa_value_to_string ( class(elpa_impl_t), intent(in)  self,
character(kind=c_char, len=*), intent(in)  option_name,
integer, intent(out), optional  error 
)
private

function to convert a value to an human readable string Parameters

Parameters
selfclass(elpa_impl_t) the allocated ELPA object
option_namestring: the name of the options, whose value should be converted
errorinteger: errpr code
Returns
string string: the humanreadable string