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 metadyn_vars, ONLY : fe_grad, new_target, to_target, metadyn_fmt, &
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
USE metadyn_base, ONLY : add_gaussians, evolve_collective_vars
USE metadyn_io, ONLY : write_axsf_file, write_metadyn_restart
@ -381,7 +381,7 @@ SUBROUTINE metadyn()
END IF
!
tfor = .TRUE.
iter = starting_metadyn_iter
iter = first_metadyn_iter
!
metadyn_loop: DO
!

View File

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

View File

@ -34,31 +34,34 @@ MODULE metadyn_base
CONTAINS
!
!------------------------------------------------------------------------
SUBROUTINE metadyn_init( tau )
SUBROUTINE metadyn_init( progname, tau )
!------------------------------------------------------------------------
!
USE kinds, ONLY : DP
USE input_parameters, ONLY : restart_mode
USE constraints_module, ONLY : nconstr, target
USE control_flags, ONLY : nstep
USE control_flags, ONLY : nstep, ndr
USE constants, ONLY : bohr_radius_angs
USE cell_base, ONLY : at, alat
USE metadyn_vars, ONLY : fe_grad, g_amplitude, max_metadyn_iter, &
metadyn_history, metadyn_fmt, fe_step, &
starting_metadyn_iter, gaussian_pos
first_metadyn_iter, gaussian_pos
USE metadyn_io, ONLY : read_metadyn_restart
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 mp, ONLY : mp_bcast
USE xml_io_base, ONLY : restart_dir
!
IMPLICIT NONE
!
CHARACTER(LEN=*), INTENT(IN) :: progname
REAL(DP), INTENT(INOUT) :: tau(:,:)
!
INTEGER :: idum, i
REAL(DP) :: rdum
LOGICAL :: file_exists
CHARACTER(LEN=256) :: dirname
CHARACTER(LEN=4) :: c_nconstr
CHARACTER(LEN=16) :: fe_step_fmt
!
@ -116,13 +119,28 @@ MODULE metadyn_base
!
END IF
!
starting_metadyn_iter = 0
first_metadyn_iter = 0
!
ELSE
!
! ... 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
!
@ -135,7 +153,7 @@ MODULE metadyn_base
!
END IF
!
IF ( starting_metadyn_iter == max_metadyn_iter ) THEN
IF ( first_metadyn_iter == max_metadyn_iter ) THEN
!
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, &
metadyn_history, starting_metadyn_iter
metadyn_history, first_metadyn_iter
USE constraints_module, ONLY : nconstr, target
USE io_global, ONLY : ionode, ionode_id
USE mp, ONLY : mp_bcast
@ -185,7 +185,7 @@ MODULE metadyn_io
'no free units to read the restart file', ierr )
!
filename = TRIM( dirname ) // &
& '/meta-dynamics' // '/' // "metadyn-descriptor.xml"
& '/meta-dynamics/' // "metadyn-descriptor.xml"
!
! ... descriptor file
!
@ -195,7 +195,8 @@ MODULE metadyn_io
!
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
!
@ -213,9 +214,9 @@ MODULE metadyn_io
!
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 ) )
!
@ -234,7 +235,7 @@ MODULE metadyn_io
!
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 ) )
!
@ -265,7 +266,7 @@ MODULE metadyn_io
END IF
!
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( tau, ionode_id )
CALL mp_bcast( target, ionode_id )

View File

@ -40,7 +40,9 @@ MODULE metadyn_vars
!
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
!

View File

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

View File

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