Update read_namelists.f90

This commit is contained in:
Sasha Fonari 2020-06-05 09:59:04 -04:00
parent 81b4ebc56a
commit f88832e709
1 changed files with 28 additions and 50 deletions

View File

@ -397,7 +397,7 @@ MODULE read_namelists_module
diago_thr_init = 0.0_DP diago_thr_init = 0.0_DP
diago_cg_maxiter = 20 diago_cg_maxiter = 20
diago_ppcg_maxiter = 20 diago_ppcg_maxiter = 20
diago_david_ndim = 4 diago_david_ndim = 2
diago_full_acc = .FALSE. diago_full_acc = .FALSE.
! !
sic = 'none' sic = 'none'
@ -1866,7 +1866,6 @@ MODULE read_namelists_module
CHARACTER(LEN=2) :: prog CHARACTER(LEN=2) :: prog
INTEGER :: ios INTEGER :: ios
INTEGER :: unit_loc=5 INTEGER :: unit_loc=5
LOGICAL :: required, success
! !
! ... end of declarations ! ... end of declarations
! !
@ -1895,7 +1894,7 @@ MODULE read_namelists_module
IF( ionode ) THEN IF( ionode ) THEN
READ( unit_loc, control, iostat = ios ) READ( unit_loc, control, iostat = ios )
END IF END IF
success = check_namelist_read(ios, unit_loc, "control") CALL check_namelist_read(ios, unit_loc, "control")
! !
CALL control_bcast( ) CALL control_bcast( )
CALL control_checkin( prog ) CALL control_checkin( prog )
@ -1911,7 +1910,7 @@ MODULE read_namelists_module
IF( ionode ) THEN IF( ionode ) THEN
READ( unit_loc, system, iostat = ios ) READ( unit_loc, system, iostat = ios )
END IF END IF
success = check_namelist_read(ios, unit_loc, "system") CALL check_namelist_read(ios, unit_loc, "system")
! !
CALL system_bcast( ) CALL system_bcast( )
! !
@ -1923,7 +1922,7 @@ MODULE read_namelists_module
IF( ionode ) THEN IF( ionode ) THEN
READ( unit_loc, electrons, iostat = ios ) READ( unit_loc, electrons, iostat = ios )
END IF END IF
success = check_namelist_read(ios, unit_loc, "electrons") CALL check_namelist_read(ios, unit_loc, "electrons")
! !
CALL electrons_bcast( ) CALL electrons_bcast( )
CALL electrons_checkin( prog ) CALL electrons_checkin( prog )
@ -1933,34 +1932,28 @@ MODULE read_namelists_module
! !
ios = 0 ios = 0
IF ( ionode ) THEN IF ( ionode ) THEN
IF ( ( TRIM( calculation ) /= 'nscf' .AND. & IF ( ( TRIM( calculation ) /= 'nscf' .AND. &
TRIM( calculation ) /= 'bands' ) .OR. & TRIM( calculation ) /= 'bands' ) .OR. &
( TRIM( prog_ ) == 'PW+iPi' ) ) THEN ( TRIM( prog_ ) == 'PW+iPi' ) ) THEN
READ( unit_loc, ions, iostat = ios ) READ( unit_loc, ions, iostat = ios )
END IF END IF
END IF !
! ! SCF might (optionally) have &ions :: ion_positions = 'from_file'
! SCF might have &ions :: ion_positions = 'from_file' !
IF ( TRIM( calculation ) == 'scf' ) THEN IF ( (ios /= 0) .AND. TRIM( calculation ) == 'scf' ) THEN
required = .FALSE. ! presumably, not found: rewind the file pointer to the location
ELSE ! of the previous present section, in this case electrons
required = .TRUE. REWIND( unit_loc )
END IF READ( unit_loc, electrons, iostat = ios )
!
success = check_namelist_read(ios, unit_loc, "ions", required)
!
IF (success) THEN
CALL ions_bcast( )
CALL ions_checkin( prog )
ELSE
! Rewind the file pointer to the location of the previous present
! section, in this case electrons
IF ( ionode ) THEN
REWIND( unit_loc )
READ( unit_loc, electrons, iostat = ios )
END IF END IF
!
END IF END IF
! !
CALL check_namelist_read(ios, unit_loc, "ions")
!
CALL ions_bcast( )
CALL ions_checkin( prog )
!
! ... CELL namelist ! ... CELL namelist
! !
ios = 0 ios = 0
@ -1973,7 +1966,7 @@ MODULE read_namelists_module
READ( unit_loc, cell, iostat = ios ) READ( unit_loc, cell, iostat = ios )
END IF END IF
END IF END IF
success = check_namelist_read(ios, unit_loc, "cell") CALL check_namelist_read(ios, unit_loc, "cell")
! !
CALL cell_bcast() CALL cell_bcast()
CALL cell_checkin( prog ) CALL cell_checkin( prog )
@ -1984,7 +1977,7 @@ MODULE read_namelists_module
READ( unit_loc, press_ai, iostat = ios ) READ( unit_loc, press_ai, iostat = ios )
end if end if
END IF END IF
success = check_namelist_read(ios, unit_loc, "press_ai") CALL check_namelist_read(ios, unit_loc, "press_ai")
! !
CALL press_ai_bcast() CALL press_ai_bcast()
! !
@ -1999,7 +1992,7 @@ MODULE read_namelists_module
READ( unit_loc, wannier, iostat = ios ) READ( unit_loc, wannier, iostat = ios )
END IF END IF
END IF END IF
success = check_namelist_read(ios, unit_loc, "wannier") CALL check_namelist_read(ios, unit_loc, "wannier")
! !
CALL wannier_bcast() CALL wannier_bcast()
CALL wannier_checkin( prog ) CALL wannier_checkin( prog )
@ -2013,7 +2006,7 @@ MODULE read_namelists_module
READ( unit_loc, wannier_ac, iostat = ios ) READ( unit_loc, wannier_ac, iostat = ios )
END IF END IF
END IF END IF
success = check_namelist_read(ios, unit_loc, "wannier_ac") CALL check_namelist_read(ios, unit_loc, "wannier_ac")
! !
CALL wannier_ac_bcast() CALL wannier_ac_bcast()
CALL wannier_ac_checkin( prog ) CALL wannier_ac_checkin( prog )
@ -2022,21 +2015,14 @@ MODULE read_namelists_module
! !
END SUBROUTINE read_namelists END SUBROUTINE read_namelists
! !
FUNCTION check_namelist_read(ios, unit_loc, nl_name, required) SUBROUTINE check_namelist_read(ios, unit_loc, nl_name)
! Set required = .TRUE. if nl_name card is required
! The presence/absence of the card is returned
USE io_global, ONLY : ionode, ionode_id USE io_global, ONLY : ionode, ionode_id
USE mp, ONLY : mp_bcast USE mp, ONLY : mp_bcast
USE mp_images, ONLY : intra_image_comm USE mp_images, ONLY : intra_image_comm
! !
IMPLICIT NONE IMPLICIT NONE
INTEGER, INTENT(in) :: ios, unit_loc INTEGER,INTENT(in) :: ios, unit_loc
CHARACTER(LEN=*), INTENT(in) :: nl_name CHARACTER(LEN=*) :: nl_name
LOGICAL, INTENT(in), OPTIONAL :: required
!
! ... local variables
!
LOGICAL :: check_namelist_read
CHARACTER(len=512) :: line CHARACTER(len=512) :: line
INTEGER :: ios2 INTEGER :: ios2
! !
@ -2047,14 +2033,8 @@ MODULE read_namelists_module
READ(unit_loc,'(A512)', iostat=ios2) line READ(unit_loc,'(A512)', iostat=ios2) line
END IF END IF
END IF END IF
!
CALL mp_bcast( ios2, ionode_id, intra_image_comm ) CALL mp_bcast( ios2, ionode_id, intra_image_comm )
!
IF( ios2 /= 0 .AND. PRESENT(required) .AND. .NOT. required) THEN
check_namelist_read = .FALSE.
RETURN
END IF
!
IF( ios2 /= 0 ) THEN IF( ios2 /= 0 ) THEN
CALL errore( ' read_namelists ', ' could not find namelist &'//TRIM(nl_name), 2) CALL errore( ' read_namelists ', ' could not find namelist &'//TRIM(nl_name), 2)
ENDIF ENDIF
@ -2068,8 +2048,6 @@ MODULE read_namelists_module
1 ) 1 )
END IF END IF
! !
check_namelist_read = .TRUE. END SUBROUTINE check_namelist_read
RETURN
END FUNCTION check_namelist_read
! !
END MODULE read_namelists_module END MODULE read_namelists_module