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

View File

@ -1056,7 +1056,7 @@ MODULE pw_restart_new
TYPE ( magnetization_type ) ,INTENT(IN) :: magnetization_obj
!
REAL(DP) :: tot_mag_, nelec_, theta, phi, fixed_magnetization(3)
INTEGER :: nsp_, isp
INTEGER :: isp
!
bfield = 0.d0
nelec_ = band_structure_obj%nelec
@ -1069,35 +1069,22 @@ MODULE pw_restart_new
CALL set_nelup_neldw(tot_magnetization, nelec_, nelup, neldw)
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
DO isp = 1, nsp_
IF ( atomic_specs_obj%species(isp)%starting_magnetization_ispresent) THEN
starting_magnetization(isp) = atomic_specs_obj%species(isp)%starting_magnetization
END IF
!
DO isp = 1, atomic_specs_obj%ntyp
IF ( band_structure_obj%noncolin ) THEN
IF ( atomic_specs_obj%species(isp)%spin_teta_ispresent ) THEN
theta = atomic_specs_obj%species(isp)%spin_teta
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
!
angle1(isp) = theta
angle2(isp) = phi
IF ( atomic_specs_obj%species(isp)%starting_magnetization_ispresent .AND. &
i_cons == 1 ) THEN
!
mcons(1,isp) = starting_magnetization(isp) * sin( theta ) * cos( phi )
mcons(2,isp) = starting_magnetization(isp) * sin( theta ) * sin( phi )
mcons(3,isp) = starting_magnetization(isp) * cos( theta )
i_cons == 1 ) THEN
mcons(1,isp) = starting_magnetization(isp) * sin(angle1(isp)) * cos(angle2(isp))
mcons(2,isp) = starting_magnetization(isp) * sin(angle1(isp)) * sin(angle2(isp))
mcons(3,isp) = starting_magnetization(isp) * cos(angle1(isp))
ELSE IF ( i_cons == 2) THEN
mcons(3,isp) = cos(theta)
mcons(3,isp) = cos(angle1(isp))
END IF
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)
END IF
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, &
lxdm, ts_vdw
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 lsda_mod, ONLY : isk, lsda
USE lsda_mod, ONLY : isk, lsda, starting_magnetization
USE realus, ONLY : real_space
USE basis, ONLY : natomwfc
USE uspp, ONLY : okvan
@ -220,7 +220,8 @@ SUBROUTINE read_xml_file ( wfc_is_collected )
!
pseudo_dir_cur = TRIM( tmp_dir ) // TRIM( prefix ) // postfix
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
!! Atomic structure section
CALL qexsd_copy_atomic_structure (output_obj%atomic_structure, nsp, &