Eigenvalue SoLvers for Petaflop-Applications (ELPA)
2017.11.001
|
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) |
Fortran module which provides the actual implementation of the API. Do not use directly! Use the module "elpa".
|
private |
function to associate a pointer with an integer value Parameters
self | class(elpa_impl_t) the allocated ELPA object |
name | string: the name of the entry |
|
private |
|
private |
function to set the up-to-know best options of the autotuning Parameters
self | class(elpa_impl_t) the allocated ELPA object |
tune_state | class(elpa_autotune_t): the autotuning object |
|
private |
|
private |
function to setup the ELPA autotuning and create the autotune object Parameters
self | the allocated ELPA object |
level | integer: the "thoroughness" of the planed autotuning |
domain | integer: the domain (real/complex) which should be tuned |
|
private |
|
private |
function to do an autotunig step Parameters
self | class(elpa_impl_t) the allocated ELPA object |
tune_state | class(elpa_autotune_t): the autotuning object |
|
private |
|
private |
function to check whether a key/value pair can be set Parameters
self | class(elpa_impl_t) the allocated ELPA object |
name | string, the key |
value | integer, value |
|
private |
|
private |
|
private |
|
private |
|
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
a | Distributed 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). |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
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
a | Distributed 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). |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
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
a | Distributed 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). |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
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
a | Distributed 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). |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
function to destroy an elpa object Parameters
self | class(elpa_impl_t) the allocated ELPA object |
|
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
a | Distributed 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). |
ev | On output: eigenvalues of a, every processor gets the complete set |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
|
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
a | Distributed 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). |
ev | On output: eigenvalues of a, every processor gets the complete set |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
|
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
a | Distributed 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). |
ev | On output: eigenvalues of a, every processor gets the complete set |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
|
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
a | Distributed 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). |
ev | On output: eigenvalues of a, every processor gets the complete set |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
|
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
a | Distributed 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). |
ev | On output: eigenvalues of a, every processor gets the complete set |
q | On 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. |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
|
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
a | Distributed 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). |
ev | On output: eigenvalues of a, every processor gets the complete set |
q | On 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. |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
|
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
a | Distributed 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). |
ev | On output: eigenvalues of a, every processor gets the complete set |
q | On 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. |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
|
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
a | Distributed 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). |
ev | On output: eigenvalues of a, every processor gets the complete set |
q | On 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. |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
|
private |
|
private |
|
private |
function to querry the timing information at a certain level Parameters
self | class(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 |
|
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
self | class(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! |
ncb | Number of columns of global matrices B and C |
a | matrix a |
local_nrows | number of rows of local (sub) matrix a, set with class method set("local_nrows",value) |
local_ncols | number of columns of local (sub) matrix a, set with class method set("local_ncols",value) |
b | matrix b |
nrows_b | number of rows of local (sub) matrix b |
ncols_b | number of columns of local (sub) matrix b |
c | matrix c |
nrows_c | number of rows of local (sub) matrix c |
ncols_c | number of columns of local (sub) matrix c |
error | optional argument, error code which can be queried with elpa_strerr |
|
private |
|
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
self | class(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! |
ncb | Number of columns of global matrices B and C |
a | matrix a |
self%local_nrows | number of rows of local (sub) matrix a, set with class method set("local_nows",value) |
self%local_ncols | number of columns of local (sub) matrix a, set with class method set("local_ncols",value) |
b | matrix b |
nrows_b | number of rows of local (sub) matrix b |
ncols_b | number of columns of local (sub) matrix b |
c | matrix c |
nrows_c | number of rows of local (sub) matrix c |
ncols_c | number of columns of local (sub) matrix c |
error | optional argument, returns an error code, which can be queried with elpa_strerr |
|
private |
|
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
self | class(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! |
ncb | Number of columns of global matrices B and C |
a | matrix a |
self%local_nrows | number of rows of local (sub) matrix a, set with class method set("local_nrows",value) |
self%local_ncols | number of columns of local (sub) matrix a, set with class method set("local_ncols",value) |
b | matrix b |
nrows_b | number of rows of local (sub) matrix b |
ncols_b | number of columns of local (sub) matrix b |
c | matrix c |
nrows_c | number of rows of local (sub) matrix c |
ncols_c | number of columns of local (sub) matrix c |
error | optional argument, returns an error code, which can be queried with elpa_strerr |
|
private |
|
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
self | class(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! |
ncb | Number of columns of global matrices B and C |
a | matrix a |
self%local_nrows | number of rows of local (sub) matrix a, set with class method set("local_nrows",value) |
self%local_ncols | number of columns of local (sub) matrix a, set with class method set("local_ncols",value) |
b | matrix b |
nrows_b | number of rows of local (sub) matrix b |
ncols_b | number of columns of local (sub) matrix b |
c | matrix c |
nrows_c | number of rows of local (sub) matrix c |
ncols_c | number of columns of local (sub) matrix c |
error | optional argument, returns an error code, which can be queried with elpa_strerr |
|
private |
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
error | integer, optional to get an error code |
|
private |
|
private |
|
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
a | Distributed 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). |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
|
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
a | Distributed 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). |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
|
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
a | Distributed 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). |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
|
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
a | Distributed 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). |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
|
private |
function to check whether a key/value pair is set Parameters
self | class(elpa_impl_t) the allocated ELPA object |
name | string, the key |
|
private |
function to print the timing tree below at a certain level Parameters
self | class(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 |
|
private |
|
private |
|
private |
function to setup an ELPA object and to store the MPI communicators internally Parameters
self | class(elpa_impl_t), the allocated ELPA object |
|
private |
|
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
d | array d on input diagonal elements of tridiagonal matrix, on output the eigenvalues in ascending order |
e | array e on input subdiagonal elements of matrix, on exit destroyed |
q | matrix on exit : contains the eigenvectors |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
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
d | array d on input diagonal elements of tridiagonal matrix, on output the eigenvalues in ascending order |
e | array e on input subdiagonal elements of matrix, on exit destroyed |
q | matrix on exit : contains the eigenvectors |
error | integer, optional: returns an error code, which can be queried with elpa_strerr |
|
private |
function to start the timing of a code region Parameters
self | class(elpa_impl_t) the allocated ELPA object |
name | string: a chosen identifier name for the code region |
|
private |
function to stop the timing of a code region Parameters
self | class(elpa_impl_t) the allocated ELPA object |
name | string: identifier name for the code region to stop |
|
private |
function to convert a value to an human readable string Parameters
self | class(elpa_impl_t) the allocated ELPA object |
option_name | string: the name of the options, whose value should be converted |
error | integer: errpr code |