Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
elpa
elpa
Commits
28458c88
Commit
28458c88
authored
May 23, 2017
by
Andreas Marek
Browse files
Consistent naming for Fortran and C
parent
c19db92b
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
elpa/elpa_generic.h
View file @
28458c88
...
...
@@ -16,14 +16,51 @@
*/
#define elpa_solve(handle, a, ev, q, error) _Generic((a), \
double*: \
elpa_solve_
real_double
, \
elpa_solve_
d
, \
\
float*: \
elpa_solve_
real_single
, \
elpa_solve_
f
, \
\
double complex*: \
elpa_solve_c
omplex_double
, \
elpa_solve_
d
c, \
\
float complex*: \
elpa_solve_c
omplex_single
\
elpa_solve_
f
c \
)(handle, a, ev, q, error)
/**
* \todo document elpa_cholesky()
*/
#define elpa_cholesky(handle, a, error) _Generic((a), \
double*: \
elpa_cholesky_d, \
\
float*: \
elpa_cholesky_f, \
\
double complex*: \
elpa_cholesky_dc, \
\
float complex*: \
elpa_cholesky_fc \
)(handle, a, error)
/**
* \todo document elpa_invert_triangular()
*/
#define elpa_invert_triangular(handle, a, error) _Generic((a), \
double*: \
elpa_invert_trm_d, \
\
float*: \
elpa_invert_trm_f, \
\
double complex*: \
elpa_invert_trm_dc, \
\
float complex*: \
elpa_invert_trm_fc \
)(handle, a, error)
src/elpa_api.F90
View file @
28458c88
...
...
@@ -96,32 +96,32 @@ module elpa_api
!< Actual math routines
generic
,
public
::
solve
=>
&
!< method solve for solving the eigenvalue problem
elpa_solve_
real_double
,
&
!< for symmetric real valued / hermitian complex valued
elpa_solve_
real_single
,
&
!< matrices
elpa_solve_c
omplex_double
,
&
elpa_solve_c
omplex_single
elpa_solve_
d
,
&
!< for symmetric real valued / hermitian complex valued
elpa_solve_
f
,
&
!< matrices
elpa_solve_
d
c
,
&
elpa_solve_
f
c
generic
,
public
::
hermitian_multiply
=>
&
!< method for a "hermitian" multiplication of matrices a and b
elpa_
multiply_at_b_double
,
&
!< for real valued matrices: a**T * b
elpa_
multiply_ah_b_double
,
&
!< for complex valued matrices a**H * b
elpa_
multiply_at_b_single
,
&
elpa_
multiply_ah_b_single
elpa_
hermitian_multiply_d
,
&
!< for real valued matrices: a**T * b
elpa_
hermitian_multiply_dc
,
&
!< for complex valued matrices a**H * b
elpa_
hermitian_multiply_f
,
&
elpa_
hermitian_multiply_fc
generic
,
public
::
cholesky
=>
&
!< method for the cholesky factorisation of matrix a
elpa_cholesky_d
ouble_real
,
&
elpa_cholesky_
single_real
,
&
elpa_cholesky_d
ouble_complex
,
&
elpa_cholesky_
single_complex
elpa_cholesky_d
,
&
elpa_cholesky_
f
,
&
elpa_cholesky_d
c
,
&
elpa_cholesky_
fc
generic
,
public
::
invert_triangular
=>
&
!< method to invert a upper triangular matrix a
elpa_invert_trm_d
ouble_real
,
&
elpa_invert_trm_
single_real
,
&
elpa_invert_trm_d
ouble_complex
,
&
elpa_invert_trm_
single_complex
elpa_invert_trm_d
,
&
elpa_invert_trm_
f
,
&
elpa_invert_trm_d
c
,
&
elpa_invert_trm_
fc
generic
,
public
::
solve_tridi
=>
&
!< method to solve the eigenvalue problem for a tridiagonal
elpa_solve_tridi_d
ouble_real
,
&
!< matrix
elpa_solve_tridi_
single_real
elpa_solve_tridi_d
,
&
!< matrix
elpa_solve_tridi_
f
!> \brief private methods of elpa_t type. NOT accessible for the user
...
...
@@ -129,28 +129,28 @@ module elpa_api
procedure
(
elpa_set_integer_i
),
deferred
,
private
::
elpa_set_integer
procedure
(
elpa_set_double_i
),
deferred
,
private
::
elpa_set_double
procedure
(
elpa_solve_
real_double
_i
),
deferred
,
private
::
elpa_solve_
real_double
procedure
(
elpa_solve_
real_single
_i
),
deferred
,
private
::
elpa_solve_
real_single
procedure
(
elpa_solve_c
omplex_double
_i
),
deferred
,
private
::
elpa_solve_c
omplex_double
procedure
(
elpa_solve_c
omplex_single
_i
),
deferred
,
private
::
elpa_solve_c
omplex_single
procedure
(
elpa_solve_
d
_i
),
deferred
,
private
::
elpa_solve_
d
procedure
(
elpa_solve_
f
_i
),
deferred
,
private
::
elpa_solve_
f
procedure
(
elpa_solve_
d
c_i
),
deferred
,
private
::
elpa_solve_
d
c
procedure
(
elpa_solve_
f
c_i
),
deferred
,
private
::
elpa_solve_
f
c
procedure
(
elpa_
multiply_at_b_double
_i
),
deferred
,
private
::
elpa_
multiply_at_b_double
procedure
(
elpa_
multiply_at_b_single
_i
),
deferred
,
private
::
elpa_
multiply_at_b_single
procedure
(
elpa_
multiply_ah_b_double
_i
),
deferred
,
private
::
elpa_
multiply_ah_b_double
procedure
(
elpa_
multiply_ah_b_single
_i
),
deferred
,
private
::
elpa_
multiply_ah_b_single
procedure
(
elpa_
hermitian_multiply_d
_i
),
deferred
,
private
::
elpa_
hermitian_multiply_d
procedure
(
elpa_
hermitian_multiply_f
_i
),
deferred
,
private
::
elpa_
hermitian_multiply_f
procedure
(
elpa_
hermitian_multiply_dc
_i
),
deferred
,
private
::
elpa_
hermitian_multiply_dc
procedure
(
elpa_
hermitian_multiply_fc
_i
),
deferred
,
private
::
elpa_
hermitian_multiply_fc
procedure
(
elpa_cholesky_d
ouble_real
_i
),
deferred
,
private
::
elpa_cholesky_d
ouble_real
procedure
(
elpa_cholesky_
single_real
_i
),
deferred
,
private
::
elpa_cholesky_
single_real
procedure
(
elpa_cholesky_d
ouble_complex
_i
),
deferred
,
private
::
elpa_cholesky_d
ouble_complex
procedure
(
elpa_cholesky_
single_complex
_i
),
deferred
,
private
::
elpa_cholesky_
single_complex
procedure
(
elpa_cholesky_d_i
),
deferred
,
private
::
elpa_cholesky_d
procedure
(
elpa_cholesky_
f
_i
),
deferred
,
private
::
elpa_cholesky_
f
procedure
(
elpa_cholesky_d
c
_i
),
deferred
,
private
::
elpa_cholesky_d
c
procedure
(
elpa_cholesky_
fc
_i
),
deferred
,
private
::
elpa_cholesky_
fc
procedure
(
elpa_invert_trm_d
ouble_real
_i
),
deferred
,
private
::
elpa_invert_trm_d
ouble_real
procedure
(
elpa_invert_trm_
single_real
_i
),
deferred
,
private
::
elpa_invert_trm_
single_real
procedure
(
elpa_invert_trm_d
ouble_complex
_i
),
deferred
,
private
::
elpa_invert_trm_d
ouble_complex
procedure
(
elpa_invert_trm_
single_complex
_i
),
deferred
,
private
::
elpa_invert_trm_
single_complex
procedure
(
elpa_invert_trm_d_i
),
deferred
,
private
::
elpa_invert_trm_d
procedure
(
elpa_invert_trm_
f
_i
),
deferred
,
private
::
elpa_invert_trm_
f
procedure
(
elpa_invert_trm_d
c
_i
),
deferred
,
private
::
elpa_invert_trm_d
c
procedure
(
elpa_invert_trm_
fc
_i
),
deferred
,
private
::
elpa_invert_trm_
fc
procedure
(
elpa_solve_tridi_d
ouble_real
_i
),
deferred
,
private
::
elpa_solve_tridi_d
ouble_real
procedure
(
elpa_solve_tridi_
single_real
_i
),
deferred
,
private
::
elpa_solve_tridi_
single_real
procedure
(
elpa_solve_tridi_d_i
),
deferred
,
private
::
elpa_solve_tridi_d
procedure
(
elpa_solve_tridi_
f
_i
),
deferred
,
private
::
elpa_solve_tridi_
f
end
type
elpa_t
...
...
@@ -162,6 +162,7 @@ module elpa_api
interface
pure
function
elpa_strlen_c
(
ptr
)
result
(
size
)
bind
(
c
,
name
=
"strlen"
)
use
,
intrinsic
::
iso_c_binding
implicit
none
type
(
c_ptr
),
intent
(
in
),
value
::
ptr
integer
(
kind
=
c_size_t
)
::
size
end
function
...
...
@@ -175,6 +176,7 @@ module elpa_api
abstract
interface
function
elpa_setup_i
(
self
)
result
(
error
)
import
elpa_t
implicit
none
class
(
elpa_t
),
intent
(
inout
)
::
self
integer
::
error
end
function
...
...
@@ -191,6 +193,7 @@ module elpa_api
subroutine
elpa_set_integer_i
(
self
,
name
,
value
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
character
(
*
),
intent
(
in
)
::
name
integer
(
kind
=
c_int
),
intent
(
in
)
::
value
...
...
@@ -209,6 +212,7 @@ module elpa_api
function
elpa_get_integer_i
(
self
,
name
,
error
)
result
(
value
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
character
(
*
),
intent
(
in
)
::
name
integer
(
kind
=
c_int
)
::
value
...
...
@@ -226,9 +230,10 @@ module elpa_api
abstract
interface
function
elpa_is_set_i
(
self
,
name
)
result
(
state
)
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
character
(
*
),
intent
(
in
)
::
name
integer
::
sta
integer
::
sta
te
end
function
end
interface
...
...
@@ -243,6 +248,7 @@ module elpa_api
abstract
interface
function
elpa_can_set_i
(
self
,
name
,
value
)
result
(
state
)
import
elpa_t
,
c_int
implicit
none
class
(
elpa_t
)
::
self
character
(
*
),
intent
(
in
)
::
name
integer
(
kind
=
c_int
),
intent
(
in
)
::
value
...
...
@@ -261,6 +267,7 @@ module elpa_api
subroutine
elpa_set_double_i
(
self
,
name
,
value
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
character
(
*
),
intent
(
in
)
::
name
real
(
kind
=
c_double
),
intent
(
in
)
::
value
...
...
@@ -279,6 +286,7 @@ module elpa_api
function
elpa_get_double_i
(
self
,
name
,
error
)
result
(
value
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
character
(
*
),
intent
(
in
)
::
name
real
(
kind
=
c_double
)
::
value
...
...
@@ -296,6 +304,7 @@ module elpa_api
function
elpa_associate_int_i
(
self
,
name
)
result
(
value
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
character
(
*
),
intent
(
in
)
::
name
integer
(
kind
=
c_int
),
pointer
::
value
...
...
@@ -314,6 +323,7 @@ module elpa_api
abstract
interface
function
elpa_get_time_i
(
self
,
name1
,
name2
,
name3
,
name4
,
name5
,
name6
)
result
(
s
)
import
elpa_t
,
c_double
implicit
none
class
(
elpa_t
),
intent
(
in
)
::
self
! this is clunky, but what can you do..
character
(
len
=*
),
intent
(
in
),
optional
::
name1
,
name2
,
name3
,
name4
,
name5
,
name6
...
...
@@ -328,6 +338,7 @@ module elpa_api
abstract
interface
subroutine
elpa_print_times_i
(
self
)
import
elpa_t
implicit
none
class
(
elpa_t
),
intent
(
in
)
::
self
end
subroutine
end
interface
...
...
@@ -344,9 +355,10 @@ module elpa_api
!> \param q double real matrix q: on output stores the eigenvalues
!> \result error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_solve_
real_double
_i
(
self
,
a
,
ev
,
q
,
error
)
subroutine
elpa_solve_
d
_i
(
self
,
a
,
ev
,
q
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
#ifdef USE_ASSUMED_SIZE
real
(
kind
=
c_double
)
::
a
(
self
%
local_nrows
,
*
),
q
(
self
%
local_nrows
,
*
)
...
...
@@ -368,9 +380,10 @@ module elpa_api
!> \param q single real matrix q: on output stores the eigenvalues
!> \result error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_solve_
real_single
_i
(
self
,
a
,
ev
,
q
,
error
)
subroutine
elpa_solve_
f
_i
(
self
,
a
,
ev
,
q
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
#ifdef USE_ASSUMED_SIZE
real
(
kind
=
c_float
)
::
a
(
self
%
local_nrows
,
*
),
q
(
self
%
local_nrows
,
*
)
...
...
@@ -392,9 +405,10 @@ module elpa_api
!> \param q double complex matrix q: on output stores the eigenvalues
!> \result error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_solve_c
omplex_double
_i
(
self
,
a
,
ev
,
q
,
error
)
subroutine
elpa_solve_
d
c_i
(
self
,
a
,
ev
,
q
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
#ifdef USE_ASSUMED_SIZE
...
...
@@ -417,9 +431,10 @@ module elpa_api
!> \param q single complex matrix q: on output stores the eigenvalues
!> \result error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_solve_c
omplex_single
_i
(
self
,
a
,
ev
,
q
,
error
)
subroutine
elpa_solve_
f
c_i
(
self
,
a
,
ev
,
q
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
#ifdef USE_ASSUMED_SIZE
complex
(
kind
=
c_float_complex
)
::
a
(
self
%
local_nrows
,
*
),
q
(
self
%
local_nrows
,
*
)
...
...
@@ -461,10 +476,11 @@ module elpa_api
!> \param ldcCols columns of matrix c
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_
multiply_at_b_double
_i
(
self
,
uplo_a
,
uplo_c
,
na
,
ncb
,
a
,
lda
,
ldaCols
,
b
,
ldb
,
ldbCols
,
&
subroutine
elpa_
hermitian_multiply_d
_i
(
self
,
uplo_a
,
uplo_c
,
na
,
ncb
,
a
,
lda
,
ldaCols
,
b
,
ldb
,
ldbCols
,
&
c
,
ldc
,
ldcCols
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
character
*
1
::
uplo_a
,
uplo_c
integer
(
kind
=
c_int
),
intent
(
in
)
::
na
,
lda
,
ldaCols
,
ldb
,
ldbCols
,
ldc
,
ldcCols
,
ncb
...
...
@@ -506,10 +522,11 @@ module elpa_api
!> \param ldcCols columns of matrix c
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_
multiply_at_b_single
_i
(
self
,
uplo_a
,
uplo_c
,
na
,
ncb
,
a
,
lda
,
ldaCols
,
b
,
ldb
,
ldbCols
,
&
subroutine
elpa_
hermitian_multiply_f
_i
(
self
,
uplo_a
,
uplo_c
,
na
,
ncb
,
a
,
lda
,
ldaCols
,
b
,
ldb
,
ldbCols
,
&
c
,
ldc
,
ldcCols
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
character
*
1
::
uplo_a
,
uplo_c
integer
(
kind
=
c_int
),
intent
(
in
)
::
na
,
lda
,
ldaCols
,
ldb
,
ldbCols
,
ldc
,
ldcCols
,
ncb
...
...
@@ -551,10 +568,11 @@ module elpa_api
!> \param ldcCols columns of matrix c
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_
multiply_ah_b_double
_i
(
self
,
uplo_a
,
uplo_c
,
na
,
ncb
,
a
,
lda
,
ldaCols
,
b
,
ldb
,
ldbCols
,
&
subroutine
elpa_
hermitian_multiply_dc
_i
(
self
,
uplo_a
,
uplo_c
,
na
,
ncb
,
a
,
lda
,
ldaCols
,
b
,
ldb
,
ldbCols
,
&
c
,
ldc
,
ldcCols
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
character
*
1
::
uplo_a
,
uplo_c
integer
(
kind
=
c_int
),
intent
(
in
)
::
na
,
lda
,
ldaCols
,
ldb
,
ldbCols
,
ldc
,
ldcCols
,
ncb
...
...
@@ -596,10 +614,11 @@ module elpa_api
!> \param ldcCols columns of matrix c
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_
multiply_ah_b_single
_i
(
self
,
uplo_a
,
uplo_c
,
na
,
ncb
,
a
,
lda
,
ldaCols
,
b
,
ldb
,
ldbCols
,
&
subroutine
elpa_
hermitian_multiply_fc
_i
(
self
,
uplo_a
,
uplo_c
,
na
,
ncb
,
a
,
lda
,
ldaCols
,
b
,
ldb
,
ldbCols
,
&
c
,
ldc
,
ldcCols
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
character
*
1
::
uplo_a
,
uplo_c
integer
(
kind
=
c_int
),
intent
(
in
)
::
na
,
lda
,
ldaCols
,
ldb
,
ldbCols
,
ldc
,
ldcCols
,
ncb
...
...
@@ -618,9 +637,10 @@ module elpa_api
!> \param a double real matrix: the matrix to be decomposed
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_cholesky_d
ouble_real
_i
(
self
,
a
,
error
)
subroutine
elpa_cholesky_d_i
(
self
,
a
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
#ifdef USE_ASSUMED_SIZE
real
(
kind
=
c_double
)
::
a
(
self
%
local_nrows
,
*
)
...
...
@@ -637,9 +657,10 @@ module elpa_api
!> \param a single real matrix: the matrix to be decomposed
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_cholesky_
single_real
_i
(
self
,
a
,
error
)
subroutine
elpa_cholesky_
f
_i
(
self
,
a
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
#ifdef USE_ASSUMED_SIZE
real
(
kind
=
c_float
)
::
a
(
self
%
local_nrows
,
*
)
...
...
@@ -656,9 +677,10 @@ module elpa_api
!> \param a double complex matrix: the matrix to be decomposed
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_cholesky_d
ouble_complex
_i
(
self
,
a
,
error
)
subroutine
elpa_cholesky_d
c
_i
(
self
,
a
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
#ifdef USE_ASSUMED_SIZE
complex
(
kind
=
c_double_complex
)
::
a
(
self
%
local_nrows
,
*
)
...
...
@@ -675,9 +697,10 @@ module elpa_api
!> \param a single complex matrix: the matrix to be decomposed
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_cholesky_
single_complex
_i
(
self
,
a
,
error
)
subroutine
elpa_cholesky_
fc
_i
(
self
,
a
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
#ifdef USE_ASSUMED_SIZE
complex
(
kind
=
c_float_complex
)
::
a
(
self
%
local_nrows
,
*
)
...
...
@@ -694,9 +717,10 @@ module elpa_api
!> \param a double real matrix: the matrix to be inverted
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_invert_trm_d
ouble_real
_i
(
self
,
a
,
error
)
subroutine
elpa_invert_trm_d_i
(
self
,
a
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
#ifdef USE_ASSUMED_SIZE
real
(
kind
=
c_double
)
::
a
(
self
%
local_nrows
,
*
)
...
...
@@ -713,9 +737,10 @@ module elpa_api
!> \param a single real matrix: the matrix to be inverted
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_invert_trm_
single_real
_i
(
self
,
a
,
error
)
subroutine
elpa_invert_trm_
f
_i
(
self
,
a
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
#ifdef USE_ASSUMED_SIZE
real
(
kind
=
c_float
)
::
a
(
self
%
local_nrows
,
*
)
...
...
@@ -732,9 +757,10 @@ module elpa_api
!> \param a double complex matrix: the matrix to be inverted
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_invert_trm_d
ouble_complex
_i
(
self
,
a
,
error
)
subroutine
elpa_invert_trm_d
c
_i
(
self
,
a
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
#ifdef USE_ASSUMED_SIZE
complex
(
kind
=
c_double_complex
)
::
a
(
self
%
local_nrows
,
*
)
...
...
@@ -751,9 +777,10 @@ module elpa_api
!> \param a single complex matrix: the matrix to be inverted
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_invert_trm_
single_complex
_i
(
self
,
a
,
error
)
subroutine
elpa_invert_trm_
fc
_i
(
self
,
a
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
#ifdef USE_ASSUMED_SIZE
complex
(
kind
=
c_float_complex
)
::
a
(
self
%
local_nrows
,
*
)
...
...
@@ -772,9 +799,10 @@ module elpa_api
!> \param q double real matrix: on output contains the eigenvectors
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_solve_tridi_d
ouble_real
_i
(
self
,
d
,
e
,
q
,
error
)
subroutine
elpa_solve_tridi_d_i
(
self
,
d
,
e
,
q
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
real
(
kind
=
c_double
)
::
d
(
self
%
na
),
e
(
self
%
na
)
#ifdef USE_ASSUMED_SIZE
...
...
@@ -794,9 +822,10 @@ module elpa_api
!> \param q single real matrix: on output contains the eigenvectors
!> \param error integer, optional : error code, which can be queried with elpa_strerr
abstract
interface
subroutine
elpa_solve_tridi_
single_real
_i
(
self
,
d
,
e
,
q
,
error
)
subroutine
elpa_solve_tridi_
f
_i
(
self
,
d
,
e
,
q
,
error
)
use
iso_c_binding
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
real
(
kind
=
c_float
)
::
d
(
self
%
na
),
e
(
self
%
na
)
#ifdef USE_ASSUMED_SIZE
...
...
@@ -814,6 +843,7 @@ module elpa_api
abstract
interface
subroutine
elpa_destroy_i
(
self
)
import
elpa_t
implicit
none
class
(
elpa_t
)
::
self
end
subroutine
end
interface
...
...
src/elpa_impl.F90
View file @
28458c88
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment