Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
fleur
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
51
Issues
51
List
Boards
Labels
Service Desk
Milestones
Operations
Operations
Incidents
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
fleur
fleur
Commits
6d4cf118
Commit
6d4cf118
authored
Jun 06, 2018
by
Gregor Michalicek
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix bug in eigenvector IO for ChASE program path
...together with Miriam Hinzen.
parent
121770ea
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
8 additions
and
12 deletions
+8
-12
diagonalization/chase_diag.F90
diagonalization/chase_diag.F90
+5
-7
diagonalization/eigen_diag.F90
diagonalization/eigen_diag.F90
+2
-4
eigen/eigen.F90
eigen/eigen.F90
+1
-1
No files found.
diagonalization/chase_diag.F90
View file @
6d4cf118
...
...
@@ -71,10 +71,9 @@ IMPLICIT NONE
END
IF
END
SUBROUTINE
init_chase
SUBROUTINE
chase_diag
(
mpi
,
hmat
,
smat
,
ikpt
,
jsp
,
iter
,
ne
,
eig
,
zmat
)
SUBROUTINE
chase_diag
(
hmat
,
smat
,
ikpt
,
jsp
,
iter
,
ne
,
eig
,
zmat
)
USE
m_types
USE
m_types_mpi
USE
m_judft
USE
iso_c_binding
USE
m_eig66_io
...
...
@@ -82,7 +81,6 @@ IMPLICIT NONE
!Simple driver to solve Generalized Eigenvalue Problem using the ChASE library
IMPLICIT
NONE
TYPE
(
t_mpi
),
INTENT
(
IN
)
::
mpi
TYPE
(
t_mat
),
INTENT
(
INOUT
)
::
hmat
,
smat
INTEGER
,
INTENT
(
IN
)
::
ikpt
INTEGER
,
INTENT
(
IN
)
::
jsp
...
...
@@ -139,14 +137,14 @@ IMPLICIT NONE
if
(
iter
.EQ.
1
)
then
call
chase_r
(
hmat
%
data_r
,
hmat
%
matsize1
,
zMatTemp
%
data_r
,
eigenvalues
,
nev
,
nex
,
25
,
1e-10
,
'R'
,
'S'
)
else
CALL
read_eig
(
chase_eig_id
,
ikpt
,
jsp
,
n
_start
=
mpi
%
n_size
,
n_end
=
mpi
%
n_rank
,
n
eig
=
nbands
,
eig
=
eigenvalues
,
zmat
=
zMatTemp
)
CALL
read_eig
(
chase_eig_id
,
ikpt
,
jsp
,
neig
=
nbands
,
eig
=
eigenvalues
,
zmat
=
zMatTemp
)
call
chase_r
(
hmat
%
data_r
,
hmat
%
matsize1
,
zMatTemp
%
data_r
,
eigenvalues
,
nev
,
nex
,
25
,
1e-10
,
'A'
,
'S'
)
end
if
ne
=
nev
CALL
write_eig
(
chase_eig_id
,
ikpt
,
jsp
,
nev
+
nex
,
nev
+
nex
,&
eigenvalues
(:(
nev
+
nex
)),
n_start
=
mpi
%
n_size
,
n_end
=
mpi
%
n_rank
,
zmat
=
zMatTemp
)
eigenvalues
(:(
nev
+
nex
)),
zmat
=
zMatTemp
)
! --> recover the generalized eigenvectors z by solving z' = l^t * z
CALL
dtrtrs
(
'U'
,
'N'
,
'N'
,
hmat
%
matsize1
,
nev
,
smat
%
data_r
,
smat
%
matsize1
,
zMatTemp
%
data_r
,
zmat
%
matsize1
,
info
)
...
...
@@ -194,14 +192,14 @@ IMPLICIT NONE
if
(
iter
.EQ.
1
)
then
call
chase_c
(
hmat
%
data_c
,
hmat
%
matsize1
,
zMatTemp
%
data_c
,
eigenvalues
,
nev
,
nex
,
25
,
1e-10
,
'R'
,
'S'
)
else
CALL
read_eig
(
chase_eig_id
,
ikpt
,
jsp
,
n
_start
=
mpi
%
n_size
,
n_end
=
mpi
%
n_rank
,
n
eig
=
nbands
,
eig
=
eigenvalues
,
zmat
=
zMatTemp
)
CALL
read_eig
(
chase_eig_id
,
ikpt
,
jsp
,
neig
=
nbands
,
eig
=
eigenvalues
,
zmat
=
zMatTemp
)
call
chase_c
(
hmat
%
data_c
,
hmat
%
matsize1
,
zMatTemp
%
data_c
,
eigenvalues
,
nev
,
nex
,
25
,
1e-10
,
'A'
,
'S'
)
end
if
ne
=
nev
CALL
write_eig
(
chase_eig_id
,
ikpt
,
jsp
,
nev
+
nex
,
nev
+
nex
,&
eigenvalues
(:(
nev
+
nex
)),
n_start
=
mpi
%
n_size
,
n_end
=
mpi
%
n_rank
,
zmat
=
zMatTemp
)
eigenvalues
(:(
nev
+
nex
)),
zmat
=
zMatTemp
)
! --> recover the generalized eigenvectors z by solving z' = l^t * z
CALL
ztrtrs
(
'U'
,
'N'
,
'N'
,
hmat
%
matsize1
,
nev
,
smat
%
data_c
,
smat
%
matsize1
,
zMatTemp
%
data_c
,
zmat
%
matsize1
,
info
)
...
...
diagonalization/eigen_diag.F90
View file @
6d4cf118
...
...
@@ -39,20 +39,18 @@ CONTAINS
parallel_solver_available
=
any
((/
diag_elpa
,
diag_elemental
,
diag_scalapack
/)
>
0
)
END
FUNCTION
parallel_solver_available
SUBROUTINE
eigen_diag
(
mpi
,
hmat
,
smat
,
ikpt
,
jsp
,
iter
,
ne
,
eig
,
ev
)
SUBROUTINE
eigen_diag
(
hmat
,
smat
,
ikpt
,
jsp
,
iter
,
ne
,
eig
,
ev
)
USE
m_lapack_diag
USE
m_magma
USE
m_elpa
USE
m_scalapack
USE
m_elemental
USE
m_chase_diag
USE
m_types_mpi
USE
m_types_mpimat
IMPLICIT
NONE
#ifdef CPP_MPI
include
'mpif.h'
#endif
TYPE
(
t_mpi
),
INTENT
(
IN
)
::
mpi
CLASS
(
t_mat
),
INTENT
(
INOUT
)
::
smat
,
hmat
CLASS
(
t_mat
),
ALLOCATABLE
,
INTENT
(
OUT
)
::
ev
INTEGER
,
INTENT
(
IN
)
::
ikpt
...
...
@@ -85,7 +83,7 @@ CONTAINS
CALL
lapack_diag
(
hmat
,
smat
,
ne
,
eig
,
ev
)
CASE
(
diag_chase
)
#ifdef CPP_CHASE
CALL
chase_diag
(
mpi
,
hmat
,
smat
,
ikpt
,
jsp
,
iter
,
ne
,
eig
,
ev
)
CALL
chase_diag
(
hmat
,
smat
,
ikpt
,
jsp
,
iter
,
ne
,
eig
,
ev
)
#else
CALL
juDFT_error
(
'ChASE eigensolver selected but not available'
,
calledby
=
'eigen_diag'
)
#endif
...
...
eigen/eigen.F90
View file @
6d4cf118
...
...
@@ -162,7 +162,7 @@ CONTAINS
l_wu
=
.FALSE.
ne_all
=
DIMENSION
%
neigd
if
(
allocated
(
zmat
))
deallocate
(
zmat
)
CALL
eigen_diag
(
mpi
,
hmat
,
smat
,
nk
,
jsp
,
iter
,
ne_all
,
eig
,
zMat
)
CALL
eigen_diag
(
hmat
,
smat
,
nk
,
jsp
,
iter
,
ne_all
,
eig
,
zMat
)
DEALLOCATE
(
hmat
,
smat
)
!
!---> output results
...
...
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