Fixed some bugs in the restarting procedure of meta-dynamics. C.S.

git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@2570 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
sbraccia 2005-12-09 03:50:04 +00:00
parent 4984105ba9
commit 2c472f1a67
7 changed files with 60 additions and 37 deletions

View File

@ -324,7 +324,7 @@ SUBROUTINE metadyn()
USE io_files, ONLY : iunmeta, iunaxsf, scradir USE io_files, ONLY : iunmeta, iunaxsf, scradir
USE metadyn_vars, ONLY : fe_grad, new_target, to_target, metadyn_fmt, & USE metadyn_vars, ONLY : fe_grad, new_target, to_target, metadyn_fmt, &
to_new_target, fe_step, metadyn_history, & to_new_target, fe_step, metadyn_history, &
max_metadyn_iter, starting_metadyn_iter, & max_metadyn_iter, first_metadyn_iter, &
fe_nstep, shake_nstep, dfe_acc, gaussian_pos fe_nstep, shake_nstep, dfe_acc, gaussian_pos
USE metadyn_base, ONLY : add_gaussians, evolve_collective_vars USE metadyn_base, ONLY : add_gaussians, evolve_collective_vars
USE metadyn_io, ONLY : write_axsf_file, write_metadyn_restart USE metadyn_io, ONLY : write_axsf_file, write_metadyn_restart
@ -381,7 +381,7 @@ SUBROUTINE metadyn()
END IF END IF
! !
tfor = .TRUE. tfor = .TRUE.
iter = starting_metadyn_iter iter = first_metadyn_iter
! !
metadyn_loop: DO metadyn_loop: DO
! !

View File

@ -119,7 +119,7 @@ SUBROUTINE cpr_loop( nloop )
! !
IF ( lmetadyn ) THEN IF ( lmetadyn ) THEN
! !
CALL metadyn_init( tau ) CALL metadyn_init( 'CP', tau )
! !
CALL metadyn() CALL metadyn()
! !

View File

@ -34,31 +34,34 @@ MODULE metadyn_base
CONTAINS CONTAINS
! !
!------------------------------------------------------------------------ !------------------------------------------------------------------------
SUBROUTINE metadyn_init( tau ) SUBROUTINE metadyn_init( progname, tau )
!------------------------------------------------------------------------ !------------------------------------------------------------------------
! !
USE kinds, ONLY : DP USE kinds, ONLY : DP
USE input_parameters, ONLY : restart_mode USE input_parameters, ONLY : restart_mode
USE constraints_module, ONLY : nconstr, target USE constraints_module, ONLY : nconstr, target
USE control_flags, ONLY : nstep USE control_flags, ONLY : nstep, ndr
USE constants, ONLY : bohr_radius_angs USE constants, ONLY : bohr_radius_angs
USE cell_base, ONLY : at, alat USE cell_base, ONLY : at, alat
USE metadyn_vars, ONLY : fe_grad, g_amplitude, max_metadyn_iter, & USE metadyn_vars, ONLY : fe_grad, g_amplitude, max_metadyn_iter, &
metadyn_history, metadyn_fmt, fe_step, & metadyn_history, metadyn_fmt, fe_step, &
starting_metadyn_iter, gaussian_pos first_metadyn_iter, gaussian_pos
USE metadyn_io, ONLY : read_metadyn_restart USE metadyn_io, ONLY : read_metadyn_restart
USE parser, ONLY : delete_if_present, int_to_char USE parser, ONLY : delete_if_present, int_to_char
USE io_files, ONLY : tmp_dir, prefix, iunaxsf, iunmeta USE io_files, ONLY : tmp_dir, scradir, prefix, iunaxsf, iunmeta
USE io_global, ONLY : stdout, ionode, ionode_id USE io_global, ONLY : stdout, ionode, ionode_id
USE mp, ONLY : mp_bcast USE mp, ONLY : mp_bcast
USE xml_io_base, ONLY : restart_dir
! !
IMPLICIT NONE IMPLICIT NONE
! !
CHARACTER(LEN=*), INTENT(IN) :: progname
REAL(DP), INTENT(INOUT) :: tau(:,:) REAL(DP), INTENT(INOUT) :: tau(:,:)
! !
INTEGER :: idum, i INTEGER :: idum, i
REAL(DP) :: rdum REAL(DP) :: rdum
LOGICAL :: file_exists LOGICAL :: file_exists
CHARACTER(LEN=256) :: dirname
CHARACTER(LEN=4) :: c_nconstr CHARACTER(LEN=4) :: c_nconstr
CHARACTER(LEN=16) :: fe_step_fmt CHARACTER(LEN=16) :: fe_step_fmt
! !
@ -116,13 +119,28 @@ MODULE metadyn_base
! !
END IF END IF
! !
starting_metadyn_iter = 0 first_metadyn_iter = 0
! !
ELSE ELSE
! !
! ... restarting from file ! ... restarting from file
! !
CALL read_metadyn_restart( tmp_dir, tau, alat ) IF ( progname == 'PW' ) THEN
!
dirname = TRIM( tmp_dir ) // TRIM( prefix ) // '.new-save'
!
ELSE IF ( progname == 'CP' ) THEN
!
dirname = restart_dir( scradir, ndr )
!
ELSE
!
CALL errore( 'metadyn_init', &
'wrong calling program: ' // TRIM( progname ), 1 )
!
END IF
!
CALL read_metadyn_restart( dirname, tau, alat )
! !
IF ( ionode ) THEN IF ( ionode ) THEN
! !
@ -135,7 +153,7 @@ MODULE metadyn_base
! !
END IF END IF
! !
IF ( starting_metadyn_iter == max_metadyn_iter ) THEN IF ( first_metadyn_iter == max_metadyn_iter ) THEN
! !
WRITE( stdout, '(/,5X,"Simulation already completed",/)' ) WRITE( stdout, '(/,5X,"Simulation already completed",/)' )
! !

View File

@ -158,7 +158,7 @@ MODULE metadyn_io
!------------------------------------------------------------------------ !------------------------------------------------------------------------
! !
USE metadyn_vars, ONLY : g_amplitude, gaussian_pos, fe_grad, & USE metadyn_vars, ONLY : g_amplitude, gaussian_pos, fe_grad, &
metadyn_history, starting_metadyn_iter metadyn_history, first_metadyn_iter
USE constraints_module, ONLY : nconstr, target USE constraints_module, ONLY : nconstr, target
USE io_global, ONLY : ionode, ionode_id USE io_global, ONLY : ionode, ionode_id
USE mp, ONLY : mp_bcast USE mp, ONLY : mp_bcast
@ -185,7 +185,7 @@ MODULE metadyn_io
'no free units to read the restart file', ierr ) 'no free units to read the restart file', ierr )
! !
filename = TRIM( dirname ) // & filename = TRIM( dirname ) // &
& '/meta-dynamics' // '/' // "metadyn-descriptor.xml" & '/meta-dynamics/' // "metadyn-descriptor.xml"
! !
! ... descriptor file ! ... descriptor file
! !
@ -195,7 +195,8 @@ MODULE metadyn_io
! !
CALL mp_bcast( ierr, ionode_id ) CALL mp_bcast( ierr, ionode_id )
! !
CALL errore( 'read_metadyn_restart', 'restart file not found', ierr ) CALL errore( 'read_metadyn_restart', &
'restart file ' // TRIM( filename ) // ' not found', ierr )
! !
IF ( ionode ) THEN IF ( ionode ) THEN
! !
@ -213,9 +214,9 @@ MODULE metadyn_io
! !
END IF END IF
! !
CALL iotk_scan_dat( iunit, "STEP", starting_metadyn_iter ) CALL iotk_scan_dat( iunit, "STEP", first_metadyn_iter )
! !
DO i = 1, starting_metadyn_iter DO i = 1, first_metadyn_iter
! !
tag = "ITERATION" // TRIM( iotk_index( i ) ) tag = "ITERATION" // TRIM( iotk_index( i ) )
! !
@ -234,7 +235,7 @@ MODULE metadyn_io
! !
CALL iotk_open_read( iunit, FILE = filename ) CALL iotk_open_read( iunit, FILE = filename )
! !
tag = "ITERATION" // TRIM( iotk_index( starting_metadyn_iter ) ) tag = "ITERATION" // TRIM( iotk_index( first_metadyn_iter ) )
! !
CALL iotk_scan_begin( iunit, TRIM( tag ) ) CALL iotk_scan_begin( iunit, TRIM( tag ) )
! !
@ -265,7 +266,7 @@ MODULE metadyn_io
END IF END IF
! !
CALL mp_bcast( nconstr, ionode_id ) CALL mp_bcast( nconstr, ionode_id )
CALL mp_bcast( starting_metadyn_iter, ionode_id ) CALL mp_bcast( first_metadyn_iter, ionode_id )
CALL mp_bcast( metadyn_history, ionode_id ) CALL mp_bcast( metadyn_history, ionode_id )
CALL mp_bcast( tau, ionode_id ) CALL mp_bcast( tau, ionode_id )
CALL mp_bcast( target, ionode_id ) CALL mp_bcast( target, ionode_id )

View File

@ -40,7 +40,9 @@ MODULE metadyn_vars
! !
REAL(DP) :: g_amplitude REAL(DP) :: g_amplitude
! !
INTEGER :: starting_metadyn_iter INTEGER :: first_metadyn_iter
INTEGER :: first_fe_iter
INTEGER :: first_shake_iter
! !
CHARACTER(LEN=80) :: metadyn_fmt CHARACTER(LEN=80) :: metadyn_fmt
! !

View File

@ -421,7 +421,7 @@ SUBROUTINE metadyn()
USE io_files, ONLY : iunaxsf, iunmeta, prefix, tmp_dir USE io_files, ONLY : iunaxsf, iunmeta, prefix, tmp_dir
USE metadyn_vars, ONLY : fe_grad, new_target, to_target, metadyn_fmt, & USE metadyn_vars, ONLY : fe_grad, new_target, to_target, metadyn_fmt, &
to_new_target, fe_step, metadyn_history, & to_new_target, fe_step, metadyn_history, &
max_metadyn_iter, starting_metadyn_iter, & max_metadyn_iter, first_metadyn_iter, &
gaussian_pos gaussian_pos
USE metadyn_base, ONLY : add_gaussians, evolve_collective_vars USE metadyn_base, ONLY : add_gaussians, evolve_collective_vars
USE metadyn_io, ONLY : write_axsf_file, write_metadyn_restart USE metadyn_io, ONLY : write_axsf_file, write_metadyn_restart
@ -438,7 +438,7 @@ SUBROUTINE metadyn()
! !
dirname = TRIM( tmp_dir ) // TRIM( prefix ) // '.new-save' dirname = TRIM( tmp_dir ) // TRIM( prefix ) // '.new-save'
! !
iter = starting_metadyn_iter iter = first_metadyn_iter
! !
metadyn_loop: DO metadyn_loop: DO
! !

View File

@ -81,8 +81,6 @@ PROGRAM pwscf
CALL stop_run( conv_path ) CALL stop_run( conv_path )
! !
ELSE ELSE
!
CALL init_run()
! !
istep = 0 istep = 0
! !
@ -90,11 +88,15 @@ PROGRAM pwscf
! !
! ... meta-dynamics ! ... meta-dynamics
! !
CALL metadyn_init( tau ) CALL metadyn_init( 'PW', tau )
!
CALL init_run()
! !
CALL metadyn() CALL metadyn()
! !
ELSE ELSE
!
CALL init_run()
! !
main_loop: DO main_loop: DO
! !