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:
sbraccia 2005-08-30 21:10:04 +00:00
parent 2ad0dd8fe4
commit 3f4d0ff92b
8 changed files with 222 additions and 180 deletions

View File

@ -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 \

View File

@ -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 \

View File

@ -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
!

View File

@ -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 \

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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()
!