More I/O cleanup, fix to previous commit

This commit is contained in:
Paolo Giannozzi 2019-06-22 12:06:58 +02:00
parent 71b828d306
commit 9bda6a81a3
3 changed files with 41 additions and 35 deletions

View File

@ -101,7 +101,7 @@ CONTAINS
! !
!-------------------------------------------------------------------------- !--------------------------------------------------------------------------
SUBROUTINE qexsd_copy_atomic_species (atomic_species, nsp, atm, amass, & SUBROUTINE qexsd_copy_atomic_species (atomic_species, nsp, atm, amass, &
psfile, pseudo_dir) starting_magnetization, angle1, angle2, psfile, pseudo_dir)
!--------------------------------------------------------------------------- ! !--------------------------------------------------------------------------- !
USE qes_types_module, ONLY : atomic_species_type USE qes_types_module, ONLY : atomic_species_type
! !
@ -110,8 +110,10 @@ CONTAINS
TYPE ( atomic_species_type ),INTENT(IN) :: atomic_species TYPE ( atomic_species_type ),INTENT(IN) :: atomic_species
INTEGER, INTENT(out) :: nsp INTEGER, INTENT(out) :: nsp
CHARACTER(LEN=*), INTENT(out) :: atm(:) CHARACTER(LEN=*), INTENT(out) :: atm(:)
CHARACTER(LEN=*), OPTIONAL, INTENT(out) :: psfile(:), pseudo_dir
REAL(dp), INTENT(out) :: amass(:) REAL(dp), INTENT(out) :: amass(:)
REAL(dp), OPTIONAL, INTENT(out) :: starting_magnetization(:), &
angle1(:), angle2(:)
CHARACTER(LEN=*), OPTIONAL, INTENT(out) :: psfile(:), pseudo_dir
! !
INTEGER :: isp INTEGER :: isp
! !
@ -124,6 +126,21 @@ CONTAINS
IF ( PRESENT (psfile) ) THEN IF ( PRESENT (psfile) ) THEN
psfile(isp) = TRIM ( atomic_species%species(isp)%pseudo_file) psfile(isp) = TRIM ( atomic_species%species(isp)%pseudo_file)
END IF END IF
IF ( PRESENT (starting_magnetization) ) THEN
IF ( atomic_species%species(isp)%starting_magnetization_ispresent) THEN
starting_magnetization(isp) = atomic_species%species(isp)%starting_magnetization
END IF
END IF
IF ( PRESENT (angle1) ) THEN
IF ( atomic_species%species(isp)%spin_teta_ispresent ) THEN
angle1(isp) = atomic_species%species(isp)%spin_teta
END IF
END IF
IF ( PRESENT (angle2) ) THEN
IF ( atomic_species%species(isp)%spin_phi_ispresent ) THEN
angle2(isp) = atomic_species%species(isp)%spin_phi
END IF
END IF
END DO END DO
! !
! ... this is where PP files were originally found (if available) ! ... this is where PP files were originally found (if available)
@ -556,8 +573,9 @@ CONTAINS
TYPE ( electric_field_type),OPTIONAL, INTENT(IN) :: efield_obj TYPE ( electric_field_type),OPTIONAL, INTENT(IN) :: efield_obj
LOGICAL, INTENT(OUT) :: tefield, dipfield LOGICAL, INTENT(OUT) :: tefield, dipfield
INTEGER, INTENT(INOUT) :: edir INTEGER, INTENT(INOUT) :: edir
REAL(dp), INTENT(INOUT) :: emaxpos, eopreg, eamp, gate, zgate, & LOGICAL, INTENT(INOUT) :: gate, block_, relaxz
block_, block_1, block_2, block_height, relaxz REAL(dp), INTENT(INOUT) :: emaxpos, eopreg, eamp, &
zgate, block_1, block_2, block_height
! !
! !
tefield = .FALSE. tefield = .FALSE.

View File

@ -1056,7 +1056,7 @@ MODULE pw_restart_new
TYPE ( magnetization_type ) ,INTENT(IN) :: magnetization_obj TYPE ( magnetization_type ) ,INTENT(IN) :: magnetization_obj
! !
REAL(DP) :: tot_mag_, nelec_, theta, phi, fixed_magnetization(3) REAL(DP) :: tot_mag_, nelec_, theta, phi, fixed_magnetization(3)
INTEGER :: nsp_, isp INTEGER :: isp
! !
bfield = 0.d0 bfield = 0.d0
nelec_ = band_structure_obj%nelec nelec_ = band_structure_obj%nelec
@ -1069,35 +1069,22 @@ MODULE pw_restart_new
CALL set_nelup_neldw(tot_magnetization, nelec_, nelup, neldw) CALL set_nelup_neldw(tot_magnetization, nelec_, nelup, neldw)
END IF END IF
END IF END IF
nsp_ = atomic_specs_obj%ntyp ! FIXME: doesn't belong here and doesn't work because i_cons is set to 0
!
i_cons = 0 i_cons = 0
DO isp = 1, nsp_ DO isp = 1, atomic_specs_obj%ntyp
IF ( atomic_specs_obj%species(isp)%starting_magnetization_ispresent) THEN
starting_magnetization(isp) = atomic_specs_obj%species(isp)%starting_magnetization
END IF
!
IF ( band_structure_obj%noncolin ) THEN IF ( band_structure_obj%noncolin ) THEN
IF ( atomic_specs_obj%species(isp)%spin_teta_ispresent ) THEN angle1(isp) = theta
theta = atomic_specs_obj%species(isp)%spin_teta angle2(isp) = phi
angle1(isp) = theta
END IF
IF ( atomic_specs_obj%species(isp)%spin_phi_ispresent ) THEN
phi = atomic_specs_obj%species(isp)%spin_phi
angle2(isp) = phi
END IF
!
IF ( atomic_specs_obj%species(isp)%starting_magnetization_ispresent .AND. & IF ( atomic_specs_obj%species(isp)%starting_magnetization_ispresent .AND. &
i_cons == 1 ) THEN i_cons == 1 ) THEN
! mcons(1,isp) = starting_magnetization(isp) * sin(angle1(isp)) * cos(angle2(isp))
mcons(1,isp) = starting_magnetization(isp) * sin( theta ) * cos( phi ) mcons(2,isp) = starting_magnetization(isp) * sin(angle1(isp)) * sin(angle2(isp))
mcons(2,isp) = starting_magnetization(isp) * sin( theta ) * sin( phi ) mcons(3,isp) = starting_magnetization(isp) * cos(angle1(isp))
mcons(3,isp) = starting_magnetization(isp) * cos( theta )
ELSE IF ( i_cons == 2) THEN ELSE IF ( i_cons == 2) THEN
mcons(3,isp) = cos(theta) mcons(3,isp) = cos(angle1(isp))
END IF END IF
ELSE IF ( atomic_specs_obj%species(isp)%starting_magnetization_ispresent .AND. & ELSE IF ( atomic_specs_obj%species(isp)%starting_magnetization_ispresent .AND. &
i_cons == 1 ) THEN i_cons == 1 ) THEN
mcons(1,isp) = starting_magnetization(isp) mcons(1,isp) = starting_magnetization(isp)
END IF END IF
END DO END DO

View File

@ -128,9 +128,9 @@ SUBROUTINE read_xml_file ( wfc_is_collected )
USE control_flags, ONLY : noinv, gamma_only, tqr, llondon, ldftd3, & USE control_flags, ONLY : noinv, gamma_only, tqr, llondon, ldftd3, &
lxdm, ts_vdw lxdm, ts_vdw
USE Coul_cut_2D, ONLY : do_cutoff_2D USE Coul_cut_2D, ONLY : do_cutoff_2D
USE noncollin_module,ONLY : noncolin USE noncollin_module,ONLY : noncolin, angle1, angle2
USE spin_orb, ONLY : domag USE spin_orb, ONLY : domag
USE lsda_mod, ONLY : isk, lsda USE lsda_mod, ONLY : isk, lsda, starting_magnetization
USE realus, ONLY : real_space USE realus, ONLY : real_space
USE basis, ONLY : natomwfc USE basis, ONLY : natomwfc
USE uspp, ONLY : okvan USE uspp, ONLY : okvan
@ -220,7 +220,8 @@ SUBROUTINE read_xml_file ( wfc_is_collected )
! !
pseudo_dir_cur = TRIM( tmp_dir ) // TRIM( prefix ) // postfix pseudo_dir_cur = TRIM( tmp_dir ) // TRIM( prefix ) // postfix
CALL qexsd_copy_atomic_species ( output_obj%atomic_species, & CALL qexsd_copy_atomic_species ( output_obj%atomic_species, &
nsp, atm, amass, psfile, pseudo_dir ) nsp, atm, amass, angle1, angle2, starting_magnetization, &
psfile, pseudo_dir )
IF ( pseudo_dir == ' ' ) pseudo_dir=pseudo_dir_cur IF ( pseudo_dir == ' ' ) pseudo_dir=pseudo_dir_cur
!! Atomic structure section !! Atomic structure section
CALL qexsd_copy_atomic_structure (output_obj%atomic_structure, nsp, & CALL qexsd_copy_atomic_structure (output_obj%atomic_structure, nsp, &