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

Make more internal stuff private

parent c433fe71
......@@ -13,9 +13,7 @@ libelpa@SUFFIX@_public_la_FCFLAGS = $(AM_FCFLAGS) @FC_MODOUT@modules @FC_MODINC@
libelpa@SUFFIX@_public_la_SOURCES = \
src/elpa_driver/legacy_interface/elpa_legacy.F90 \
src/elpa1/legacy_interface/elpa1_legacy.F90 \
src/elpa1/elpa1_new_interface.F90 \
src/elpa2/legacy_interface/elpa2_legacy.F90 \
src/elpa2/elpa2_new_interface.F90 \
src/elpa1/legacy_interface/elpa1_auxiliary_legacy.F90 \
src/elpa1/elpa1_auxiliary_new_interface.F90 \
src/elpa1/elpa1_utilities.F90 \
......@@ -50,6 +48,8 @@ libelpa@SUFFIX@_private_la_SOURCES = \
src/elpa2/qr/elpa_qrkernels.F90 \
src/elpa2/qr/elpa_pdlarfb.F90 \
src/elpa2/qr/elpa_pdgeqrf.F90 \
src/elpa1/elpa1_new_interface.F90 \
src/elpa2/elpa2_new_interface.F90 \
src/elpa_options.c
EXTRA_libelpa@SUFFIX@_private_la_DEPENDENCIES = \
......
......@@ -54,36 +54,36 @@
#include "config-f90.h"
!> \brief Fortran module which provides helper routines for matrix calculations
module ELPA1_AUXILIARY_new
module elpa1_auxiliary_impl
use elpa_utilities
implicit none
public :: elpa_mult_at_b_real_double_new !< Multiply double-precision real matrices A**T * B
public :: elpa_mult_at_b_real_double_impl !< Multiply double-precision real matrices A**T * B
public :: elpa_mult_ah_b_complex_double_new !< Multiply double-precision complex matrices A**H * B
public :: elpa_mult_ah_b_complex_double_impl !< Multiply double-precision complex matrices A**H * B
public :: elpa_invert_trm_real_double_new !< Invert double-precision real triangular matrix
public :: elpa_invert_trm_real_double_impl !< Invert double-precision real triangular matrix
public :: elpa_invert_trm_complex_double_new !< Invert double-precision complex triangular matrix
public :: elpa_invert_trm_complex_double_impl !< Invert double-precision complex triangular matrix
public :: elpa_cholesky_real_double_new !< Cholesky factorization of a double-precision real matrix
public :: elpa_cholesky_real_double_impl !< Cholesky factorization of a double-precision real matrix
public :: elpa_cholesky_complex_double_new !< Cholesky factorization of a double-precision complex matrix
public :: elpa_cholesky_complex_double_impl !< Cholesky factorization of a double-precision complex matrix
public :: elpa_solve_tridi_double_new !< Solve tridiagonal eigensystem for a double-precision matrix with divide and conquer method
public :: elpa_solve_tridi_double_impl !< Solve tridiagonal eigensystem for a double-precision matrix with divide and conquer method
#ifdef WANT_SINGLE_PRECISION_REAL
public :: elpa_cholesky_real_single_new !< Cholesky factorization of a single-precision real matrix
public :: elpa_invert_trm_real_single_new !< Invert single-precision real triangular matrix
public :: elpa_mult_at_b_real_single_new !< Multiply single-precision real matrices A**T * B
public :: elpa_solve_tridi_single_new !< Solve tridiagonal eigensystem for a single-precision matrix with divide and conquer method
public :: elpa_cholesky_real_single_impl !< Cholesky factorization of a single-precision real matrix
public :: elpa_invert_trm_real_single_impl !< Invert single-precision real triangular matrix
public :: elpa_mult_at_b_real_single_impl !< Multiply single-precision real matrices A**T * B
public :: elpa_solve_tridi_single_impl !< Solve tridiagonal eigensystem for a single-precision matrix with divide and conquer method
#endif
#ifdef WANT_SINGLE_PRECISION_COMPLEX
public :: elpa_cholesky_complex_single_new !< Cholesky factorization of a single-precision complex matrix
public :: elpa_invert_trm_complex_single_new !< Invert single-precision complex triangular matrix
public :: elpa_mult_ah_b_complex_single_new !< Multiply single-precision complex matrices A**H * B
public :: elpa_cholesky_complex_single_impl !< Cholesky factorization of a single-precision complex matrix
public :: elpa_invert_trm_complex_single_impl !< Invert single-precision complex triangular matrix
public :: elpa_mult_ah_b_complex_single_impl !< Multiply single-precision complex matrices A**H * B
#endif
contains
......@@ -92,22 +92,22 @@ module ELPA1_AUXILIARY_new
#define DOUBLE_PRECISION
#include "../general/precision_macros.h"
function elpa_cholesky_real_double_new (na, a, lda, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, &
function elpa_cholesky_real_double_impl (na, a, lda, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, &
wantDebug) result(success)
#include "elpa_cholesky_template_new_interface.X90"
end function elpa_cholesky_real_double_new
end function elpa_cholesky_real_double_impl
#ifdef WANT_SINGLE_PRECISION_REAL
#define REALCASE 1
#define SINGLE_PRECISION
#include "../general/precision_macros.h"
function elpa_cholesky_real_single_new(na, a, lda, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, &
function elpa_cholesky_real_single_impl(na, a, lda, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, &
wantDebug) result(success)
#include "elpa_cholesky_template_new_interface.X90"
end function elpa_cholesky_real_single_new
end function elpa_cholesky_real_single_impl
#endif /* WANT_SINGLE_PRECSION_REAL */
......@@ -128,17 +128,17 @@ module ELPA1_AUXILIARY_new
!> \param mpi_comm_cols MPI communicator for columns
!> \param wantDebug logical, more debug information on failure
!> \result succes logical, reports success or failure
function elpa_invert_trm_real_double_new(na, a, lda, nblk, matrixCols, mpi_comm_rows, &
function elpa_invert_trm_real_double_impl(na, a, lda, nblk, matrixCols, mpi_comm_rows, &
mpi_comm_cols, wantDebug) result(success)
#include "elpa_invert_trm_new_interface.X90"
end function elpa_invert_trm_real_double_new
end function elpa_invert_trm_real_double_impl
#if WANT_SINGLE_PRECISION_REAL
#define REALCASE 1
#define SINGLE_PRECISION
#include "../general/precision_macros.h"
!> \brief elpa_invert_trm_real_single_new: Inverts a single-precision real upper triangular matrix
!> \brief elpa_invert_trm_real_single_impl: Inverts a single-precision real upper triangular matrix
!> \details
!> \param na Order of matrix
!> \param a(lda,matrixCols) Distributed matrix which should be inverted
......@@ -152,10 +152,10 @@ module ELPA1_AUXILIARY_new
!> \param mpi_comm_cols MPI communicator for columns
!> \param wantDebug logical, more debug information on failure
!> \result succes logical, reports success or failure
function elpa_invert_trm_real_single_new(na, a, lda, nblk, matrixCols, mpi_comm_rows, &
function elpa_invert_trm_real_single_impl(na, a, lda, nblk, matrixCols, mpi_comm_rows, &
mpi_comm_cols, wantDebug) result(success)
#include "elpa_invert_trm_new_interface.X90"
end function elpa_invert_trm_real_single_new
end function elpa_invert_trm_real_single_impl
#endif /* WANT_SINGLE_PRECISION_REAL */
......@@ -164,7 +164,7 @@ module ELPA1_AUXILIARY_new
#define DOUBLE_PRECISION
#include "../general/precision_macros.h"
!> \brief elpa_cholesky_complex_double_new: Cholesky factorization of a double-precision complex hermitian matrix
!> \brief elpa_cholesky_complex_double_impl: Cholesky factorization of a double-precision complex hermitian matrix
!> \details
!> \param na Order of matrix
!> \param a(lda,matrixCols) Distributed matrix which should be factorized.
......@@ -179,11 +179,12 @@ module ELPA1_AUXILIARY_new
!> \param mpi_comm_cols MPI communicator for columns
!> \param wantDebug logical, more debug information on failure
!> \result succes logical, reports success or failure
function elpa_cholesky_complex_double_new(na, a, lda, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, wantDebug) result(success)
function elpa_cholesky_complex_double_impl(na, a, lda, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, &
wantDebug) result(success)
#include "elpa_cholesky_template_new_interface.X90"
end function elpa_cholesky_complex_double_new
end function elpa_cholesky_complex_double_impl
#ifdef WANT_SINGLE_PRECISION_COMPLEX
......@@ -191,7 +192,7 @@ module ELPA1_AUXILIARY_new
#define SINGLE_PRECISION
#include "../general/precision_macros.h"
!> \brief elpa_cholesky_complex_single_new: Cholesky factorization of a single-precision complex hermitian matrix
!> \brief elpa_cholesky_complex_single_impl: Cholesky factorization of a single-precision complex hermitian matrix
!> \details
!> \param na Order of matrix
!> \param a(lda,matrixCols) Distributed matrix which should be factorized.
......@@ -206,11 +207,12 @@ module ELPA1_AUXILIARY_new
!> \param mpi_comm_cols MPI communicator for columns
!> \param wantDebug logical, more debug information on failure
!> \result succes logical, reports success or failure
function elpa_cholesky_complex_single_new(na, a, lda, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, wantDebug) result(success)
function elpa_cholesky_complex_single_impl(na, a, lda, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, &
wantDebug) result(success)
#include "elpa_cholesky_template_new_interface.X90"
end function elpa_cholesky_complex_single_new
end function elpa_cholesky_complex_single_impl
#endif /* WANT_SINGLE_PRECISION_COMPLEX */
......@@ -218,7 +220,7 @@ module ELPA1_AUXILIARY_new
#define DOUBLE_PRECISION
#include "../general/precision_macros.h"
!> \brief elpa_invert_trm_complex_double_new: Inverts a double-precision complex upper triangular matrix
!> \brief elpa_invert_trm_complex_double_impl: Inverts a double-precision complex upper triangular matrix
!> \details
!> \param na Order of matrix
!> \param a(lda,matrixCols) Distributed matrix which should be inverted
......@@ -233,17 +235,17 @@ module ELPA1_AUXILIARY_new
!> \param wantDebug logical, more debug information on failure
!> \result succes logical, reports success or failure
function elpa_invert_trm_complex_double_new(na, a, lda, nblk, matrixCols, mpi_comm_rows, &
function elpa_invert_trm_complex_double_impl(na, a, lda, nblk, matrixCols, mpi_comm_rows, &
mpi_comm_cols, wantDebug) result(success)
#include "elpa_invert_trm_new_interface.X90"
end function elpa_invert_trm_complex_double_new
end function elpa_invert_trm_complex_double_impl
#ifdef WANT_SINGLE_PRECISION_COMPLEX
#define COMPLEXCASE 1
#define SINGLE_PRECISION
#include "../general/precision_macros.h"
!> \brief elpa_invert_trm_complex_single_new: Inverts a single-precision complex upper triangular matrix
!> \brief elpa_invert_trm_complex_single_impl: Inverts a single-precision complex upper triangular matrix
!> \details
!> \param na Order of matrix
!> \param a(lda,matrixCols) Distributed matrix which should be inverted
......@@ -258,27 +260,27 @@ module ELPA1_AUXILIARY_new
!> \param wantDebug logical, more debug information on failure
!> \result succes logical, reports success or failure
function elpa_invert_trm_complex_single_new(na, a, lda, nblk, matrixCols, mpi_comm_rows, &
function elpa_invert_trm_complex_single_impl(na, a, lda, nblk, matrixCols, mpi_comm_rows, &
mpi_comm_cols, wantDebug) result(success)
#include "elpa_invert_trm_new_interface.X90"
end function elpa_invert_trm_complex_single_new
end function elpa_invert_trm_complex_single_impl
#endif /* WANT_SINGE_PRECISION_COMPLEX */
#define REALCASE 1
#define DOUBLE_PRECISION
#include "../general/precision_macros.h"
function elpa_mult_at_b_real_double_new(uplo_a, uplo_c, na, ncb, a, lda, ldaCols, b, ldb, ldbCols, nblk, &
function elpa_mult_at_b_real_double_impl(uplo_a, uplo_c, na, ncb, a, lda, ldaCols, b, ldb, ldbCols, nblk, &
mpi_comm_rows, mpi_comm_cols, c, ldc, ldcCols) result(success)
#include "elpa_multiply_a_b_new_interface.X90"
end function elpa_mult_at_b_real_double_new
end function elpa_mult_at_b_real_double_impl
#if WANT_SINGLE_PRECISION_REAL
#define REALCASE 1
#define SINGLE_PRECISION
#include "../general/precision_macros.h"
!> \brief elpa_mult_at_b_real_single_new: Performs C : = A**T * B
!> \brief elpa_mult_at_b_real_single_impl: Performs C : = A**T * B
!> where A is a square matrix (na,na) which is optionally upper or lower triangular
!> B is a (na,ncb) matrix
!> C is a (na,ncb) matrix where optionally only the upper or lower
......@@ -310,12 +312,12 @@ module ELPA1_AUXILIARY_new
!> \param ldc leading dimension of matrix c
!> \result success
function elpa_mult_at_b_real_single_new(uplo_a, uplo_c, na, ncb, a, lda, ldaCols, b, ldb, ldbCols, nblk, &
function elpa_mult_at_b_real_single_impl(uplo_a, uplo_c, na, ncb, a, lda, ldaCols, b, ldb, ldbCols, nblk, &
mpi_comm_rows, mpi_comm_cols, c, ldc, ldcCols) result(success)
#include "elpa_multiply_a_b_new_interface.X90"
end function elpa_mult_at_b_real_single_new
end function elpa_mult_at_b_real_single_impl
#endif /* WANT_SINGLE_PRECISION_REAL */
......@@ -324,7 +326,7 @@ module ELPA1_AUXILIARY_new
#define DOUBLE_PRECISION
#include "../general/precision_macros.h"
!> \brief elpa_mult_ah_b_complex_double_new: Performs C : = A**H * B
!> \brief elpa_mult_ah_b_complex_double_impl: Performs C : = A**H * B
!> where A is a square matrix (na,na) which is optionally upper or lower triangular
!> B is a (na,ncb) matrix
!> C is a (na,ncb) matrix where optionally only the upper or lower
......@@ -358,18 +360,18 @@ module ELPA1_AUXILIARY_new
!> \param ldc leading dimension of matrix c
!> \result success
function elpa_mult_ah_b_complex_double_new(uplo_a, uplo_c, na, ncb, a, lda, ldaCols, b, ldb, ldbCols, nblk, &
function elpa_mult_ah_b_complex_double_impl(uplo_a, uplo_c, na, ncb, a, lda, ldaCols, b, ldb, ldbCols, nblk, &
mpi_comm_rows, mpi_comm_cols, c, ldc, ldcCols) result(success)
#include "elpa_multiply_a_b_new_interface.X90"
end function elpa_mult_ah_b_complex_double_new
end function elpa_mult_ah_b_complex_double_impl
#ifdef WANT_SINGLE_PRECISION_COMPLEX
#define COMPLEXCASE 1
#define SINGLE_PRECISION
#include "../general/precision_macros.h"
!> \brief elpa_mult_ah_b_complex_single_new: Performs C : = A**H * B
!> \brief elpa_mult_ah_b_complex_single_impl: Performs C : = A**H * B
!> where A is a square matrix (na,na) which is optionally upper or lower triangular
!> B is a (na,ncb) matrix
!> C is a (na,ncb) matrix where optionally only the upper or lower
......@@ -403,12 +405,12 @@ module ELPA1_AUXILIARY_new
!> \param ldc leading dimension of matrix c
!> \result success
function elpa_mult_ah_b_complex_single_new(uplo_a, uplo_c, na, ncb, a, lda, ldaCols, b, ldb, ldbCols, nblk, &
function elpa_mult_ah_b_complex_single_impl(uplo_a, uplo_c, na, ncb, a, lda, ldaCols, b, ldb, ldbCols, nblk, &
mpi_comm_rows, mpi_comm_cols, c, ldc, ldcCols) result(success)
#include "elpa_multiply_a_b_new_interface.X90"
end function elpa_mult_ah_b_complex_single_new
end function elpa_mult_ah_b_complex_single_impl
#endif /* WANT_SINGLE_PRECISION_COMPLEX */
......@@ -416,7 +418,7 @@ module ELPA1_AUXILIARY_new
#define DOUBLE_PRECISION
#include "../general/precision_macros.h"
!> \brief elpa_solve_tridi_double_new: Solve tridiagonal eigensystem for a double-precision matrix with divide and conquer method
!> \brief elpa_solve_tridi_double_impl: Solve tridiagonal eigensystem for a double-precision matrix with divide and conquer method
!> \details
!>
!> \param na Matrix dimension
......@@ -433,7 +435,7 @@ module ELPA1_AUXILIARY_new
!> \param wantDebug logical, give more debug information if .true.
!> \result success logical, .true. on success, else .false.
function elpa_solve_tridi_double_new(na, nev, d, e, q, ldq, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, wantDebug) &
function elpa_solve_tridi_double_impl(na, nev, d, e, q, ldq, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols, wantDebug) &
result(success)
#include "elpa_solve_tridi_new_interface.X90"
......@@ -446,7 +448,7 @@ module ELPA1_AUXILIARY_new
#define SINGLE_PRECISION
#include "../general/precision_macros.h"
!> \brief elpa_solve_tridi_single_new: Solve tridiagonal eigensystem for a single-precision matrix with divide and conquer method
!> \brief elpa_solve_tridi_single_impl: Solve tridiagonal eigensystem for a single-precision matrix with divide and conquer method
!> \details
!>
!> \param na Matrix dimension
......@@ -463,7 +465,7 @@ module ELPA1_AUXILIARY_new
!> \param wantDebug logical, give more debug information if .true.
!> \result success logical, .true. on success, else .false.
function elpa_solve_tridi_single_new(na, nev, d, e, q, ldq, nblk, matrixCols, mpi_comm_rows, &
function elpa_solve_tridi_single_impl(na, nev, d, e, q, ldq, nblk, matrixCols, mpi_comm_rows, &
mpi_comm_cols, wantDebug) result(success)
#include "elpa_solve_tridi_new_interface.X90"
......@@ -475,5 +477,5 @@ module ELPA1_AUXILIARY_new
end module elpa1_auxiliary_new
end module elpa1_auxiliary_impl
......@@ -68,7 +68,7 @@ module ELPA1_COMPUTE
public :: trans_ev_real
public :: solve_tridi_double
public :: solve_tridi_double_new
public :: solve_tridi_double_impl
interface tridiag_real
module procedure tridiag_real_double
......@@ -82,7 +82,7 @@ module ELPA1_COMPUTE
public :: tridiag_real_single ! Transform real single-precision symmetric matrix to tridiagonal form
public :: trans_ev_real_single ! Transform real single-precision eigenvectors of a tridiagonal matrix back
public :: solve_tridi_single
public :: solve_tridi_single_new
public :: solve_tridi_single_impl
#endif
public :: tridiag_complex_double ! Transform complex hermitian matrix to tridiagonal form
......
......@@ -81,10 +81,10 @@
#include "config-f90.h"
!> \brief Fortran module which provides the routines to use the one-stage ELPA solver
module ELPA1_new
module elpa1_impl
use, intrinsic :: iso_c_binding
use elpa_utilities
use elpa1_auxiliary_new
use elpa1_auxiliary_impl
use elpa1_utilities
implicit none
......@@ -92,46 +92,46 @@ module ELPA1_new
! The following routines are public:
private
public :: elpa_get_communicators_new !< Sets MPI row/col communicators as needed by ELPA
public :: elpa_get_communicators_impl !< Sets MPI row/col communicators as needed by ELPA
public :: elpa_solve_evp_real_1stage_double_new !< Driver routine for real double-precision 1-stage eigenvalue problem
public :: elpa_solve_evp_real_1stage_double_impl !< Driver routine for real double-precision 1-stage eigenvalue problem
#ifdef WANT_SINGLE_PRECISION_REAL
public :: elpa_solve_evp_real_1stage_single_new !< Driver routine for real single-precision 1-stage eigenvalue problem
public :: elpa_solve_evp_real_1stage_single_impl !< Driver routine for real single-precision 1-stage eigenvalue problem
#endif
public :: elpa_solve_evp_complex_1stage_double_new !< Driver routine for complex 1-stage eigenvalue problem
public :: elpa_solve_evp_complex_1stage_double_impl !< Driver routine for complex 1-stage eigenvalue problem
#ifdef WANT_SINGLE_PRECISION_COMPLEX
public :: elpa_solve_evp_complex_1stage_single_new !< Driver routine for complex 1-stage eigenvalue problem
public :: elpa_solve_evp_complex_1stage_single_impl !< Driver routine for complex 1-stage eigenvalue problem
#endif
! imported from elpa1_auxilliary
public :: elpa_mult_at_b_real_double_new !< Multiply double-precision real matrices A**T * B
public :: elpa_mult_at_b_real_double_impl !< Multiply double-precision real matrices A**T * B
public :: elpa_mult_ah_b_complex_double_new !< Multiply double-precision complex matrices A**H * B
public :: elpa_mult_ah_b_complex_double_impl !< Multiply double-precision complex matrices A**H * B
public :: elpa_invert_trm_real_double_new !< Invert double-precision real triangular matrix
public :: elpa_invert_trm_real_double_impl !< Invert double-precision real triangular matrix
public :: elpa_invert_trm_complex_double_new !< Invert double-precision complex triangular matrix
public :: elpa_invert_trm_complex_double_impl !< Invert double-precision complex triangular matrix
public :: elpa_cholesky_real_double_new !< Cholesky factorization of a double-precision real matrix
public :: elpa_cholesky_real_double_impl !< Cholesky factorization of a double-precision real matrix
public :: elpa_cholesky_complex_double_new !< Cholesky factorization of a double-precision complex matrix
public :: elpa_cholesky_complex_double_impl !< Cholesky factorization of a double-precision complex matrix
public :: elpa_solve_tridi_double_new !< Solve a double-precision tridiagonal eigensystem with divide and conquer method
public :: elpa_solve_tridi_double_impl !< Solve a double-precision tridiagonal eigensystem with divide and conquer method
#ifdef WANT_SINGLE_PRECISION_REAL
public :: elpa_mult_at_b_real_single_new !< Multiply single-precision real matrices A**T * B
public :: elpa_invert_trm_real_single_new !< Invert single-precision real triangular matrix
public :: elpa_cholesky_real_single_new !< Cholesky factorization of a single-precision real matrix
public :: elpa_solve_tridi_single_new !< Solve a single-precision tridiagonal eigensystem with divide and conquer method
public :: elpa_mult_at_b_real_single_impl !< Multiply single-precision real matrices A**T * B
public :: elpa_invert_trm_real_single_impl !< Invert single-precision real triangular matrix
public :: elpa_cholesky_real_single_impl !< Cholesky factorization of a single-precision real matrix
public :: elpa_solve_tridi_single_impl !< Solve a single-precision tridiagonal eigensystem with divide and conquer method
#endif
#ifdef WANT_SINGLE_PRECISION_COMPLEX
public :: elpa_mult_ah_b_complex_single_new !< Multiply single-precision complex matrices A**H * B
public :: elpa_invert_trm_complex_single_new !< Invert single-precision complex triangular matrix
public :: elpa_cholesky_complex_single_new !< Cholesky factorization of a single-precision complex matrix
public :: elpa_mult_ah_b_complex_single_impl !< Multiply single-precision complex matrices A**H * B
public :: elpa_invert_trm_complex_single_impl !< Invert single-precision complex triangular matrix
public :: elpa_cholesky_complex_single_impl !< Cholesky factorization of a single-precision complex matrix
#endif
! Timing results, set by every call to solve_evp_xxx
......@@ -143,7 +143,7 @@ module ELPA1_new
logical, public :: elpa_print_times = .false. !< Set elpa_print_times to .true. for explicit timing outputs
!> \brief elpa_solve_evp_real_1stage_double_new: Fortran function to solve the real eigenvalue problem with 1-stage solver. This is called by "elpa_solve_evp_real"
!> \brief elpa_solve_evp_real_1stage_double_impl: Fortran function to solve the real eigenvalue problem with 1-stage solver. This is called by "elpa_solve_evp_real"
!>
! Parameters
!
......@@ -200,7 +200,7 @@ contains
!> \result mpierr integer error value of mpi_comm_split function
function elpa_get_communicators_new(mpi_comm_global, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols) result(mpierr)
function elpa_get_communicators_impl(mpi_comm_global, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols) result(mpierr)
! use precision
use elpa_mpi
use iso_c_binding
......@@ -219,10 +219,10 @@ function elpa_get_communicators_new(mpi_comm_global, my_prow, my_pcol, mpi_comm_
call mpi_comm_split(mpi_comm_global,my_pcol,my_prow,mpi_comm_rows,mpierr)
call mpi_comm_split(mpi_comm_global,my_prow,my_pcol,mpi_comm_cols,mpierr)
end function elpa_get_communicators_new
end function elpa_get_communicators_impl
!> \brief elpa_solve_evp_real_1stage_double_new: Fortran function to solve the real double-precision eigenvalue problem with 1-stage solver
!> \brief elpa_solve_evp_real_1stage_double_impl: Fortran function to solve the real double-precision eigenvalue problem with 1-stage solver
!>
! Parameters
!
......@@ -266,7 +266,7 @@ end function elpa_get_communicators_new
#undef DOUBLE_PRECISION
#ifdef WANT_SINGLE_PRECISION_REAL
!> \brief elpa_solve_evp_real_1stage_single_new: Fortran function to solve the real single-precision eigenvalue problem with 1-stage solver
!> \brief elpa_solve_evp_real_1stage_single_impl: Fortran function to solve the real single-precision eigenvalue problem with 1-stage solver
!>
! Parameters
!
......@@ -310,7 +310,7 @@ end function elpa_get_communicators_new
#undef SINGLE_PRECISION
#endif /* WANT_SINGLE_PRECISION_REAL */
!> \brief elpa_solve_evp_complex_1stage_double_new: Fortran function to solve the complex double-precision eigenvalue problem with 1-stage solver
!> \brief elpa_solve_evp_complex_1stage_double_impl: Fortran function to solve the complex double-precision eigenvalue problem with 1-stage solver
!>
! Parameters
!
......@@ -355,7 +355,7 @@ end function elpa_get_communicators_new
#ifdef WANT_SINGLE_PRECISION_COMPLEX
!> \brief elpa_solve_evp_complex_1stage_single_new: Fortran function to solve the complex single-precision eigenvalue problem with 1-stage solver
!> \brief elpa_solve_evp_complex_1stage_single_impl: Fortran function to solve the complex single-precision eigenvalue problem with 1-stage solver
!>
! Parameters
!
......@@ -399,4 +399,4 @@ end function elpa_get_communicators_new
#undef SINGLE_PRECISION
#endif /* WANT_SINGLE_PRECISION_COMPLEX */
end module ELPA1_new
end module ELPA1_impl
......@@ -56,7 +56,7 @@
subroutine solve_tridi_&
&PRECISION&
&_new ( na, nev, d, e, q, ldq, nblk, matrixCols, mpi_comm_rows, &
&_impl ( na, nev, d, e, q, ldq, nblk, matrixCols, mpi_comm_rows, &
mpi_comm_cols, wantDebug, success )
#ifdef HAVE_DETAILED_TIMINGS
......@@ -147,7 +147,7 @@ subroutine solve_tridi_&
endif
call solve_tridi_col_&
&PRECISION&
&_new (l_cols, nev1, nc, d(nc+1), e(nc+1), q, ldq, nblk, &
&_impl (l_cols, nev1, nc, d(nc+1), e(nc+1), q, ldq, nblk, &
matrixCols, mpi_comm_rows, wantDebug, success)
if (.not.(success)) then
call timer%stop("solve_tridi" // PRECISION_SUFFIX)
......@@ -350,11 +350,11 @@ subroutine solve_tridi_&
end subroutine solve_tridi_&
&PRECISION&
&_new
&_impl
subroutine solve_tridi_col_&
&PRECISION&
&_new ( na, nev, nqoff, d, e, q, ldq, nblk, matrixCols, mpi_comm_rows, wantDebug, success )
&_impl ( na, nev, nqoff, d, e, q, ldq, nblk, matrixCols, mpi_comm_rows, wantDebug, success )
! Solves the symmetric, tridiagonal eigenvalue problem on one processor column
! with the divide and conquer method.
......@@ -452,7 +452,7 @@ subroutine solve_tridi_&
call solve_tridi_single_problem_&
&PRECISION&
&_new &
&_impl &
(nlen,d(noff+1),e(noff+1), &
q(nqoff+noff+1,noff+1),ubound(q,dim=1), wantDebug, success)
......@@ -484,7 +484,7 @@ subroutine solve_tridi_&
nlen = limits(my_prow+1)-noff ! Size of subproblem
call solve_tridi_single_problem_&
&PRECISION&
&_new &
&_impl &
(nlen,d(noff+1),e(noff+1),qmat1, &
ubound(qmat1,dim=1), wantDebug, success)
......@@ -581,11 +581,11 @@ subroutine solve_tridi_&
end subroutine solve_tridi_col_&
&PRECISION&
&_new
&_impl
recursive subroutine solve_tridi_single_problem_&
&PRECISION&
&_new (nlen, d, e, q, ldq, wantDebug, success)
&_impl (nlen, d, e, q, ldq, wantDebug, success)
! Solves the symmetric, tridiagonal eigenvalue problem on a single processor.
! Takes precautions if DSTEDC fails or if the eigenvalues are not ordered correctly.
......@@ -713,5 +713,5 @@ subroutine solve_tridi_&
end subroutine solve_tridi_single_problem_&
&PRECISION&
&_new
&_impl
......@@ -58,7 +58,7 @@ function elpa_solve_evp_&
&MATH_DATATYPE&
&_1stage_&
&PRECISION&
&_new ( na, nev, a, lda, ev, q, ldq, nblk, matrixCols, mpi_comm_rows, &
&_impl ( na, nev, a, lda, ev, q, ldq, nblk, matrixCols, mpi_comm_rows, &
mpi_comm_cols, mpi_comm_all, useGPU) result(success)
use precision
use cuda_functions
......@@ -119,7 +119,7 @@ function elpa_solve_evp_&
&MATH_DATATYPE&
&_1stage_&
&PRECISION&
&_new")
&")
call timer%start("mpi_communication")
......@@ -279,7 +279,7 @@ function elpa_solve_evp_&
&MATH_DATATYPE&
&_1stage_&
&PRECISION&
&_new")
&")
end function
......
......@@ -90,7 +90,7 @@
&MATH_DATATYPE&
&_&
&PRECISION&
&_new")
&")
call timer%start("mpi_communication")
call mpi_comm_rank(mpi_comm_rows,my_prow,mpierr)
......@@ -338,7 +338,7 @@
&MATH_DATATYPE&
&_&
&PRECISION&