Line data Source code
1 : ! This file is part of ELPA.
2 : !
3 : ! The ELPA library was originally created by the ELPA consortium,
4 : ! consisting of the following organizations:
5 : !
6 : ! - Max Planck Computing and Data Facility (MPCDF), formerly known as
7 : ! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
8 : ! - Bergische Universität Wuppertal, Lehrstuhl für angewandte
9 : ! Informatik,
10 : ! - Technische Universität München, Lehrstuhl für Informatik mit
11 : ! Schwerpunkt Wissenschaftliches Rechnen ,
12 : ! - Fritz-Haber-Institut, Berlin, Abt. Theorie,
13 : ! - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
14 : ! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
15 : ! and
16 : ! - IBM Deutschland GmbH
17 : !
18 : ! This particular source code file contains additions, changes and
19 : ! enhancements authored by Intel Corporation which is not part of
20 : ! the ELPA consortium.
21 : !
22 : ! More information can be found here:
23 : ! http://elpa.mpcdf.mpg.de/
24 : !
25 : ! ELPA is free software: you can redistribute it and/or modify
26 : ! it under the terms of the version 3 of the license of the
27 : ! GNU Lesser General Public License as published by the Free
28 : ! Software Foundation.
29 : !
30 : ! ELPA is distributed in the hope that it will be useful,
31 : ! but WITHOUT ANY WARRANTY; without even the implied warranty of
32 : ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33 : ! GNU Lesser General Public License for more details.
34 : !
35 : ! You should have received a copy of the GNU Lesser General Public License
36 : ! along with ELPA. If not, see <http://www.gnu.org/licenses/>
37 : !
38 : ! ELPA reflects a substantial effort on the part of the original
39 : ! ELPA consortium, and we ask you to respect the spirit of the
40 : ! license that we chose: i.e., please contribute any changes you
41 : ! may have back to the original ELPA library distribution, and keep
42 : ! any derivatives of ELPA under the same license that we chose for
43 : ! the original distribution, the GNU Lesser General Public License.
44 : !
45 : !
46 : ! ELPA1 -- Faster replacements for ScaLAPACK symmetric eigenvalue routines
47 : !
48 : ! Copyright of the original code rests with the authors inside the ELPA
49 : ! consortium. The copyright of any additional modifications shall rest
50 : ! with their original authors, but shall adhere to the licensing terms
51 : ! distributed along with the original code in the file "COPYING".
52 : !
53 : ! Author: A. Marek, MPCDF
54 :
55 :
56 :
57 : #include "../general/sanity.F90"
58 :
59 : use elpa1_compute, solve_tridi_&
60 : &PRECISION&
61 : &_private_impl => solve_tridi_&
62 : &PRECISION&
63 : &_impl
64 : use precision
65 : use elpa_abstract_impl
66 :
67 : implicit none
68 : class(elpa_abstract_impl_t), intent(inout) :: obj
69 : integer(kind=ik) :: na, nev, ldq, nblk, matrixCols, mpi_comm_rows, mpi_comm_cols
70 : real(kind=REAL_DATATYPE) :: d(obj%na), e(obj%na)
71 : #ifdef USE_ASSUMED_SIZE
72 : real(kind=REAL_DATATYPE) :: q(obj%local_nrows,*)
73 : #else
74 : real(kind=REAL_DATATYPE) :: q(obj%local_nrows, obj%local_ncols)
75 : #endif
76 :
77 : logical :: wantDebug
78 : logical :: success
79 :
80 : integer :: debug, error
81 :
82 : call obj%timer%start("elpa_solve_tridi_public_&
83 : &MATH_DATATYPE&
84 : &_&
85 : &PRECISION&
86 720 : &")
87 720 : na = obj%na
88 720 : nev = obj%nev
89 720 : nblk = obj%nblk
90 720 : ldq = obj%local_nrows
91 720 : matrixCols = obj%local_ncols
92 :
93 720 : call obj%get("mpi_comm_rows", mpi_comm_rows,error)
94 720 : if (error .ne. ELPA_OK) then
95 0 : print *,"Problem getting option. Aborting..."
96 0 : stop
97 : endif
98 720 : call obj%get("mpi_comm_cols", mpi_comm_cols,error)
99 720 : if (error .ne. ELPA_OK) then
100 0 : print *,"Problem getting option. Aborting..."
101 0 : stop
102 : endif
103 :
104 720 : call obj%get("debug",debug,error)
105 720 : if (error .ne. ELPA_OK) then
106 0 : print *,"Problem getting option. Aborting..."
107 0 : stop
108 : endif
109 720 : if (debug == 1) then
110 0 : wantDebug = .true.
111 : else
112 720 : wantDebug = .false.
113 : endif
114 720 : success = .false.
115 :
116 : call solve_tridi_&
117 : &PRECISION&
118 : &_private_impl(obj, na, nev, d, e, q, ldq, nblk, matrixCols, &
119 720 : mpi_comm_rows, mpi_comm_cols,.false., wantDebug, success)
120 :
121 : call obj%timer%stop("elpa_solve_tridi_public_&
122 : &MATH_DATATYPE&
123 : &_&
124 : &PRECISION&
125 720 : &")
126 :
127 :
128 : #undef REALCASE
129 : #undef COMPLEXCASE
130 : #undef DOUBLE_PRECISION
131 : #undef SINGLE_PRECISION
132 :
|