mirror of https://gitlab.com/QEF/q-e.git
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:
parent
4984105ba9
commit
2c472f1a67
|
@ -322,9 +322,9 @@ SUBROUTINE metadyn()
|
|||
sort_tau, tau_srt, ind_srt
|
||||
USE io_global, ONLY : stdout
|
||||
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, &
|
||||
USE metadyn_vars, ONLY : fe_grad, new_target, to_target, metadyn_fmt, &
|
||||
to_new_target, fe_step, metadyn_history, &
|
||||
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
|
||||
!
|
||||
|
|
|
@ -119,7 +119,7 @@ SUBROUTINE cpr_loop( nloop )
|
|||
!
|
||||
IF ( lmetadyn ) THEN
|
||||
!
|
||||
CALL metadyn_init( tau )
|
||||
CALL metadyn_init( 'CP', tau )
|
||||
!
|
||||
CALL metadyn()
|
||||
!
|
||||
|
|
|
@ -34,33 +34,36 @@ 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
|
||||
!
|
||||
REAL(DP), INTENT(INOUT) :: tau(:,:)
|
||||
CHARACTER(LEN=*), INTENT(IN) :: progname
|
||||
REAL(DP), INTENT(INOUT) :: tau(:,:)
|
||||
!
|
||||
INTEGER :: idum, i
|
||||
REAL(DP) :: rdum
|
||||
LOGICAL :: file_exists
|
||||
CHARACTER(LEN=4) :: c_nconstr
|
||||
CHARACTER(LEN=16) :: fe_step_fmt
|
||||
INTEGER :: idum, i
|
||||
REAL(DP) :: rdum
|
||||
LOGICAL :: file_exists
|
||||
CHARACTER(LEN=256) :: dirname
|
||||
CHARACTER(LEN=4) :: c_nconstr
|
||||
CHARACTER(LEN=16) :: fe_step_fmt
|
||||
!
|
||||
!
|
||||
c_nconstr = int_to_char( nconstr )
|
||||
|
@ -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",/)' )
|
||||
!
|
||||
|
|
|
@ -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 ) )
|
||||
!
|
||||
|
@ -264,13 +265,13 @@ MODULE metadyn_io
|
|||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( nconstr, ionode_id )
|
||||
CALL mp_bcast( starting_metadyn_iter, ionode_id )
|
||||
CALL mp_bcast( metadyn_history, ionode_id )
|
||||
CALL mp_bcast( tau, ionode_id )
|
||||
CALL mp_bcast( target, ionode_id )
|
||||
CALL mp_bcast( gaussian_pos, ionode_id )
|
||||
CALL mp_bcast( fe_grad, ionode_id )
|
||||
CALL mp_bcast( nconstr, 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 )
|
||||
CALL mp_bcast( gaussian_pos, ionode_id )
|
||||
CALL mp_bcast( fe_grad, ionode_id )
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
|
|
|
@ -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
|
||||
!
|
||||
|
|
|
@ -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
|
||||
!
|
||||
|
|
|
@ -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
|
||||
!
|
||||
|
|
Loading…
Reference in New Issue