Commit fdb6d4f1 authored by Andreas Marek's avatar Andreas Marek
Browse files

ELPA 1stage and 2stage can work with device pointers

parent b48ea9a0
......@@ -605,7 +605,15 @@ dist_man_MANS = \
man/elpa_set.3 \
man/elpa_setup.3 \
man/elpa_eigenvalues.3 \
man/elpa_eigenvalues_double.3 \
man/elpa_eigenvalues_float.3 \
man/elpa_eigenvalues_double_complex.3 \
man/elpa_eigenvalues_float_complex.3 \
man/elpa_eigenvectors.3 \
man/elpa_eigenvectors_double.3 \
man/elpa_eigenvectors_float.3 \
man/elpa_eigenvectors_double_complex.3 \
man/elpa_eigenvectors_float_complex.3 \
man/elpa_skew_eigenvalues.3 \
man/elpa_skew_eigenvectors.3 \
man/elpa_generalized_eigenvectors.3 \
......@@ -662,8 +670,21 @@ libelpatest@SUFFIX@_la_SOURCES = \
test/shared/test_blacs_infrastructure.F90 \
test/shared/test_prepare_matrix.F90 \
test/shared/test_analytic.F90 \
test/shared/GPU/test_gpu_vendor_agnostic_layer.F90 \
test/shared/test_output_type.F90
if WITH_NVIDIA_GPU_VERSION
libelpatest@SUFFIX@_la_SOURCES += \
test/shared/GPU/CUDA/test_cuda.F90 \
test/shared/GPU/CUDA/test_cudaFunctions.cu
endif
if WITH_AMD_GPU_VERSION
libelpatest@SUFFIX@_la_SOURCES += \
test/shared/GPU/ROCm/test_hip.F90 \
test/shared/GPU/ROCm/test_rocmFunctions.cpp
endif
if WITH_SCALAPACK_TESTS
libelpatest@SUFFIX@_la_SOURCES += \
test/shared/test_scalapack.F90
......
......@@ -31,6 +31,12 @@ gpu_id_flag = {
1: "-DTEST_GPU_SET_ID=1",
}
device_pointer_flag = {
0: "-DTEST_GPU_DEVICE_POINTER_API=0",
1: "-DTEST_GPU_DEVICE_POINTER_API=1",
}
matrix_flag = {
"random": "-DTEST_MATRIX_RANDOM",
"analytic": "-DTEST_MATRIX_ANALYTIC",
......@@ -68,10 +74,11 @@ explicit_name_flag = {
"implicit": ""
}
for lang, m, g, gid, q, t, p, d, s, lay, spl, api_name in product(sorted(language_flag.keys()),
for lang, m, g, gid, deviceptr, q, t, p, d, s, lay, spl, api_name in product(sorted(language_flag.keys()),
sorted(matrix_flag.keys()),
sorted(gpu_flag.keys()),
sorted(gpu_id_flag.keys()),
sorted(device_pointer_flag.keys()),
sorted(qr_flag.keys()),
sorted(test_type_flag.keys()),
sorted(prec_flag.keys()),
......@@ -85,9 +92,35 @@ for lang, m, g, gid, q, t, p, d, s, lay, spl, api_name in product(sorted(languag
if gid == 1 and (g == "GPU_OFF" ):
continue
if deviceptr == 1 and (gid == 0 ):
continue
if deviceptr == 1 and (api_name != "explicit"):
continue
if lay == "all_layouts" and (api_name == "explicit"):
continue
if api_name == "explicit" and (m != "random"):
continue
if gid == 1 and (m != "random"):
continue
if deviceptr == 1 and (m != "random"):
continue
if lang == "C" and (m == "analytic" or m == "toeplitz" or m == "frank" or lay == "all_layouts"):
continue
if lang == "C" and (api_name == "explicit"):
continue
if api_name == "explicit" and (t != "eigenvectors"):
continue
# not implemented in the test.c file yet
if lang == "C" and (t == "cholesky" or t == "hermitian_multiply" or q == 1):
continue
......@@ -203,12 +236,21 @@ for lang, m, g, gid, q, t, p, d, s, lay, spl, api_name in product(sorted(languag
raise Exception("Oh no!")
endifs += 1
name = "validate{langsuffix}_{d}_{p}_{t}_{s}{kernelsuffix}_{gpusuffix}{gpuidsuffix}{qrsuffix}{m}{layoutsuffix}{spl}{api_name}".format(
if (g == "NVIDIA_GPU_ON" or g == "INTEL_GPU_ON" or g == "AMD_GPU_ON"):
combined_suffix="gpu_"
if (gid):
combined_suffix="gpu_id_"
if (deviceptr):
combined_suffix="gpu_api_"
else:
combined_suffix=""
name = "validate{langsuffix}_{d}_{p}_{t}_{s}{kernelsuffix}_{appended_suffix}{qrsuffix}{m}{layoutsuffix}{spl}{api_name}".format(
langsuffix=language_flag[lang],
d=d, p=p, t=t, s=s,
kernelsuffix="" if kernel == "nokernel" else "_" + kernel,
gpusuffix="gpu_" if (g == "NVIDIA_GPU_ON" or g == "INTEL_GPU_ON" or g == "AMD_GPU_ON") else "",
gpuidsuffix="set_gpu_id_" if gid else "",
appended_suffix=combined_suffix,
qrsuffix="qr_" if q else "",
m=m,
layoutsuffix="_all_layouts" if lay == "all_layouts" else "",
......@@ -268,7 +310,9 @@ for lang, m, g, gid, q, t, p, d, s, lay, spl, api_name in product(sorted(languag
solver_flag[s],
gpu_flag[g],
gpu_id_flag[gid],
device_pointer_flag[deviceptr],
qr_flag[q],
explicit_name_flag[api_name],
matrix_flag[m]] + extra_flags))
print("endif\n" * endifs)
......@@ -311,7 +355,9 @@ for lang, m, g, gid, q, t, p, d, s, lay, spl, api_name in product(sorted(languag
solver_flag[s],
gpu_flag[g],
gpu_id_flag[gid],
device_pointer_flag[deviceptr],
qr_flag[q],
explicit_name_flag[api_name],
matrix_flag[m]] + extra_flags))
print("endif\n" * endifs)
......
.TH "elpa_eigenvalues_double" 3 "Wed Sep 1 2021" "ELPA" \" -*- nroff -*-
.ad l
.nh
.SH NAME
elpa_eigenvalues_double \- computes the eigenvalues of a real double-precision symmetric matrix
.br
.SH SYNOPSIS
.br
.SS FORTRAN INTERFACE
use elpa
.br
class(elpa_t), pointer :: elpa
.br
.RI "call elpa%\fBeigenvalues_double\fP (a, ev, error)"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.RI "class(elpa_t) :: \fBelpa\fP ! returns an instance of the ELPA object"
.br
.TP
.RI "datatype :: \fBa\fP"
The matrix a for which the eigenvalues should be computed. The dimensions of matrix a must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The datatype of the matrix must be real(kind=c_double). The matrix has to be symmetric this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer of type "type(c_ptr) to a matrix a on the device memory.
.TP
.RI "datatype :: \fBev\fP"
The vector ev where the eigenvalues will be stored in \fIascending\fP order. The datatype of the vector ev must be "real(kind=c_double)". In case of a GPU build \fBev\fP can be a device pointer of type "type(c_ptr) to the vector of eigenvalues in the device memory
.
.TP
.RI "integer, optional :: \fBerror\fP"
The return error code of the function. Should be "ELPA_OK". The error code can be querried with the function \fBelpa_strerr\fP(3)
.br
.SS C INTERFACE
#include <elpa/elpa.h>
.br
elpa_t handle;
.br
.RI "void \fBelpa_eigenvalues_double\fP(\fBelpa_t\fP handle, \fBdatatype\fP *a, \fBdatatype\fP *ev, \fBint\fP *error);"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.TP
.RI "elpa_t \fBhandle\fP;"
The handle to the ELPA object
.TP
.RI "datatype *\fBa\fP;"
The matrix a for which the eigenvalues should be computed. The dimensions of the matrix must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The \fBdatatype\fP must be "double". The matrix has to be symmetric, this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer to a matrix a on the device memory.
.TP
.RI "datatype *\fBev\fP;"
The storage for the computed eigenvalues. Eigenvalues will be stored in \fIascendig\fP order. The \fBdatatype\fP must be "double". In case of a GPU build \fBev\fP can be a device pointer to the vectors of eigenvalues in the device memory.
.TP
.RI "int *\fBerror\fP;"
The error code of the function. Should be "ELPA_OK". The error codes can be querried with \fBelpa_strerr\fP(3)
.SH DESCRIPTION
Compute the eigenvalues of a double precision real symmetric matrix. The functions \fBelpa_init\fP(3), \fBelpa_allocate\fP(3), \fBelpa_set\fP(3), and \fBelpa_setup\fP(3) must be called \fIBEFORE\fP \fBelpa_eigenvalues\fP can be called.
.br
.SH "SEE ALSO"
.br
\fBelpa2_print_kernels\fP(1) \fBelpa_init\fP(3) \fBelpa_allocate\fP(3) \fBelpa_set\fP(3) \fBelpa_setup\fP(3) \fBelpa_strerr\fP(3) \fBelpa_skew_eigenvalues\fP(3) \fBelpa_eigenvectors\fP(3) \fBelpa_skew_eigenvectors\fP(3) \fBelpa_cholesky\fP(3) \fBelpa_invert_triangular\fP(3) \fBelpa_solve_tridiagonal\fP(3) \fBelpa_eigenvalues\fP(3) \fBelpa_uninit\fP(3) \fBelpa_deallocate\fP(3)
.TH "elpa_eigenvalues_double_complex" 3 "Wed Sep 1 2021" "ELPA" \" -*- nroff -*-
.ad l
.nh
.SH NAME
elpa_eigenvalues_double_complex \- computes the eigenvalues of a complex double-precision hermitian matrix
.br
.SH SYNOPSIS
.br
.SS FORTRAN INTERFACE
use elpa
.br
class(elpa_t), pointer :: elpa
.br
.RI "call elpa%\fBeigenvalues_double_complex\fP (a, ev, error)"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.RI "class(elpa_t) :: \fBelpa\fP ! returns an instance of the ELPA object"
.br
.TP
.RI "datatype :: \fBa\fP"
The matrix a for which the eigenvalues should be computed. The dimensions of matrix a must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The datatype of the matrix must be complex(kind=c_double_complex). The matrix has to be hermitian this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer of type "type(c_ptr) to a matrix a on the device memory.
.TP
.RI "datatype :: \fBev\fP"
The vector ev where the eigenvalues will be stored in \fIascending\fP order. The datatype of the vector ev must be "real(kind=c_double)". In case of a GPU build \fBev\fP can be a device pointer of type "type(c_ptr) to the vector of eigenvalues in the device memory
.
.TP
.RI "integer, optional :: \fBerror\fP"
The return error code of the function. Should be "ELPA_OK". The error code can be querried with the function \fBelpa_strerr\fP(3)
.br
.SS C INTERFACE
#include <elpa/elpa.h>
.br
elpa_t handle;
.br
.RI "void \fBelpa_eigenvalues_double_complex\fP(\fBelpa_t\fP handle, \fBdatatype\fP *a, \fBdatatype\fP *ev, \fBint\fP *error);"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.TP
.RI "elpa_t \fBhandle\fP;"
The handle to the ELPA object
.TP
.RI "datatype *\fBa\fP;"
The matrix a for which the eigenvalues should be computed. The dimensions of the matrix must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The \fBdatatype\fP must be "double complex". The matrix has to be symmetric, this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer to a matrix a on the device memory.
.TP
.RI "datatype *\fBev\fP;"
The storage for the computed eigenvalues. Eigenvalues will be stored in \fIascendig\fP order. The \fBdatatype\fP must be "double". In case of a GPU build \fBev\fP can be a device pointer to the vectors of eigenvalues in the device memory.
.TP
.RI "int *\fBerror\fP;"
The error code of the function. Should be "ELPA_OK". The error codes can be querried with \fBelpa_strerr\fP(3)
.SH DESCRIPTION
Compute the eigenvalues of a double precision complex hermitian matrix. The functions \fBelpa_init\fP(3), \fBelpa_allocate\fP(3), \fBelpa_set\fP(3), and \fBelpa_setup\fP(3) must be called \fIBEFORE\fP \fBelpa_eigenvalues\fP can be called.
.br
.SH "SEE ALSO"
.br
\fBelpa2_print_kernels\fP(1) \fBelpa_init\fP(3) \fBelpa_allocate\fP(3) \fBelpa_set\fP(3) \fBelpa_setup\fP(3) \fBelpa_strerr\fP(3) \fBelpa_skew_eigenvalues\fP(3) \fBelpa_eigenvectors\fP(3) \fBelpa_skew_eigenvectors\fP(3) \fBelpa_cholesky\fP(3) \fBelpa_invert_triangular\fP(3) \fBelpa_solve_tridiagonal\fP(3) \fBelpa_eigenvalues\fP(3) \fBelpa_uninit\fP(3) \fBelpa_deallocate\fP(3)
.TH "elpa_eigenvalues_float" 3 "Wed Sep 1 2021" "ELPA" \" -*- nroff -*-
.ad l
.nh
.SH NAME
elpa_eigenvalues_float \- computes the eigenvalues of a real single-precision symmetric matrix
.br
.SH SYNOPSIS
.br
.SS FORTRAN INTERFACE
use elpa
.br
class(elpa_t), pointer :: elpa
.br
.RI "call elpa%\fBeigenvalues_float\fP (a, ev, error)"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.RI "class(elpa_t) :: \fBelpa\fP ! returns an instance of the ELPA object"
.br
.TP
.RI "datatype :: \fBa\fP"
The matrix a for which the eigenvalues should be computed. The dimensions of matrix a must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The datatype of the matrix must be real(kind=c_float). The matrix has to be symmetric this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer of type "type(c_ptr) to a matrix a on the device memory.
.TP
.RI "datatype :: \fBev\fP"
The vector ev where the eigenvalues will be stored in \fIascending\fP order. The datatype of the vector ev must be "real(kind=c_float)". In case of a GPU build \fBev\fP can be a device pointer of type "type(c_ptr) to the vector of eigenvalues in the device memory
.
.TP
.RI "integer, optional :: \fBerror\fP"
The return error code of the function. Should be "ELPA_OK". The error code can be querried with the function \fBelpa_strerr\fP(3)
.br
.SS C INTERFACE
#include <elpa/elpa.h>
.br
elpa_t handle;
.br
.RI "void \fBelpa_eigenvalues_float\fP(\fBelpa_t\fP handle, \fBdatatype\fP *a, \fBdatatype\fP *ev, \fBint\fP *error);"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.TP
.RI "elpa_t \fBhandle\fP;"
The handle to the ELPA object
.TP
.RI "datatype *\fBa\fP;"
The matrix a for which the eigenvalues should be computed. The dimensions of the matrix must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The \fBdatatype\fP must be "float". The matrix has to be symmetric, this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer to a matrix a on the device memory.
.TP
.RI "datatype *\fBev\fP;"
The storage for the computed eigenvalues. Eigenvalues will be stored in \fIascendig\fP order. The \fBdatatype\fP must be "float". In case of a GPU build \fBev\fP can be a device pointer to the vectors of eigenvalues in the device memory.
.TP
.RI "int *\fBerror\fP;"
The error code of the function. Should be "ELPA_OK". The error codes can be querried with \fBelpa_strerr\fP(3)
.SH DESCRIPTION
Compute the eigenvalues of a single precision real symmetric matrix. The functions \fBelpa_init\fP(3), \fBelpa_allocate\fP(3), \fBelpa_set\fP(3), and \fBelpa_setup\fP(3) must be called \fIBEFORE\fP \fBelpa_eigenvalues\fP can be called.
.br
.SH "SEE ALSO"
.br
\fBelpa2_print_kernels\fP(1) \fBelpa_init\fP(3) \fBelpa_allocate\fP(3) \fBelpa_set\fP(3) \fBelpa_setup\fP(3) \fBelpa_strerr\fP(3) \fBelpa_skew_eigenvalues\fP(3) \fBelpa_eigenvectors\fP(3) \fBelpa_skew_eigenvectors\fP(3) \fBelpa_cholesky\fP(3) \fBelpa_invert_triangular\fP(3) \fBelpa_solve_tridiagonal\fP(3) \fBelpa_eigenvalues\fP(3) \fBelpa_uninit\fP(3) \fBelpa_deallocate\fP(3)
.TH "elpa_eigenvalues_float_complex" 3 "Wed Sep 1 2021" "ELPA" \" -*- nroff -*-
.ad l
.nh
.SH NAME
elpa_eigenvalues_float_complex \- computes the eigenvalues of a complex single-precision hermitian matrix
.br
.SH SYNOPSIS
.br
.SS FORTRAN INTERFACE
use elpa
.br
class(elpa_t), pointer :: elpa
.br
.RI "call elpa%\fBeigenvalues_float_complex\fP (a, ev, error)"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.RI "class(elpa_t) :: \fBelpa\fP ! returns an instance of the ELPA object"
.br
.TP
.RI "datatype :: \fBa\fP"
The matrix a for which the eigenvalues should be computed. The dimensions of matrix a must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The datatype of the matrix must be complex(kind=c_float_complex). The matrix has to be hermitian this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer of type "type(c_ptr) to a matrix a on the device memory.
.TP
.RI "datatype :: \fBev\fP"
The vector ev where the eigenvalues will be stored in \fIascending\fP order. The datatype of the vector ev must be "real(kind=c_float)". In case of a GPU build \fBev\fP can be a device pointer of type "type(c_ptr) to the vector of eigenvalues in the device memory
.
.TP
.RI "integer, optional :: \fBerror\fP"
The return error code of the function. Should be "ELPA_OK". The error code can be querried with the function \fBelpa_strerr\fP(3)
.br
.SS C INTERFACE
#include <elpa/elpa.h>
.br
elpa_t handle;
.br
.RI "void \fBelpa_eigenvalues_float_compplex\fP(\fBelpa_t\fP handle, \fBdatatype\fP *a, \fBdatatype\fP *ev, \fBint\fP *error);"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.TP
.RI "elpa_t \fBhandle\fP;"
The handle to the ELPA object
.TP
.RI "datatype *\fBa\fP;"
The matrix a for which the eigenvalues should be computed. The dimensions of the matrix must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The \fBdatatype\fP must be "float complex". The matrix has to be symmetric, this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer to a matrix a on the device memory.
.TP
.RI "datatype *\fBev\fP;"
The storage for the computed eigenvalues. Eigenvalues will be stored in \fIascendig\fP order. The \fBdatatype\fP must be "float". In case of a GPU build \fBev\fP can be a device pointer to the vectors of eigenvalues in the device memory.
.TP
.RI "int *\fBerror\fP;"
The error code of the function. Should be "ELPA_OK". The error codes can be querried with \fBelpa_strerr\fP(3)
.SH DESCRIPTION
Compute the eigenvalues of a single precision complex hermitian matrix. The functions \fBelpa_init\fP(3), \fBelpa_allocate\fP(3), \fBelpa_set\fP(3), and \fBelpa_setup\fP(3) must be called \fIBEFORE\fP \fBelpa_eigenvalues\fP can be called.
.br
.SH "SEE ALSO"
.br
\fBelpa2_print_kernels\fP(1) \fBelpa_init\fP(3) \fBelpa_allocate\fP(3) \fBelpa_set\fP(3) \fBelpa_setup\fP(3) \fBelpa_strerr\fP(3) \fBelpa_skew_eigenvalues\fP(3) \fBelpa_eigenvectors\fP(3) \fBelpa_skew_eigenvectors\fP(3) \fBelpa_cholesky\fP(3) \fBelpa_invert_triangular\fP(3) \fBelpa_solve_tridiagonal\fP(3) \fBelpa_eigenvalues\fP(3) \fBelpa_uninit\fP(3) \fBelpa_deallocate\fP(3)
.TH "elpa_eigenvectors_double" 3 "Wed Sept 01 2021" "ELPA" \" -*- nroff -*-
.ad l
.nh
.SH NAME
elpa_eigenvectors_double \- computes the eigenvalues and (part of) the eigenvector spectrum for a real symmetric matrix
.br
.SH SYNOPSIS
.br
.SS FORTRAN INTERFACE
use elpa
.br
class(elpa_t), pointer :: elpa
.br
.RI "call elpa%\fBeigenvectors_double\fP (a, ev, q, error)"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.RI "class(elpa_t) :: \fBelpa\fP ! returns an instance of the ELPA object"
.br
.TP
.RI "datatype :: \fBa\fP"
The matrix a for which the eigenvalues should be computed. The dimensions of matrix a must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The datatype of the matrix must be "real(kind=c_double)". The matrix has to be symmetric, this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer to a matrix a on the device memory.
.TP
.RI "datatype :: \fBev\fP"
The vector ev where the eigenvalues will be stored in \fIascending\fP order. The datatype of the vector ev must be "real(kind=c_double)". In case of a GPU build \fBev\fP can be a device pointer to the vectors of eigenvalues in the device memory.
.TP
.RI "datatype :: \fBq\fP"
The storage space for the computed eigenvectors. The dimensions of matrix a must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The datatype of the matrix must be "real(kind=c_double)". In case of a GPU build \fBq\fP can be a device pointer to a matrix q on the device memory.
.TP
.RI "integer, optional :: \fBerror\fP"
The return error code of the function. Should be "ELPA_OK". The error code can be querried with the function \fBelpa_strerr\fP(3)
.br
.SS C INTERFACE
#include <elpa/elpa.h>
.br
elpa_t handle;
.br
.RI "void \fBelpa_eigenvectors_double\fP(\fBelpa_t\fP handle, \fBdatatype\fP *a, \fBdatatype\fP *ev, \fBdatatype\fP *q, \fBint\fP *error);"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.TP
.RI "elpa_t \fBhandle\fP;"
The handle to the ELPA object
.TP
.RI "datatype *\fBa\fP;"
The matrix a for which the eigenvalues should be computed. The dimensions of the matrix must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The \fBdatatype\fP must be "double". The matrix has to be symmetric, this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer to a matrix a on the device memory.
.TP
.RI "datatype *\fBev\fP;"
The storage for the computed eigenvalues. Eigenvalues will be stored in \fIascendig\fP order. The \fBdatatype\fP must be "double". In case of a GPU build \fBev\fP can be a device pointer to the vectors of eigenvalues in the device memory.
.TP
.RI "datatype *\fBq\fP;"
The storage space for the computed eigenvectors. The dimensions of the matrix must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The \fBdatatype\fP must be one of "double". In case of a GPU build \fBq\fP can be a device pointer to a matrix q on the device memory.
.TP
.RI "int *\fBerror\fP;"
The error code of the function. Should be "ELPA_OK". The error codes can be querried with \fBelpa_strerr\fP(3)
.SH DESCRIPTION
Compute the eigenvalues and (parts of) the eigenvector spectrum of a real symmetric double precision matrix.The functions \fBelpa_init\fP(3), \fBelpa_allocate\fP(3), \fBelpa_set\fP(3), and \fBelpa_setup\fP(3) must be called \fIBEFORE\fP \fBelpa_eigenvalues\fP can be called. Especially the number of eigenvectors to be computed can be set with \fPelpa_set\fB(3)
.br
.SH "SEE ALSO"
.br
\fBelpa2_print_kernels\fP(1) \fBelpa_init\fP(3) \fBelpa_allocate\fP(3) \fBelpa_set\fP(3) \fBelpa_setup\fP(3) \fBelpa_strerr\fP(3) \fBelpa_eigenvalues\fP(3) \fBelpa_skew_eigenvalues\fP(3) \fBelpa_skew_eigenvectors\fP(3) \fBelpa_cholesky\fP(3) \fBelpa_invert_triangular\fP(3) \fBelpa_solve_tridiagonal\fP(3) \fBelpa_hermitian_multiply\fP(3) \fBelpa_uninit\fP(3) \fBelpa_deallocate\fP(3)
.TH "elpa_eigenvectors_double_complex" 3 "Wed Sept 01 2021" "ELPA" \" -*- nroff -*-
.ad l
.nh
.SH NAME
elpa_eigenvectors_double_complex \- computes the eigenvalues and (part of) the eigenvector spectrum for a complex hermitian matrix
.br
.SH SYNOPSIS
.br
.SS FORTRAN INTERFACE
use elpa
.br
class(elpa_t), pointer :: elpa
.br
.RI "call elpa%\fBeigenvectors_double_complex\fP (a, ev, q, error)"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.RI "class(elpa_t) :: \fBelpa\fP ! returns an instance of the ELPA object"
.br
.TP
.RI "datatype :: \fBa\fP"
The matrix a for which the eigenvalues should be computed. The dimensions of matrix a must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The datatype of the matrix must be "complex(kind=c_double_complex)". The matrix has to be hermitian, this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer to a matrix a on the device memory.
.TP
.RI "datatype :: \fBev\fP"
The vector ev where the eigenvalues will be stored in \fIascending\fP order. The datatype of the vector ev must be "real(kind=c_double)". In case of a GPU build \fBev\fP can be a device pointer to the vectors of eigenvalues in the device memory.
.TP
.RI "datatype :: \fBq\fP"
The storage space for the computed eigenvectors. The dimensions of matrix a must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The datatype of the matrix must be "complex(kind=c_double_complex)". In case of a GPU build \fBq\fP can be a device pointer to a matrix q on the device memory.
.TP
.RI "integer, optional :: \fBerror\fP"
The return error code of the function. Should be "ELPA_OK". The error code can be querried with the function \fBelpa_strerr\fP(3)
.br
.SS C INTERFACE
#include <elpa/elpa.h>
.br
elpa_t handle;
.br
.RI "void \fBelpa_eigenvectors_double_complex\fP(\fBelpa_t\fP handle, \fBdatatype\fP *a, \fBdatatype\fP *ev, \fBdatatype\fP *q, \fBint\fP *error);"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.TP
.RI "elpa_t \fBhandle\fP;"
The handle to the ELPA object
.TP
.RI "datatype *\fBa\fP;"
The matrix a for which the eigenvalues should be computed. The dimensions of the matrix must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The \fBdatatype\fP must be "double complex". The matrix has to be hermitian, this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer to a matrix a on the device memory.
.TP
.RI "datatype *\fBev\fP;"
The storage for the computed eigenvalues. Eigenvalues will be stored in \fIascendig\fP order. The \fBdatatype\fP must be "double". In case of a GPU build \fBev\fP can be a device pointer to the vectors of eigenvalues in the device memory.
.TP
.RI "datatype *\fBq\fP;"
The storage space for the computed eigenvectors. The dimensions of the matrix must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The \fBdatatype\fP must be one of "double complex". In case of a GPU build \fBq\fP can be a device pointer to a matrix q on the device memory.
.TP
.RI "int *\fBerror\fP;"
The error code of the function. Should be "ELPA_OK". The error codes can be querried with \fBelpa_strerr\fP(3)
.SH DESCRIPTION
Compute the eigenvalues and (parts of) the eigenvector spectrum of a complex hermitian double precision matrix.The functions \fBelpa_init\fP(3), \fBelpa_allocate\fP(3), \fBelpa_set\fP(3), and \fBelpa_setup\fP(3) must be called \fIBEFORE\fP \fBelpa_eigenvalues\fP can be called. Especially the number of eigenvectors to be computed can be set with \fPelpa_set\fB(3)
.br
.SH "SEE ALSO"
.br
\fBelpa2_print_kernels\fP(1) \fBelpa_init\fP(3) \fBelpa_allocate\fP(3) \fBelpa_set\fP(3) \fBelpa_setup\fP(3) \fBelpa_strerr\fP(3) \fBelpa_eigenvalues\fP(3) \fBelpa_skew_eigenvalues\fP(3) \fBelpa_skew_eigenvectors\fP(3) \fBelpa_cholesky\fP(3) \fBelpa_invert_triangular\fP(3) \fBelpa_solve_tridiagonal\fP(3) \fBelpa_hermitian_multiply\fP(3) \fBelpa_uninit\fP(3) \fBelpa_deallocate\fP(3)
.TH "elpa_eigenvectors_float" 3 "Wed Sept 01 2021" "ELPA" \" -*- nroff -*-
.ad l
.nh
.SH NAME
elpa_eigenvectors_float \- computes the eigenvalues and (part of) the eigenvector spectrum for a real symmetric matrix
.br
.SH SYNOPSIS
.br
.SS FORTRAN INTERFACE
use elpa
.br
class(elpa_t), pointer :: elpa
.br
.RI "call elpa%\fBeigenvectors_float\fP (a, ev, q, error)"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.RI "class(elpa_t) :: \fBelpa\fP ! returns an instance of the ELPA object"
.br
.TP
.RI "datatype :: \fBa\fP"
The matrix a for which the eigenvalues should be computed. The dimensions of matrix a must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The datatype of the matrix must be "real(kind=c_float)". The matrix has to be symmetric, this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer to a matrix a on the device memory.
.TP
.RI "datatype :: \fBev\fP"
The vector ev where the eigenvalues will be stored in \fIascending\fP order. The datatype of the vector ev must be "real(kind=c_float)". In case of a GPU build \fBev\fP can be a device pointer to the vectors of eigenvalues in the device memory.
.TP
.RI "datatype :: \fBq\fP"
The storage space for the computed eigenvectors. The dimensions of matrix a must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The datatype of the matrix must be "real(kind=c_float)". In case of a GPU build \fBq\fP can be a device pointer to a matrix q on the device memory.
.TP
.RI "integer, optional :: \fBerror\fP"
The return error code of the function. Should be "ELPA_OK". The error code can be querried with the function \fBelpa_strerr\fP(3)
.br
.SS C INTERFACE
#include <elpa/elpa.h>
.br
elpa_t handle;
.br
.RI "void \fBelpa_eigenvectors_float\fP(\fBelpa_t\fP handle, \fBdatatype\fP *a, \fBdatatype\fP *ev, \fBdatatype\fP *q, \fBint\fP *error);"
.br
.RI " "
.br
.RI "With the definitions of the input and output variables:"
.br
.TP
.RI "elpa_t \fBhandle\fP;"
The handle to the ELPA object
.TP
.RI "datatype *\fBa\fP;"
The matrix a for which the eigenvalues should be computed. The dimensions of the matrix must be set \fIBEFORE\fP with the methods \fBelpa_set\fP(3) and \fBelpa_setup\fP(3). The \fBdatatype\fP must be "float". The matrix has to be symmetric, this is not checked by the routine. In case of a GPU build \fBa\fP can be a device pointer to a matrix a on the device memory.
.TP
.RI "datatype *\fBev\fP;"