Eigenvalue SoLvers for Petaflop-Applications (ELPA) 2022.11.001.rc1
elpa_explicit_name.h
Go to the documentation of this file.
1// Copyright 2022, P. Karpov, MPCDF
2//
3// This file is part of ELPA.
4//
5// The ELPA library was originally created by the ELPA consortium,
6// consisting of the following organizations:
7//
8// - Max Planck Computing and Data Facility (MPCDF), formerly known as
9// Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
10// - Bergische Universität Wuppertal, Lehrstuhl für angewandte
11// Informatik,
12// - Technische Universität München, Lehrstuhl für Informatik mit
13// Schwerpunkt Wissenschaftliches Rechnen ,
14// - Fritz-Haber-Institut, Berlin, Abt. Theorie,
15// - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
16// Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
17// and
18// - IBM Deutschland GmbH
19//
20//
21// This particular source code file contains additions, changes and
22// enhancements authored by Intel Corporation which is not part of
23// the ELPA consortium.
24//
25// More information can be found here:
26// http://elpa.mpcdf.mpg.de/
27//
28// ELPA is free software: you can redistribute it and/or modify
29// it under the terms of the version 3 of the license of the
30// GNU Lesser General Public License as published by the Free
31// Software Foundation.
32//
33// ELPA is distributed in the hope that it will be useful,
34// but WITHOUT ANY WARRANTY; without even the implied warranty of
35// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36// GNU Lesser General Public License for more details.
37//
38// You should have received a copy of the GNU Lesser General Public License
39// along with ELPA. If not, see <http://www.gnu.org/licenses/>
40//
41// ELPA reflects a substantial effort on the part of the original
42// ELPA consortium, and we ask you to respect the spirit of the
43// license that we chose: i.e., please contribute any changes you
44// may have back to the original ELPA library distribution, and keep
45// any derivatives of ELPA under the same license that we chose for
46// the original distribution, the GNU Lesser General Public License.
47//
48#pragma once
49#include <elpa/elpa.h>
51
52#ifdef __cplusplus
53#define double_complex std::complex<double>
54#define float_complex std::complex<float>
55extern "C" {
56#else
57#define double_complex double complex
58#define float_complex float complex
59#endif
60
61#if ELPA_WITH_NVIDIA_GPU_VERSION==1 || ELPA_WITH_AMD_GPU_VERSION==1
62int is_device_ptr(void *a_void_ptr);
63#endif
64
65void elpa_eigenvectors_double(elpa_t handle, double *a, double *ev, double *q, int *error);
66void elpa_eigenvectors_float(elpa_t handle, float *a, float *ev, float *q, int *error);
67void elpa_eigenvectors_double_complex(elpa_t handle, double_complex *a, double *ev, double_complex *q, int *error);
68void elpa_eigenvectors_float_complex(elpa_t handle, float_complex *a, float *ev, float_complex *q, int *error);
69
70void elpa_skew_eigenvectors_double(elpa_t handle, double *a, double *ev, double *q, int *error);
71void elpa_skew_eigenvectors_float(elpa_t handle, float *a, float *ev, float *q, int *error);
72
73void elpa_skew_eigenvectors_double(elpa_t handle, double *a, double *ev, double *q, int *error);
74void elpa_skew_eigenvectors_float(elpa_t handle, float *a, float *ev, float *q, int *error);
75
76void elpa_eigenvalues_double(elpa_t handle, double *a, double *ev, int *error);
77void elpa_eigenvalues_float(elpa_t handle, float *a, float *ev, int *error);
78void elpa_eigenvalues_double_complex(elpa_t handle, double_complex *a, double *ev, int *error);
79void elpa_eigenvalues_float_complex(elpa_t handle, float_complex *a, float *ev, int *error);
80
81void elpa_skew_eigenvalues_double(elpa_t handle, double *a, double *ev, int *error);
82void elpa_skew_eigenvalues_float(elpa_t handle, float *a, float *ev, int *error);
83
84void elpa_skew_eigenvalues_double(elpa_t handle, double *a, double *ev, int *error);
85void elpa_skew_eigenvalues_float(elpa_t handle, float *a, float *ev, int *error);
86
87void elpa_cholesky_double(elpa_t handle, double *a, int *error);
88void elpa_cholesky_float(elpa_t handle, float *a, int *error);
89void elpa_cholesky_double_complex(elpa_t handle, double_complex *a, int *error);
90void elpa_cholesky_float_complex(elpa_t handle, float_complex *a, int *error);
91
92void elpa_hermitian_multiply_double(elpa_t handle, char uplo_a, char uplo_c, int ncb, double *a, double *b, int nrows_b, int ncols_b, double *c, int nrows_c, int ncols_c, int *error);
93void elpa_hermitian_multiply_float(elpa_t handle, char uplo_a, char uplo_c, int ncb, float *a, float *b, int nrows_b, int ncols_b, float *c, int nrows_c, int ncols_c, int *error);
94void elpa_hermitian_multiply_double_complex(elpa_t handle, char uplo_a, char uplo_c, int ncb, double_complex *a, double_complex *b, int nrows_b, int ncols_b, double_complex *c, int nrows_c, int ncols_c, int *error);
95void elpa_hermitian_multiply_float_complex(elpa_t handle, char uplo_a, char uplo_c, int ncb, float_complex *a, float_complex *b, int nrows_b, int ncols_b, float_complex *c, int nrows_c, int ncols_c, int *error);
96
97void elpa_invert_triangular_double(elpa_t handle, double *a, int *error);
98void elpa_invert_triangular_float(elpa_t handle, float *a, int *error);
101
102#ifdef __cplusplus
103}
104#endif
struct elpa_struct * elpa_t
Definition: elpa.h:10
void elpa_skew_eigenvalues_double(elpa_t handle, double *a, double *ev, int *error)
generic C method for elpa_skew_eigenvalues_double
Definition: elpa_explicit_name.c:355
void elpa_hermitian_multiply_float(elpa_t handle, char uplo_a, char uplo_c, int ncb, float *a, float *b, int nrows_b, int ncols_b, float *c, int nrows_c, int ncols_c, int *error)
generic C method for elpa_hermitian_multiply_float
Definition: elpa_explicit_name.c:557
void elpa_cholesky_float(elpa_t handle, float *a, int *error)
generic C method for elpa_cholesky_float
Definition: elpa_explicit_name.c:434
void elpa_hermitian_multiply_double(elpa_t handle, char uplo_a, char uplo_c, int ncb, double *a, double *b, int nrows_b, int ncols_b, double *c, int nrows_c, int ncols_c, int *error)
generic C method for elpa_hermitian_multiply_double
Definition: elpa_explicit_name.c:522
void elpa_skew_eigenvectors_double(elpa_t handle, double *a, double *ev, double *q, int *error)
generic C method for elpa_skew_eigenvectors_double
Definition: elpa_explicit_name.c:192
void elpa_eigenvectors_double(elpa_t handle, double *a, double *ev, double *q, int *error)
generic C method for elpa_eigenvectors_double
Definition: elpa_explicit_name.c:66
void elpa_hermitian_multiply_float_complex(elpa_t handle, char uplo_a, char uplo_c, int ncb, float complex *a, float complex *b, int nrows_b, int ncols_b, float complex *c, int nrows_c, int ncols_c, int *error)
generic C method for elpa_hermitian_multiply_float_complex
Definition: elpa_explicit_name.c:627
void elpa_hermitian_multiply_double_complex(elpa_t handle, char uplo_a, char uplo_c, int ncb, double complex *a, double complex *b, int nrows_b, int ncols_b, double complex *c, int nrows_c, int ncols_c, int *error)
generic C method for elpa_hermitian_multiply_double_complex
Definition: elpa_explicit_name.c:592
void elpa_skew_eigenvectors_float(elpa_t handle, float *a, float *ev, float *q, int *error)
generic C method for elpa_skew_eigenvectors_float
Definition: elpa_explicit_name.c:220
void elpa_eigenvalues_double(elpa_t handle, double *a, double *ev, int *error)
generic C method for elpa_eigenvalues_double
Definition: elpa_explicit_name.c:247
void elpa_cholesky_double(elpa_t handle, double *a, int *error)
generic C method for elpa_cholesky_double
Definition: elpa_explicit_name.c:408
void elpa_eigenvectors_float(elpa_t handle, float *a, float *ev, float *q, int *error)
generic C method for elpa_eigenvectors_float
Definition: elpa_explicit_name.c:97
void elpa_invert_triangular_float_complex(elpa_t handle, float complex *a, int *error)
generic C method for elpa_invert_triangular_float_complex
Definition: elpa_explicit_name.c:731
void elpa_cholesky_double_complex(elpa_t handle, double complex *a, int *error)
generic C method for elpa_cholesky_double_complex
Definition: elpa_explicit_name.c:460
void elpa_cholesky_float_complex(elpa_t handle, float complex *a, int *error)
generic C method for elpa_cholesky_float_complex
Definition: elpa_explicit_name.c:486
void elpa_eigenvalues_float_complex(elpa_t handle, float complex *a, float *ev, int *error)
generic C method for elpa_eigenvalues_float_complex
Definition: elpa_explicit_name.c:328
void elpa_eigenvalues_float(elpa_t handle, float *a, float *ev, int *error)
generic C method for elpa_eigenvalues_float
Definition: elpa_explicit_name.c:274
#define float_complex
Definition: elpa_explicit_name.h:58
void elpa_invert_triangular_double_complex(elpa_t handle, double complex *a, int *error)
generic C method for elpa_invert_triangular_double_complex
Definition: elpa_explicit_name.c:705
void elpa_eigenvectors_float_complex(elpa_t handle, float complex *a, float *ev, float complex *q, int *error)
generic C method for elpa_eigenvectors_float_complex
Definition: elpa_explicit_name.c:160
void elpa_eigenvalues_double_complex(elpa_t handle, double complex *a, double *ev, int *error)
generic C method for elpa_eigenvalues_double_complex
Definition: elpa_explicit_name.c:301
void elpa_invert_triangular_float(elpa_t handle, float *a, int *error)
generic C method for elpa_invert_triangular_float
Definition: elpa_explicit_name.c:679
void elpa_invert_triangular_double(elpa_t handle, double *a, int *error)
generic C method for elpa_invert_triangular_double
Definition: elpa_explicit_name.c:653
void elpa_skew_eigenvalues_float(elpa_t handle, float *a, float *ev, int *error)
generic C method for elpa_skew_eigenvalues_float
Definition: elpa_explicit_name.c:382
#define double_complex
Definition: elpa_explicit_name.h:57
void elpa_eigenvectors_double_complex(elpa_t handle, double complex *a, double *ev, double complex *q, int *error)
generic C method for elpa_eigenvectors_double_complex
Definition: elpa_explicit_name.c:128