mirror of https://gitlab.com/QEF/q-e.git
Some cleanup of the xml punch file: now the pseudopotential is properly
written and read. Added some consistency checks. Postprocessing programs not yet working (at least not all of them). C.S. git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@2144 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
parent
2ad0dd8fe4
commit
3f4d0ff92b
|
@ -315,6 +315,11 @@ PWOBJS = \
|
|||
../PW/rcgdiagg.o \
|
||||
../PW/rdiaghg.o \
|
||||
../PW/read_file.o \
|
||||
../PW/readin.o \
|
||||
../PW/read_pseudo.o \
|
||||
../PW/readvan.o \
|
||||
../PW/readnewvan.o \
|
||||
../PW/read_ncpp.o \
|
||||
../PW/restart.o \
|
||||
../PW/report_mag.o \
|
||||
../PW/rgen.o \
|
||||
|
|
|
@ -141,9 +141,11 @@ PWOBJS = \
|
|||
../PW/rdiaghg.o \
|
||||
../PW/read_conf_from_file.o \
|
||||
../PW/read_file.o \
|
||||
../PW/read_ncpp.o \
|
||||
../PW/readnewvan.o \
|
||||
../PW/readin.o \
|
||||
../PW/read_pseudo.o \
|
||||
../PW/readvan.o \
|
||||
../PW/readnewvan.o \
|
||||
../PW/read_ncpp.o \
|
||||
../PW/regterg.o \
|
||||
../PW/remove_atomic_rho.o \
|
||||
../PW/report_mag.o \
|
||||
|
|
|
@ -457,15 +457,14 @@ MODULE xml_io_base
|
|||
END IF
|
||||
!
|
||||
CALL copy_file( TRIM( file_pseudo ), &
|
||||
TRIM( dirname ) // "/" // TRIM( psfile( i ) ) )
|
||||
TRIM( dirname ) // "/" // TRIM( psfile(i) ) )
|
||||
!
|
||||
CALL iotk_write_attr( attr, "UNIT", "a.m.u.", FIRST = .TRUE. )
|
||||
CALL iotk_write_dat( iunpun, TRIM( atm( i ) )//"_MASS", &
|
||||
CALL iotk_write_dat( iunpun, TRIM( atm(i) )//"_MASS", &
|
||||
amass(i), ATTR = attr )
|
||||
!
|
||||
CALL iotk_link( iunpun, "PSEUDO_FOR_" // TRIM( atm( i ) ), &
|
||||
TRIM( psfile(i) ), CREATE = .FALSE., &
|
||||
BINARY = .FALSE., RAW = .TRUE. )
|
||||
CALL iotk_write_dat( iunpun, "PSEUDO_FOR_" // &
|
||||
& TRIM( atm(i) ), TRIM( psfile(i) ) )
|
||||
!
|
||||
END DO
|
||||
!
|
||||
|
@ -477,10 +476,10 @@ MODULE xml_io_base
|
|||
CALL iotk_write_attr( attr, "SPECIES", &
|
||||
& atm( ityp(i) ), FIRST = .TRUE. )
|
||||
CALL iotk_write_attr( attr, "INDEX", ityp(i) )
|
||||
CALL iotk_write_attr( attr, "tau", tau(:,i) )
|
||||
CALL iotk_write_attr( attr, "tau", tau(:,i) )
|
||||
CALL iotk_write_attr( attr, "if_pos", if_pos(:,i) )
|
||||
CALL iotk_write_empty( iunpun, &
|
||||
& "ATOM" // TRIM( iotk_index(i) ), attr )
|
||||
& "ATOM" // TRIM( iotk_index( i ) ), attr )
|
||||
!
|
||||
END DO
|
||||
!
|
||||
|
@ -525,7 +524,7 @@ MODULE xml_io_base
|
|||
CALL iotk_write_attr( attr, "NAME", sname(i) )
|
||||
!
|
||||
CALL iotk_write_empty( iunpun, &
|
||||
"SYMM" // TRIM( iotk_index(i) ), attr )
|
||||
"SYMM" // TRIM( iotk_index( i ) ), attr )
|
||||
!
|
||||
END DO
|
||||
!
|
||||
|
|
|
@ -192,6 +192,11 @@ PWOBJS = \
|
|||
../PW/rcgdiagg.o \
|
||||
../PW/rdiaghg.o \
|
||||
../PW/read_file.o \
|
||||
../PW/readin.o \
|
||||
../PW/read_pseudo.o \
|
||||
../PW/readvan.o \
|
||||
../PW/readnewvan.o \
|
||||
../PW/read_ncpp.o \
|
||||
../PW/report_mag.o \
|
||||
../PW/restart.o\
|
||||
../PW/rgen.o \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
!
|
||||
! Copyright (C) 2001 PWSCF group
|
||||
! Copyright (C) 2001-2005 Quantum-ESPRESSO group
|
||||
! This file is distributed under the terms of the
|
||||
! GNU General Public License. See the file `License'
|
||||
! in the root directory of the present distribution,
|
||||
|
@ -24,21 +24,21 @@ subroutine allocate_nlpot
|
|||
! nhm ! maximum number of beta functions
|
||||
!
|
||||
!
|
||||
USE parameters, ONLY : nbrx, nchix
|
||||
USE ions_base, ONLY : nat, ntyp => nsp, ityp
|
||||
USE cell_base, ONLY : tpiba2
|
||||
USE cellmd, ONLY : cell_factor
|
||||
USE gvect, ONLY : ngm, gcutm, ecutwfc, g
|
||||
USE klist, ONLY : xk, wk, ngk, nks, nkstot, xqq
|
||||
USE lsda_mod, ONLY : nspin
|
||||
USE ldaU, ONLY : Hubbard_lmax, ns, nsnew
|
||||
USE noncollin_module, ONLY : noncolin
|
||||
USE wvfct, ONLY : npwx, npw, igk, igk_l2g, g2kin
|
||||
USE us, ONLY : qrad, tab, tab_at, dq, nqx, nqxq
|
||||
USE uspp, ONLY : indv, nhtol, nhtolm, qq, dvan, deeq, vkb, nkb, &
|
||||
nkbus, nhtoj, becsum, qq_so, dvan_so, deeq_nc
|
||||
USE uspp_param, ONLY : lmaxq, lmaxkb, lll, nbeta, nh, nhm, tvanp
|
||||
USE spin_orb, ONLY : lspinorb, fcoef
|
||||
USE parameters, ONLY : nbrx, nchix
|
||||
USE ions_base, ONLY : nat, nsp, ityp
|
||||
USE cell_base, ONLY : tpiba2
|
||||
USE cellmd, ONLY : cell_factor
|
||||
USE gvect, ONLY : ngm, gcutm, ecutwfc, g
|
||||
USE klist, ONLY : xk, wk, ngk, nks, nkstot, xqq
|
||||
USE lsda_mod, ONLY : nspin
|
||||
USE ldaU, ONLY : Hubbard_lmax, ns, nsnew
|
||||
USE noncollin_module, ONLY : noncolin
|
||||
USE wvfct, ONLY : npwx, npw, igk, igk_l2g, g2kin
|
||||
USE us, ONLY : qrad, tab, tab_at, dq, nqx, nqxq
|
||||
USE uspp, ONLY : indv, nhtol, nhtolm, qq, dvan, deeq, vkb, nkb, &
|
||||
nkbus, nhtoj, becsum, qq_so, dvan_so, deeq_nc
|
||||
USE uspp_param, ONLY : lmaxq, lmaxkb, lll, nbeta, nh, nhm, tvanp
|
||||
USE spin_orb, ONLY : lspinorb, fcoef
|
||||
!
|
||||
implicit none
|
||||
!
|
||||
|
@ -53,7 +53,7 @@ subroutine allocate_nlpot
|
|||
!
|
||||
! igk relates the index of PW k+G to index in the list of G vector
|
||||
!
|
||||
allocate (igk( npwx))
|
||||
allocate (igk( npwx))
|
||||
|
||||
allocate (igk_l2g( npwx, nks))
|
||||
igk_l2g = 0
|
||||
|
@ -63,7 +63,7 @@ subroutine allocate_nlpot
|
|||
! calculate the number of beta functions for each atomic type
|
||||
!
|
||||
lmaxkb = - 1
|
||||
do nt = 1, ntyp
|
||||
do nt = 1, nsp
|
||||
nh (nt) = 0
|
||||
do nb = 1, nbeta (nt)
|
||||
nh (nt) = nh (nt) + 2 * lll (nb, nt) + 1
|
||||
|
@ -73,7 +73,7 @@ subroutine allocate_nlpot
|
|||
!
|
||||
! calculate the maximum number of beta functions
|
||||
!
|
||||
nhm = MAXVAL (nh (1:ntyp))
|
||||
nhm = MAXVAL (nh (1:nsp))
|
||||
!
|
||||
! calculate the number of beta functions of the solid
|
||||
!
|
||||
|
@ -85,28 +85,28 @@ subroutine allocate_nlpot
|
|||
if (tvanp(nt)) nkbus = nkbus + nh (nt)
|
||||
enddo
|
||||
!
|
||||
allocate (indv( nhm, ntyp))
|
||||
allocate (nhtol(nhm, ntyp))
|
||||
allocate (nhtolm(nhm, ntyp))
|
||||
allocate (nhtoj(nhm, ntyp))
|
||||
allocate (indv( nhm, nsp))
|
||||
allocate (nhtol(nhm, nsp))
|
||||
allocate (nhtolm(nhm, nsp))
|
||||
allocate (nhtoj(nhm, nsp))
|
||||
allocate (deeq( nhm, nhm, nat, nspin))
|
||||
if (noncolin) then
|
||||
allocate (deeq_nc( nhm, nhm, nat, nspin))
|
||||
endif
|
||||
if (lspinorb) then
|
||||
allocate (qq_so(nhm, nhm, 4, ntyp))
|
||||
allocate (dvan_so( nhm, nhm, nspin, ntyp))
|
||||
allocate (fcoef(nhm,nhm,2,2,ntyp))
|
||||
allocate (qq_so(nhm, nhm, 4, nsp))
|
||||
allocate (dvan_so( nhm, nhm, nspin, nsp))
|
||||
allocate (fcoef(nhm,nhm,2,2,nsp))
|
||||
else
|
||||
allocate (qq( nhm, nhm, ntyp))
|
||||
allocate (dvan( nhm, nhm, ntyp))
|
||||
allocate (qq( nhm, nhm, nsp))
|
||||
allocate (dvan( nhm, nhm, nsp))
|
||||
endif
|
||||
!
|
||||
nqxq = ( (sqrt(gcutm) + sqrt(xqq(1)**2 + xqq(2)**2 + xqq(3)**2) ) &
|
||||
/ dq + 4) * cell_factor
|
||||
lmaxq = 2*lmaxkb+1
|
||||
!
|
||||
if (lmaxq > 0) allocate (qrad( nqxq, nbrx*(nbrx+1)/2, lmaxq, ntyp))
|
||||
if (lmaxq > 0) allocate (qrad( nqxq, nbrx*(nbrx+1)/2, lmaxq, nsp))
|
||||
if (nkb > 0) allocate (vkb( npwx, nkb))
|
||||
allocate (becsum( nhm * (nhm + 1)/2, nat, nspin))
|
||||
!
|
||||
|
@ -128,9 +128,9 @@ subroutine allocate_nlpot
|
|||
!
|
||||
nqx = (sqrt (ecutwfc) / dq + 4) * cell_factor
|
||||
|
||||
allocate (tab( nqx , nbrx , ntyp))
|
||||
allocate (tab( nqx , nbrx , nsp))
|
||||
|
||||
allocate (tab_at( nqx , nchix , ntyp))
|
||||
allocate (tab_at( nqx , nchix , nsp))
|
||||
|
||||
return
|
||||
end subroutine allocate_nlpot
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
!
|
||||
! Copyright (C) 2001-2004 PWSCF group
|
||||
! Copyright (C) 2001-2004 Quantum-ESPRESSO group
|
||||
! This file is distributed under the terms of the
|
||||
! GNU General Public License. See the file `License'
|
||||
! in the root directory of the present distribution,
|
||||
|
@ -13,9 +13,9 @@ SUBROUTINE gk_sort( k, ngm, g, ecut, ngk, igk, gk )
|
|||
! ... NB: this version will yield the same ordering for different ecut
|
||||
! ... and the same ordering in all machines
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE constants, ONLY : eps8
|
||||
USE wvfct, ONLY : npwx
|
||||
USE kinds, ONLY : DP
|
||||
USE constants, ONLY : eps8
|
||||
USE wvfct, ONLY : npwx
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
|
@ -86,7 +86,8 @@ SUBROUTINE gk_sort( k, ngm, g, ecut, ngk, igk, gk )
|
|||
!
|
||||
END DO
|
||||
!
|
||||
IF( ng > ngm ) CALL infomsg ( 'gk_sort', 'unexpected exit from do-loop', -1 )
|
||||
IF ( ng > ngm ) &
|
||||
CALL infomsg( 'gk_sort', 'unexpected exit from do-loop', -1 )
|
||||
!
|
||||
! ... order vector gk keeping initial position in index
|
||||
!
|
||||
|
@ -94,6 +95,8 @@ SUBROUTINE gk_sort( k, ngm, g, ecut, ngk, igk, gk )
|
|||
!
|
||||
! ... now order true |k+G|
|
||||
!
|
||||
PRINT *, "IGK", igk(:)
|
||||
!
|
||||
DO nk = 1, ngk
|
||||
!
|
||||
gk(nk) = ( k(1) + g(1,igk(nk) ) )**2 + &
|
||||
|
@ -106,7 +109,6 @@ SUBROUTINE gk_sort( k, ngm, g, ecut, ngk, igk, gk )
|
|||
!
|
||||
END SUBROUTINE gk_sort
|
||||
!
|
||||
!
|
||||
!----------------------------------------------------------------------------
|
||||
SUBROUTINE gk_l2gmap( ngm, ig_l2g, ngk, igk, igk_l2g )
|
||||
!----------------------------------------------------------------------------
|
||||
|
@ -116,8 +118,6 @@ SUBROUTINE gk_l2gmap( ngm, ig_l2g, ngk, igk, igk_l2g )
|
|||
! ... across processors.
|
||||
! ... Written by Carlo Cavazzoni
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
! ... Here the dummy variables
|
||||
|
|
|
@ -26,12 +26,26 @@ MODULE pw_restart
|
|||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
SAVE
|
||||
!
|
||||
PRIVATE
|
||||
!
|
||||
PUBLIC :: pw_writefile, pw_readfile
|
||||
!
|
||||
INTEGER, PARAMETER, PRIVATE :: iunout = 99
|
||||
!
|
||||
LOGICAL :: lcell_read = .FALSE., &
|
||||
lpw_read = .FALSE., &
|
||||
lions_read = .FALSE., &
|
||||
lspin_read = .FALSE., &
|
||||
lxc_read = .FALSE., &
|
||||
locc_read = .FALSE., &
|
||||
lbz_read = .FALSE., &
|
||||
lbs_read = .FALSE., &
|
||||
lwfc_read = .FALSE., &
|
||||
lgvec_read = .FALSE., &
|
||||
lsymm_read = .FALSE.
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
!------------------------------------------------------------------------
|
||||
|
@ -675,6 +689,10 @@ MODULE pw_restart
|
|||
!
|
||||
CALL read_dim( dirname, ierr )
|
||||
!
|
||||
CASE( 'pseudo' )
|
||||
!
|
||||
lions = .TRUE.
|
||||
!
|
||||
CASE( 'config' )
|
||||
!
|
||||
lcell = .TRUE.
|
||||
|
@ -786,7 +804,6 @@ MODULE pw_restart
|
|||
! ... this routine collects array dimensions from various sections
|
||||
! ... plus with some other variables needed for array allocation
|
||||
!
|
||||
USE cell_base, ONLY : alat
|
||||
USE ions_base, ONLY : nat, nsp
|
||||
USE symme, ONLY : nsym
|
||||
USE gvect, ONLY : nr1, nr2, nr3, ngm_g, ecutwfc, dual
|
||||
|
@ -804,10 +821,15 @@ MODULE pw_restart
|
|||
CHARACTER(LEN=*), INTENT(IN) :: dirname
|
||||
INTEGER, INTENT(OUT) :: ierr
|
||||
!
|
||||
LOGICAL :: ltetra
|
||||
REAL(DP) :: ecutrho
|
||||
!
|
||||
!
|
||||
! ... first the entire CELL section is read
|
||||
!
|
||||
CALL read_cell( dirname, ierr )
|
||||
!
|
||||
IF ( ierr > 0 ) RETURN
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
CALL iotk_open_read( iunpun, FILE = TRIM( dirname ) // '/' // &
|
||||
|
@ -819,13 +841,9 @@ MODULE pw_restart
|
|||
!
|
||||
IF ( ierr > 0 ) RETURN
|
||||
!
|
||||
! ... then selected tags are read from the other sections
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
CALL iotk_scan_begin( iunpun, "CELL" )
|
||||
!
|
||||
CALL iotk_scan_dat( iunpun, "LATTICE_PARAMETER", alat )
|
||||
!
|
||||
CALL iotk_scan_end( iunpun, "CELL" )
|
||||
!
|
||||
CALL iotk_scan_begin( iunpun, "IONS" )
|
||||
!
|
||||
|
@ -888,31 +906,14 @@ MODULE pw_restart
|
|||
!
|
||||
CALL iotk_scan_dat( iunpun, "NON-COLINEAR_CALCULATION", noncolin )
|
||||
!
|
||||
IF ( noncolin ) THEN
|
||||
!
|
||||
CALL iotk_scan_dat( iunpun, "SPINOR_DIM", npol )
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
npol = 1
|
||||
!
|
||||
END IF
|
||||
CALL iotk_scan_dat( iunpun, "SPINOR_DIM", npol, DEFAULT = 1 )
|
||||
!
|
||||
CALL iotk_scan_end( iunpun, "SPIN" )
|
||||
!
|
||||
CALL iotk_scan_begin( iunpun, "OCCUPATIONS" )
|
||||
!
|
||||
CALL iotk_scan_dat( iunpun, "TETRAHEDRON_METHOD", ltetra )
|
||||
!
|
||||
IF ( ltetra ) THEN
|
||||
!
|
||||
CALL iotk_scan_dat( iunpun, "NUMBER_OF_TETRAHEDRA", ntetra )
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
ntetra = 1
|
||||
!
|
||||
END IF
|
||||
CALL iotk_scan_dat( iunpun, &
|
||||
"NUMBER_OF_TETRAHEDRA", ntetra, DEFAULT = 1 )
|
||||
!
|
||||
CALL iotk_scan_end( iunpun, "OCCUPATIONS" )
|
||||
!
|
||||
|
@ -920,7 +921,7 @@ MODULE pw_restart
|
|||
!
|
||||
CALL iotk_scan_dat( iunpun, "NUMBER_OF_K-POINTS", nkstot )
|
||||
!
|
||||
IF ( nspin == 2 ) nkstot = nkstot * 2
|
||||
IF ( lsda ) nkstot = nkstot * 2
|
||||
!
|
||||
CALL iotk_scan_end( iunpun, "BRILLOUIN_ZONE" )
|
||||
!
|
||||
|
@ -943,7 +944,6 @@ MODULE pw_restart
|
|||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( alat, ionode_id )
|
||||
CALL mp_bcast( nat, ionode_id )
|
||||
CALL mp_bcast( nsp, ionode_id )
|
||||
CALL mp_bcast( nsym, ionode_id )
|
||||
|
@ -987,12 +987,11 @@ MODULE pw_restart
|
|||
CHARACTER(LEN=80) :: bravais_lattice
|
||||
!
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
IF ( lcell_read ) RETURN
|
||||
!
|
||||
IF ( ionode ) &
|
||||
CALL iotk_open_read( iunpun, FILE = TRIM( dirname ) // '/' // &
|
||||
& TRIM( xmlpun ), BINARY = .FALSE., IERR = ierr )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( ierr, ionode_id )
|
||||
!
|
||||
|
@ -1071,6 +1070,8 @@ MODULE pw_restart
|
|||
CALL mp_bcast( at, ionode_id )
|
||||
CALL mp_bcast( bg, ionode_id )
|
||||
!
|
||||
lcell_read = .TRUE.
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE read_cell
|
||||
|
@ -1081,6 +1082,7 @@ MODULE pw_restart
|
|||
!
|
||||
USE ions_base, ONLY : nat, nsp, ityp, amass, atm, tau, if_pos
|
||||
USE cell_base, ONLY : alat
|
||||
USE io_files, ONLY : psfile, pseudo_dir
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
|
@ -1090,17 +1092,18 @@ MODULE pw_restart
|
|||
INTEGER :: i
|
||||
!
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
IF ( lions_read ) RETURN
|
||||
!
|
||||
IF ( ionode ) &
|
||||
CALL iotk_open_read( iunpun, FILE = TRIM( dirname ) // '/' // &
|
||||
& TRIM( xmlpun ), BINARY = .FALSE., IERR = ierr )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( ierr, ionode_id )
|
||||
!
|
||||
IF ( ierr > 0 ) RETURN
|
||||
!
|
||||
pseudo_dir = TRIM( dirname )
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
CALL iotk_scan_begin( iunpun, "IONS" )
|
||||
|
@ -1117,6 +1120,9 @@ MODULE pw_restart
|
|||
CALL iotk_scan_dat( iunpun, &
|
||||
TRIM( atm(i) ) // "_MASS", amass(i) )
|
||||
!
|
||||
CALL iotk_scan_dat( iunpun, &
|
||||
"PSEUDO_FOR_" // TRIM( atm(i) ), psfile(i) )
|
||||
!
|
||||
END DO
|
||||
!
|
||||
DO i = 1, nat
|
||||
|
@ -1138,13 +1144,15 @@ MODULE pw_restart
|
|||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( nat, ionode_id )
|
||||
CALL mp_bcast( nsp, ionode_id )
|
||||
CALL mp_bcast( amass, ionode_id )
|
||||
CALL mp_bcast( atm, ionode_id )
|
||||
CALL mp_bcast( ityp, ionode_id )
|
||||
CALL mp_bcast( tau, ionode_id )
|
||||
CALL mp_bcast( if_pos, ionode_id )
|
||||
CALL mp_bcast( nat, ionode_id )
|
||||
CALL mp_bcast( nsp, ionode_id )
|
||||
CALL mp_bcast( amass, ionode_id )
|
||||
CALL mp_bcast( atm, ionode_id )
|
||||
CALL mp_bcast( ityp, ionode_id )
|
||||
CALL mp_bcast( tau, ionode_id )
|
||||
CALL mp_bcast( if_pos, ionode_id )
|
||||
!
|
||||
lions_read = .TRUE.
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
|
@ -1167,12 +1175,14 @@ MODULE pw_restart
|
|||
REAL(DP) :: tmp(3)
|
||||
!
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
IF ( lsymm_read ) RETURN
|
||||
!
|
||||
IF ( .NOT. lpw_read ) &
|
||||
CALL errore( 'read_symmetry', 'read planewaves first', 1 )
|
||||
!
|
||||
IF ( ionode ) &
|
||||
CALL iotk_open_read( iunpun, FILE = TRIM( dirname ) // '/' // &
|
||||
& TRIM( xmlpun ), BINARY = .FALSE., IERR = ierr )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( ierr, ionode_id )
|
||||
!
|
||||
|
@ -1213,6 +1223,8 @@ MODULE pw_restart
|
|||
CALL mp_bcast( ftau, ionode_id )
|
||||
CALL mp_bcast( sname, ionode_id )
|
||||
!
|
||||
lsymm_read = .TRUE.
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE read_symmetry
|
||||
|
@ -1233,12 +1245,11 @@ MODULE pw_restart
|
|||
REAL(DP) :: ecutrho
|
||||
!
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
IF ( lpw_read ) RETURN
|
||||
!
|
||||
IF ( ionode ) &
|
||||
CALL iotk_open_read( iunpun, FILE = TRIM( dirname ) // '/' // &
|
||||
& TRIM( xmlpun ), BINARY = .FALSE., IERR = ierr )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( ierr, ionode_id )
|
||||
!
|
||||
|
@ -1294,6 +1305,8 @@ MODULE pw_restart
|
|||
CALL mp_bcast( nr3s, ionode_id )
|
||||
CALL mp_bcast( ngms_g, ionode_id )
|
||||
!
|
||||
lpw_read = .TRUE.
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE read_planewaves
|
||||
|
@ -1312,12 +1325,11 @@ MODULE pw_restart
|
|||
INTEGER, INTENT(OUT) :: ierr
|
||||
!
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
IF ( lspin_read ) RETURN
|
||||
!
|
||||
IF ( ionode ) &
|
||||
CALL iotk_open_read( iunpun, FILE = TRIM( dirname ) // '/' // &
|
||||
& TRIM( xmlpun ), BINARY = .FALSE., IERR = ierr )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( ierr, ionode_id )
|
||||
!
|
||||
|
@ -1365,6 +1377,8 @@ MODULE pw_restart
|
|||
CALL mp_bcast( npol, ionode_id )
|
||||
CALL mp_bcast( lspinorb, ionode_id )
|
||||
!
|
||||
lspin_read = .TRUE.
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE read_spin
|
||||
|
@ -1384,12 +1398,14 @@ MODULE pw_restart
|
|||
INTEGER, INTENT(OUT) :: ierr
|
||||
!
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
IF ( lxc_read ) RETURN
|
||||
!
|
||||
IF ( .NOT. lions_read ) &
|
||||
CALL errore( 'read_xc', 'read ions first', 1 )
|
||||
!
|
||||
IF ( ionode ) &
|
||||
CALL iotk_open_read( iunpun, FILE = TRIM( dirname ) // '/' // &
|
||||
& TRIM( xmlpun ), BINARY = .FALSE., IERR = ierr )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( ierr, ionode_id )
|
||||
!
|
||||
|
@ -1434,11 +1450,75 @@ MODULE pw_restart
|
|||
!
|
||||
END IF
|
||||
!
|
||||
lxc_read = .TRUE.
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE read_xc
|
||||
!
|
||||
!------------------------------------------------------------------------
|
||||
SUBROUTINE read_brillouin_zone( dirname, ierr )
|
||||
!------------------------------------------------------------------------
|
||||
!
|
||||
USE lsda_mod, ONLY : nspin
|
||||
USE klist, ONLY : nkstot, xk, wk
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER(LEN=*), INTENT(IN) :: dirname
|
||||
INTEGER, INTENT(OUT) :: ierr
|
||||
!
|
||||
INTEGER :: ik, num_k_points
|
||||
!
|
||||
!
|
||||
IF ( lbz_read ) RETURN
|
||||
!
|
||||
IF ( ionode ) &
|
||||
CALL iotk_open_read( iunpun, FILE = TRIM( dirname ) // '/' // &
|
||||
& TRIM( xmlpun ), BINARY = .FALSE., IERR = ierr )
|
||||
!
|
||||
CALL mp_bcast( ierr, ionode_id )
|
||||
!
|
||||
IF ( ierr > 0 ) RETURN
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
CALL iotk_scan_begin( iunpun, "BRILLOUIN_ZONE" )
|
||||
!
|
||||
CALL iotk_scan_dat( iunpun, "NUMBER_OF_K-POINTS", num_k_points )
|
||||
!
|
||||
nkstot = num_k_points
|
||||
!
|
||||
IF ( nspin == 2 ) nkstot = num_k_points * 2
|
||||
!
|
||||
DO ik = 1, num_k_points
|
||||
!
|
||||
CALL iotk_scan_empty( iunpun, "K-POINT" // &
|
||||
& TRIM( iotk_index( ik ) ), attr )
|
||||
!
|
||||
CALL iotk_scan_attr( attr, "XYZ", xk(:,ik) )
|
||||
!
|
||||
CALL iotk_scan_attr( attr, "WEIGHT", wk(ik) )
|
||||
!
|
||||
END DO
|
||||
!
|
||||
CALL iotk_scan_end( iunpun, "BRILLOUIN_ZONE" )
|
||||
!
|
||||
CALL iotk_close_read( iunpun )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( nkstot, ionode_id )
|
||||
CALL mp_bcast( xk, ionode_id )
|
||||
CALL mp_bcast( wk, ionode_id )
|
||||
!
|
||||
lbz_read = .TRUE.
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE read_brillouin_zone
|
||||
!
|
||||
!------------------------------------------------------------------------
|
||||
SUBROUTINE read_occupations( dirname, ierr )
|
||||
!------------------------------------------------------------------------
|
||||
!
|
||||
|
@ -1453,12 +1533,11 @@ MODULE pw_restart
|
|||
INTEGER, INTENT(OUT) :: ierr
|
||||
!
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
IF ( locc_read ) RETURN
|
||||
!
|
||||
IF ( ionode ) &
|
||||
CALL iotk_open_read( iunpun, FILE = TRIM( dirname ) // '/' // &
|
||||
& TRIM( xmlpun ), BINARY = .FALSE., IERR = ierr )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( ierr, ionode_id )
|
||||
!
|
||||
|
@ -1519,72 +1598,13 @@ MODULE pw_restart
|
|||
!
|
||||
IF ( tfixed_occ ) CALL mp_bcast( f_inp, ionode_id )
|
||||
!
|
||||
locc_read = .TRUE.
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE read_occupations
|
||||
!
|
||||
!------------------------------------------------------------------------
|
||||
SUBROUTINE read_brillouin_zone( dirname, ierr )
|
||||
!------------------------------------------------------------------------
|
||||
!
|
||||
USE lsda_mod, ONLY : nspin
|
||||
USE klist, ONLY : nkstot, xk, wk
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
CHARACTER(LEN=*), INTENT(IN) :: dirname
|
||||
INTEGER, INTENT(OUT) :: ierr
|
||||
!
|
||||
INTEGER :: ik, num_k_points
|
||||
!
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
CALL iotk_open_read( iunpun, FILE = TRIM( dirname ) // '/' // &
|
||||
& TRIM( xmlpun ), BINARY = .FALSE., IERR = ierr )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( ierr, ionode_id )
|
||||
!
|
||||
IF ( ierr > 0 ) RETURN
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
CALL iotk_scan_begin( iunpun, "BRILLOUIN_ZONE" )
|
||||
!
|
||||
CALL iotk_scan_dat( iunpun, "NUMBER_OF_K-POINTS", num_k_points )
|
||||
!
|
||||
nkstot = num_k_points
|
||||
!
|
||||
IF ( nspin == 2 ) nkstot = num_k_points * 2
|
||||
!
|
||||
DO ik = 1, num_k_points
|
||||
!
|
||||
CALL iotk_scan_empty( iunpun, "K-POINT" // &
|
||||
& TRIM( iotk_index( ik ) ), attr )
|
||||
!
|
||||
CALL iotk_scan_attr( attr, "XYZ", xk(:,ik) )
|
||||
!
|
||||
CALL iotk_scan_attr( attr, "WEIGHT", wk(ik) )
|
||||
!
|
||||
END DO
|
||||
!
|
||||
CALL iotk_scan_end( iunpun, "BRILLOUIN_ZONE" )
|
||||
!
|
||||
CALL iotk_close_read( iunpun )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( nkstot, ionode_id )
|
||||
CALL mp_bcast( xk, ionode_id )
|
||||
CALL mp_bcast( wk, ionode_id )
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE read_brillouin_zone
|
||||
!
|
||||
!------------------------------------------------------------------------
|
||||
SUBROUTINE read_band_structure( dirname, ierr )
|
||||
!------------------------------------------------------------------------
|
||||
!
|
||||
|
@ -1601,12 +1621,16 @@ MODULE pw_restart
|
|||
INTEGER :: ik, ik_eff, num_k_points
|
||||
!
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
IF ( lbs_read ) RETURN
|
||||
!
|
||||
IF ( .NOT. lspin_read ) &
|
||||
CALL errore( 'read_band_structure', 'read spin first', 1 )
|
||||
IF ( .NOT. lbz_read ) &
|
||||
CALL errore( 'read_band_structure', 'read band_structure first', 1 )
|
||||
!
|
||||
IF ( ionode ) &
|
||||
CALL iotk_open_read( iunpun, FILE = TRIM( dirname ) // '/' // &
|
||||
& TRIM( xmlpun ), BINARY = .FALSE., IERR = ierr )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( ierr, ionode_id )
|
||||
!
|
||||
|
@ -1694,6 +1718,8 @@ MODULE pw_restart
|
|||
CALL mp_bcast( et, ionode_id )
|
||||
CALL mp_bcast( wg, ionode_id )
|
||||
!
|
||||
lbs_read = .TRUE.
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE read_band_structure
|
||||
|
|
|
@ -38,6 +38,7 @@ SUBROUTINE read_file()
|
|||
USE noncollin_module, ONLY : noncolin, npol
|
||||
USE mp_global, ONLY : kunit
|
||||
USE pw_restart, ONLY : pw_readfile
|
||||
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
|
@ -95,7 +96,11 @@ SUBROUTINE read_file()
|
|||
! ... XML punch-file
|
||||
!-------------------------------------------------------------------------------
|
||||
!
|
||||
CALL pw_readfile( 'config', ierr )
|
||||
CALL pw_readfile( 'pseudo', ierr )
|
||||
!
|
||||
! ... read pseudopotentials
|
||||
!
|
||||
CALL readpp()
|
||||
!
|
||||
CALL set_dimensions()
|
||||
!
|
||||
|
|
Loading…
Reference in New Issue