mirror of https://gitlab.com/QEF/q-e.git
First experimental version of the Laio-Parrinello metadynamics. This implementation
is compatible with both PWscf and CP. Examples and documentation will follow. C.S. git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@2199 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
parent
e7bf22f916
commit
5e399e3a0b
|
@ -16,7 +16,7 @@ SUBROUTINE compute_fes_grads( N_in, N_fin, stat )
|
|||
trane, ampre, nbeg, tfor, taurdr, ndr
|
||||
USE cg_module, ONLY : tcg
|
||||
USE coarsegrained_vars, ONLY : new_target, to_target, dfe_acc, &
|
||||
max_shake_iter, max_fe_iter, to_new_target
|
||||
shake_nstep, fe_nstep, to_new_target
|
||||
USE path_variables, ONLY : pos, pes, grad_pes, frozen, &
|
||||
num_of_images, istep_path, suspended_image
|
||||
USE constraints_module, ONLY : lagrange, target, init_constraint, &
|
||||
|
@ -233,7 +233,7 @@ SUBROUTINE compute_fes_grads( N_in, N_fin, stat )
|
|||
to_target(:) = new_target(:) - target(:)
|
||||
!
|
||||
nfi = 1
|
||||
nomore = max_shake_iter
|
||||
nomore = shake_nstep
|
||||
tcg = .FALSE.
|
||||
tfor = .TRUE.
|
||||
!
|
||||
|
@ -244,7 +244,7 @@ SUBROUTINE compute_fes_grads( N_in, N_fin, stat )
|
|||
! ... and finally the free energy gradients are computed
|
||||
!
|
||||
nfi = 1
|
||||
nomore = max_fe_iter
|
||||
nomore = fe_nstep
|
||||
!
|
||||
to_new_target = .FALSE.
|
||||
!
|
||||
|
@ -312,7 +312,6 @@ SUBROUTINE metadyn()
|
|||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE constraints_module, ONLY : nconstr, target, lagrange
|
||||
USE cell_base, ONLY : at, alat
|
||||
USE cp_main_variables, ONLY : nfi
|
||||
USE control_flags, ONLY : program_name, nomore, ldamped, tconvthrs, &
|
||||
trane, ampre, nbeg, tfor, taurdr, ndr
|
||||
|
@ -320,16 +319,12 @@ SUBROUTINE metadyn()
|
|||
USE ions_base, ONLY : nat, nsp, ityp, if_pos, &
|
||||
sort_tau, tau_srt, ind_srt
|
||||
USE io_global, ONLY : stdout
|
||||
USE io_files, ONLY : prefix, iunaxsf, scradir
|
||||
USE constants, ONLY : bohr_radius_angs
|
||||
USE coarsegrained_vars, ONLY : max_fe_iter, max_shake_iter, fe_grad, &
|
||||
USE io_files, ONLY : iunmeta, iunaxsf, scradir
|
||||
USE coarsegrained_vars, ONLY : fe_nstep, shake_nstep, fe_grad, &
|
||||
new_target, to_target, to_new_target, &
|
||||
fe_step, dfe_acc, metadyn_history, &
|
||||
max_metadyn_iter, A, sigma
|
||||
USE coarsegrained_vars, ONLY : allocate_coarsegrained_vars, &
|
||||
deallocate_coarsegrained_vars
|
||||
max_metadyn_iter, starting_metadyn_iter
|
||||
USE coarsegrained_base, ONLY : add_gaussians
|
||||
USE parser, ONLY : delete_if_present
|
||||
USE io_global, ONLY : ionode
|
||||
USE xml_io_base, ONLY : check_restartfile
|
||||
USE basic_algebra_routines
|
||||
|
@ -344,42 +339,6 @@ SUBROUTINE metadyn()
|
|||
!
|
||||
ALLOCATE( tau( 3, nat ), fion( 3, nat ) )
|
||||
!
|
||||
CALL allocate_coarsegrained_vars( nconstr, max_metadyn_iter )
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
OPEN( UNIT = iunaxsf, FILE = TRIM( prefix ) // ".axsf", &
|
||||
STATUS = "UNKNOWN", ACTION = "WRITE" )
|
||||
!
|
||||
WRITE( UNIT = iunaxsf, FMT = '(" ANIMSTEPS ",I3)' ) max_metadyn_iter
|
||||
WRITE( UNIT = iunaxsf, FMT = '(" CRYSTAL ")' )
|
||||
WRITE( UNIT = iunaxsf, FMT = '(" PRIMVEC ")' )
|
||||
WRITE( UNIT = iunaxsf, FMT = '(3F14.10)' ) &
|
||||
at(1,1) * alat * bohr_radius_angs, &
|
||||
at(2,1) * alat * bohr_radius_angs, &
|
||||
at(3,1) * alat * bohr_radius_angs
|
||||
WRITE( UNIT = iunaxsf, FMT = '(3F14.10)' ) &
|
||||
at(1,2) * alat * bohr_radius_angs, &
|
||||
at(2,2) * alat * bohr_radius_angs, &
|
||||
at(3,2) * alat * bohr_radius_angs
|
||||
WRITE( UNIT = iunaxsf, FMT = '(3F14.10)' ) &
|
||||
at(1,3) * alat * bohr_radius_angs, &
|
||||
at(2,3) * alat * bohr_radius_angs, &
|
||||
at(3,3) * alat * bohr_radius_angs
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL delete_if_present( TRIM( prefix ) // '.metadyn' )
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
OPEN( UNIT = 999, FILE = TRIM( prefix ) // '.metadyn', STATUS = 'NEW' )
|
||||
!
|
||||
WRITE( 999, '(2(2X,I5))' ) nconstr, max_metadyn_iter
|
||||
WRITE( 999, '(2(2X,F12.8))' ) A, sigma
|
||||
!
|
||||
END IF
|
||||
!
|
||||
! ... first the wfc are taken to the ground state
|
||||
!
|
||||
taurdr = .TRUE.
|
||||
|
@ -410,14 +369,39 @@ SUBROUTINE metadyn()
|
|||
!
|
||||
tfor = .TRUE.
|
||||
!
|
||||
DO iter = 1, max_metadyn_iter
|
||||
iter = starting_metadyn_iter
|
||||
!
|
||||
metadyn_loop: DO
|
||||
!
|
||||
IF ( iter > 0 ) THEN
|
||||
!
|
||||
CALL add_gaussians( iter )
|
||||
!
|
||||
! ... the system is "adiabatically" moved to the new target
|
||||
!
|
||||
new_target(:) = target(:) - fe_step * fe_grad(:) / norm( fe_grad )
|
||||
!
|
||||
to_target(:) = new_target(:) - target(:)
|
||||
!
|
||||
nfi = 0
|
||||
nomore = shake_nstep
|
||||
!
|
||||
tconvthrs%active = .FALSE.
|
||||
!
|
||||
to_new_target = .TRUE.
|
||||
!
|
||||
CALL cprmain( tau, fion, etot )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
iter = iter + 1
|
||||
!
|
||||
metadyn_history(:,iter) = target(:)
|
||||
!
|
||||
IF ( ionode ) CALL write_config( iter )
|
||||
!
|
||||
nfi = 0
|
||||
nomore = max_fe_iter
|
||||
nomore = fe_nstep
|
||||
!
|
||||
tconvthrs%active = .TRUE.
|
||||
!
|
||||
|
@ -442,42 +426,23 @@ SUBROUTINE metadyn()
|
|||
END IF
|
||||
!
|
||||
IF ( ionode ) &
|
||||
WRITE( 999, '(I4,5(2X,F12.8))' ) iter, target(:), etot, fe_grad(:)
|
||||
WRITE( iunmeta, '(I4,5(2X,F12.8))' ) iter, target(:), etot, fe_grad(:)
|
||||
!
|
||||
CALL add_gaussians( iter )
|
||||
IF ( iter >= max_metadyn_iter ) EXIT metadyn_loop
|
||||
!
|
||||
new_target(:) = target(:) - fe_step * fe_grad(:) / norm( fe_grad )
|
||||
!
|
||||
! ... the system is "adiabatically" moved to the new target
|
||||
!
|
||||
to_target(:) = new_target(:) - target(:)
|
||||
!
|
||||
nfi = 0
|
||||
nomore = max_shake_iter
|
||||
!
|
||||
tconvthrs%active = .FALSE.
|
||||
!
|
||||
to_new_target = .TRUE.
|
||||
!
|
||||
CALL cprmain( tau, fion, etot )
|
||||
!
|
||||
IF ( ionode ) CALL flush_unit( 999 )
|
||||
!
|
||||
END DO
|
||||
END DO metadyn_loop
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
CALL write_config( iter )
|
||||
!
|
||||
CLOSE( UNIT = iunaxsf )
|
||||
CLOSE( UNIT = 999 )
|
||||
CLOSE( UNIT = iunmeta )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
DEALLOCATE( tau, fion )
|
||||
!
|
||||
CALL deallocate_coarsegrained_vars()
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE metadyn
|
||||
|
|
|
@ -70,12 +70,13 @@
|
|||
PROGRAM main
|
||||
!----------------------------------------------------------------------------
|
||||
!
|
||||
USE input, ONLY : read_input_file, iosys_pseudo, iosys
|
||||
USE io_global, ONLY : io_global_start, io_global_getionode
|
||||
USE mp_global, ONLY : mp_global_start
|
||||
USE mp, ONLY : mp_end, mp_start, mp_env
|
||||
USE control_flags, ONLY : lneb, lsmd, lmetadyn, program_name
|
||||
USE environment, ONLY : environment_start
|
||||
USE input, ONLY : read_input_file, iosys_pseudo, iosys
|
||||
USE io_global, ONLY : io_global_start, io_global_getionode
|
||||
USE mp_global, ONLY : mp_global_start
|
||||
USE mp, ONLY : mp_end, mp_start, mp_env
|
||||
USE control_flags, ONLY : lneb, lsmd, lmetadyn, program_name
|
||||
USE coarsegrained_base, ONLY : metadyn_init
|
||||
USE environment, ONLY : environment_start
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
|
@ -127,6 +128,8 @@ PROGRAM main
|
|||
CALL smd_loop( 1 )
|
||||
!
|
||||
ELSE IF ( lmetadyn ) THEN
|
||||
!
|
||||
CALL metadyn_init()
|
||||
!
|
||||
CALL metadyn()
|
||||
!
|
||||
|
|
138
CPV/input.f90
138
CPV/input.f90
|
@ -207,7 +207,8 @@ MODULE input
|
|||
tchi2_ => tchi2, &
|
||||
tatomicwfc_ => tatomicwfc, &
|
||||
printwfc_ => printwfc, &
|
||||
tortho_ => tortho
|
||||
tortho_ => tortho, &
|
||||
nstep_ => nstep
|
||||
USE control_flags, ONLY : t_diis_simple_ => t_diis_simple, &
|
||||
t_diis_ => t_diis, &
|
||||
tsde_ => tsde, &
|
||||
|
@ -258,6 +259,12 @@ MODULE input
|
|||
USE cp_electronic_mass, ONLY : emass_ => emass, &
|
||||
emaec_ => emass_cutoff
|
||||
!
|
||||
USE coarsegrained_vars, ONLY : fe_nstep_ => fe_nstep, &
|
||||
shake_nstep_ => shake_nstep, &
|
||||
fe_step_ => fe_step, &
|
||||
g_amplitude_ => g_amplitude, &
|
||||
g_sigma_ => g_sigma
|
||||
!
|
||||
USE input_parameters, ONLY: &
|
||||
electron_dynamics, electron_damping, diis_rot, electron_temperature, &
|
||||
ion_dynamics, ekin_conv_thr, etot_conv_thr, forc_conv_thr, ion_maxstep,&
|
||||
|
@ -271,8 +278,12 @@ MODULE input
|
|||
ampre, nstep, restart_mode, ion_positions, startingwfc, printwfc, &
|
||||
orthogonalization, electron_velocities, nat, if_pos, phase_space
|
||||
!
|
||||
USE input_parameters, ONLY : g_amplitude, g_sigma, fe_step, fe_nstep, &
|
||||
shake_nstep
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
!
|
||||
IF ( .NOT. has_been_read ) &
|
||||
CALL errore( 'iosys ', 'input file has not been read yet!', 1 )
|
||||
!
|
||||
|
@ -368,46 +379,85 @@ MODULE input
|
|||
trane_ = .FALSE.
|
||||
ampre_ = ampre
|
||||
taurdr_ = .FALSE.
|
||||
!
|
||||
SELECT CASE ( TRIM( restart_mode ) )
|
||||
CASE ('from_scratch')
|
||||
nbeg_ = -1
|
||||
nomore_ = nstep
|
||||
trane_ = ( startingwfc == 'random' )
|
||||
IF ( ampre_ == 0.d0 ) ampre_ = 0.02
|
||||
CASE ('reset_counters')
|
||||
nbeg_ = 0
|
||||
nomore_ = nstep
|
||||
CASE ('restart')
|
||||
nbeg_ = 1
|
||||
nomore_ = nstep
|
||||
CASE ('auto')
|
||||
if( auto_check(ndr, ' ') ) then
|
||||
write(*,*) 'AuTOPILOT: Auto Check detects restart.xml'
|
||||
write(*,*) ' adjusting restart mode to RESTART'
|
||||
restart_mode = 'restart'
|
||||
nbeg_ = 1
|
||||
! Also handle NSTEPS adjustment so that
|
||||
! nomore does not include past nfi in cpr.f90
|
||||
restart_p = .TRUE.
|
||||
nomore_ = nstep
|
||||
if ( ion_positions == 'from_input' ) then
|
||||
taurdr_ = .TRUE.
|
||||
nbeg_ = -1
|
||||
end if
|
||||
else
|
||||
write(*,*) 'AUTOPILOT: Auto Check did not detect restart.xml'
|
||||
write(*,*) ' adjusting restart mode to FROM_SCRATCH'
|
||||
restart_mode = 'from_scratch'
|
||||
nbeg_ = -2
|
||||
if ( ion_positions == 'from_input' ) nbeg_ = -1
|
||||
nomore_ = nstep
|
||||
trane_ = ( startingwfc == 'random' )
|
||||
if ( ampre_ == 0.d0 ) ampre_ = 0.02
|
||||
end IF
|
||||
!
|
||||
CASE( 'from_scratch' )
|
||||
!
|
||||
nbeg_ = -1
|
||||
nomore_ = nstep
|
||||
nstep_ = nstep
|
||||
trane_ = ( startingwfc == 'random' )
|
||||
!
|
||||
IF ( ampre_ == 0.D0 ) ampre_ = 0.02D0
|
||||
!
|
||||
CASE( 'reset_counters' )
|
||||
!
|
||||
nbeg_ = 0
|
||||
nomore_ = nstep
|
||||
nstep_ = nstep
|
||||
!
|
||||
CASE( 'restart' )
|
||||
!
|
||||
nbeg_ = 1
|
||||
nomore_ = nstep
|
||||
nstep_ = nstep
|
||||
!
|
||||
CASE( 'auto' )
|
||||
!
|
||||
IF ( auto_check( ndr, ' ' ) ) THEN
|
||||
!
|
||||
WRITE( stdout, '("autopilot: Auto Check detects restart.xml")' )
|
||||
WRITE( stdout, '(" adjusting restart_mode to restart")' )
|
||||
!
|
||||
restart_mode = 'restart'
|
||||
!
|
||||
nbeg_ = 1
|
||||
!
|
||||
! ... Also handle NSTEPS adjustment so that
|
||||
! ... nomore does not include past nfi in cpr.f90
|
||||
!
|
||||
restart_p = .TRUE.
|
||||
nomore_ = nstep
|
||||
nstep_ = nstep
|
||||
!
|
||||
IF ( ion_positions == 'from_input' ) THEN
|
||||
!
|
||||
taurdr_ = .TRUE.
|
||||
nbeg_ = -1
|
||||
!
|
||||
END IF
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
WRITE( stdout, &
|
||||
'("autopilot: Auto Check did not detect restart.xml")' )
|
||||
!
|
||||
WRITE( stdout, &
|
||||
'(" adjusting restart_mode to from_scratch")' )
|
||||
!
|
||||
restart_mode = 'from_scratch'
|
||||
!
|
||||
nbeg_ = -2
|
||||
!
|
||||
IF ( ion_positions == 'from_input' ) nbeg_ = -1
|
||||
!
|
||||
nomore_ = nstep
|
||||
nstep_ = nstep
|
||||
!
|
||||
trane_ = ( startingwfc == 'random' )
|
||||
!
|
||||
IF ( ampre_ == 0.d0 ) ampre_ = 0.02D0
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CASE DEFAULT
|
||||
CALL errore(' iosys ',' unknown restart_mode '//TRIM(restart_mode), 1 )
|
||||
!
|
||||
CALL errore( 'iosys ', &
|
||||
'unknown restart_mode ' // TRIM( restart_mode ), 1 )
|
||||
!
|
||||
END SELECT
|
||||
|
||||
!
|
||||
! ... Starting/Restarting Atomic positions
|
||||
!
|
||||
SELECT CASE ( TRIM(ion_positions) )
|
||||
|
@ -516,7 +566,17 @@ MODULE input
|
|||
CASE DEFAULT
|
||||
CALL errore(' control_flags ',' unknown electron_temperature '//TRIM(electron_temperature), 1 )
|
||||
END SELECT
|
||||
|
||||
|
||||
!
|
||||
! ... meta-dynamics
|
||||
!
|
||||
|
||||
fe_nstep_ = fe_nstep
|
||||
shake_nstep_ = shake_nstep
|
||||
fe_step_ = fe_step
|
||||
g_amplitude_ = g_amplitude
|
||||
g_sigma_ = g_sigma
|
||||
|
||||
SELECT CASE( TRIM( phase_space ) )
|
||||
CASE( 'full' )
|
||||
!
|
||||
|
|
|
@ -13,13 +13,15 @@ SUBROUTINE stop_run( flag )
|
|||
! ... Close all files and synchronize processes before stopping.
|
||||
!
|
||||
USE io_global, ONLY : stdout, ionode
|
||||
USE control_flags, ONLY : lpath, lneb, lsmd, lconstrain
|
||||
USE control_flags, ONLY : lpath, lneb, lsmd, lconstrain, &
|
||||
lcoarsegrained
|
||||
USE io_files, ONLY : prefix
|
||||
USE environment, ONLY : environment_end
|
||||
USE input_parameters, ONLY : deallocate_input_parameters
|
||||
USE path_variables, ONLY : path_deallocation
|
||||
USE path_io_routines, ONLY : io_path_stop
|
||||
USE constraints_module, ONLY : deallocate_constraint
|
||||
USE coarsegrained_vars, ONLY : deallocate_coarsegrained_vars
|
||||
USE mp, ONLY : mp_barrier, mp_end
|
||||
!
|
||||
IMPLICIT NONE
|
||||
|
@ -45,6 +47,8 @@ SUBROUTINE stop_run( flag )
|
|||
!
|
||||
IF ( lconstrain ) CALL deallocate_constraint()
|
||||
!
|
||||
IF ( lcoarsegrained ) CALL deallocate_coarsegrained_vars()
|
||||
!
|
||||
IF ( lneb ) THEN
|
||||
!
|
||||
CALL path_deallocation( 'neb' )
|
||||
|
|
|
@ -15,12 +15,8 @@ MODULE coarsegrained_vars
|
|||
!
|
||||
SAVE
|
||||
!
|
||||
! INTEGER, PARAMETER :: max_fe_iter = 50
|
||||
! INTEGER, PARAMETER :: max_shake_iter = 5
|
||||
INTEGER, PARAMETER :: max_fe_iter = 200
|
||||
INTEGER, PARAMETER :: max_shake_iter = 20
|
||||
!
|
||||
REAL(DP), PARAMETER :: fe_step = 0.4D0
|
||||
INTEGER :: fe_nstep
|
||||
INTEGER :: shake_nstep
|
||||
!
|
||||
REAL(DP), ALLOCATABLE :: dfe_acc(:)
|
||||
REAL(DP), ALLOCATABLE :: fe_grad(:)
|
||||
|
@ -31,16 +27,19 @@ MODULE coarsegrained_vars
|
|||
!
|
||||
! ... Laio-Parrinello meta-dynamics
|
||||
!
|
||||
INTEGER, PARAMETER :: max_metadyn_iter = 500
|
||||
REAL(DP) :: fe_step
|
||||
!
|
||||
INTEGER :: max_metadyn_iter
|
||||
!
|
||||
REAL(DP), ALLOCATABLE :: metadyn_history(:,:)
|
||||
!
|
||||
! REAL(DP), PARAMETER :: A = 0.01D0
|
||||
REAL(DP), PARAMETER :: A = 0.005D0
|
||||
REAL(DP), PARAMETER :: sigma = 0.4D0
|
||||
REAL(DP) :: g_amplitude
|
||||
REAL(DP) :: g_sigma
|
||||
!
|
||||
REAL(DP), PARAMETER :: sigma_sq = sigma**2
|
||||
REAL(DP), PARAMETER :: two_sigma_sq = 2.D0 * sigma_sq
|
||||
REAL(DP) :: g_sigma_sq
|
||||
REAL(DP) :: two_g_sigma_sq
|
||||
!
|
||||
INTEGER :: starting_metadyn_iter
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
|
@ -91,7 +90,7 @@ MODULE coarsegrained_base
|
|||
!
|
||||
PRIVATE
|
||||
!
|
||||
PUBLIC :: set_target, add_gaussians
|
||||
PUBLIC :: set_target, add_gaussians, metadyn_init
|
||||
!
|
||||
CONTAINS
|
||||
!
|
||||
|
@ -99,13 +98,13 @@ MODULE coarsegrained_base
|
|||
SUBROUTINE set_target()
|
||||
!------------------------------------------------------------------------
|
||||
!
|
||||
USE coarsegrained_vars, ONLY : to_target, to_new_target, max_shake_iter
|
||||
USE coarsegrained_vars, ONLY : to_target, to_new_target, shake_nstep
|
||||
USE constraints_module, ONLY : target
|
||||
!
|
||||
!
|
||||
IF ( to_new_target ) THEN
|
||||
!
|
||||
target(:) = target(:) + to_target(:) / DBLE( max_shake_iter )
|
||||
target(:) = target(:) + to_target(:) / DBLE( shake_nstep )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
|
@ -114,12 +113,155 @@ MODULE coarsegrained_base
|
|||
END SUBROUTINE set_target
|
||||
!
|
||||
!------------------------------------------------------------------------
|
||||
SUBROUTINE metadyn_init()
|
||||
!------------------------------------------------------------------------
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE input_parameters, ONLY : restart_mode
|
||||
USE constraints_module, ONLY : nconstr, target
|
||||
USE control_flags, ONLY : nstep
|
||||
USE constants, ONLY : bohr_radius_angs
|
||||
USE cell_base, ONLY : at, alat
|
||||
USE coarsegrained_vars, ONLY : allocate_coarsegrained_vars, fe_grad, &
|
||||
g_amplitude, g_sigma, g_sigma_sq, two_g_sigma_sq, &
|
||||
max_metadyn_iter, metadyn_history, &
|
||||
starting_metadyn_iter
|
||||
USE parser, ONLY : delete_if_present
|
||||
USE io_files, ONLY : prefix, iunaxsf, iunmeta
|
||||
USE io_global, ONLY : stdout, ionode, ionode_id
|
||||
USE mp, ONLY : mp_bcast
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: idum, i
|
||||
REAL(DP) :: rdum
|
||||
LOGICAL :: lstop, file_exists
|
||||
!
|
||||
!
|
||||
g_sigma_sq = g_sigma**2
|
||||
two_g_sigma_sq = 2.D0 * g_sigma_sq
|
||||
!
|
||||
IF ( nstep < 1 ) CALL errore( 'metadyn_init', 'nstep < 1', 1 )
|
||||
!
|
||||
max_metadyn_iter = nstep
|
||||
!
|
||||
CALL allocate_coarsegrained_vars( nconstr, max_metadyn_iter )
|
||||
!
|
||||
IF ( restart_mode == 'from_scratch' ) THEN
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
OPEN( UNIT = iunaxsf, &
|
||||
FILE = TRIM( prefix ) // ".axsf", STATUS = 'UNKNOWN' )
|
||||
!
|
||||
WRITE( UNIT = iunaxsf, FMT = '(" ANIMSTEPS ",I3)' ) max_metadyn_iter
|
||||
WRITE( UNIT = iunaxsf, FMT = '(" CRYSTAL ")' )
|
||||
WRITE( UNIT = iunaxsf, FMT = '(" PRIMVEC ")' )
|
||||
WRITE( UNIT = iunaxsf, FMT = '(3F14.10)' ) &
|
||||
at(1,1) * alat * bohr_radius_angs, &
|
||||
at(2,1) * alat * bohr_radius_angs, &
|
||||
at(3,1) * alat * bohr_radius_angs
|
||||
WRITE( UNIT = iunaxsf, FMT = '(3F14.10)' ) &
|
||||
at(1,2) * alat * bohr_radius_angs, &
|
||||
at(2,2) * alat * bohr_radius_angs, &
|
||||
at(3,2) * alat * bohr_radius_angs
|
||||
WRITE( UNIT = iunaxsf, FMT = '(3F14.10)' ) &
|
||||
at(1,3) * alat * bohr_radius_angs, &
|
||||
at(2,3) * alat * bohr_radius_angs, &
|
||||
at(3,3) * alat * bohr_radius_angs
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL delete_if_present( TRIM( prefix ) // '.metadyn' )
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
OPEN( UNIT = iunmeta, &
|
||||
FILE = TRIM( prefix ) // '.metadyn', STATUS = 'NEW' )
|
||||
!
|
||||
WRITE( iunmeta, '(2(2X,I5))' ) nconstr, max_metadyn_iter
|
||||
WRITE( iunmeta, '(2(2X,F12.8))' ) g_amplitude, g_sigma
|
||||
!
|
||||
END IF
|
||||
!
|
||||
starting_metadyn_iter = 0
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
IF ( ionode ) &
|
||||
INQUIRE( FILE = TRIM( prefix ) // '.metadyn', EXIST = file_exists )
|
||||
!
|
||||
CALL mp_bcast( file_exists, ionode_id )
|
||||
!
|
||||
IF ( .NOT. file_exists ) &
|
||||
CALL errore( 'metadyn_init', 'restart file ' // &
|
||||
& TRIM( prefix ) // '.metadyn does not exist', 1 )
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
OPEN( UNIT = iunaxsf, FILE = TRIM( prefix ) // ".axsf", &
|
||||
STATUS = 'UNKNOWN', ACTION = 'WRITE', POSITION = 'APPEND' )
|
||||
!
|
||||
OPEN( UNIT = iunmeta, FILE = TRIM( prefix ) // '.metadyn', &
|
||||
ACTION = 'READ', STATUS = 'UNKNOWN' )
|
||||
!
|
||||
! ... first we look for the number of performed iterations
|
||||
!
|
||||
READ( iunmeta, * ) nconstr, starting_metadyn_iter
|
||||
READ( iunmeta, * )
|
||||
!
|
||||
IF ( starting_metadyn_iter >= max_metadyn_iter ) THEN
|
||||
!
|
||||
WRITE( stdout, '(/,5X,"Simulation already completed",/)' )
|
||||
!
|
||||
CLOSE( UNIT = iunmeta, STATUS = 'KEEP' )
|
||||
!
|
||||
lstop = .TRUE.
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
lstop = .FALSE.
|
||||
!
|
||||
DO i = 1, starting_metadyn_iter
|
||||
!
|
||||
READ( iunmeta, * ) &
|
||||
idum, metadyn_history(:,i), rdum, fe_grad(:)
|
||||
!
|
||||
END DO
|
||||
!
|
||||
target(:) = metadyn_history(:,starting_metadyn_iter)
|
||||
!
|
||||
CLOSE( UNIT = iunmeta, STATUS = 'KEEP' )
|
||||
!
|
||||
OPEN( UNIT = iunmeta, FILE = TRIM( prefix ) // '.metadyn', &
|
||||
STATUS = 'UNKNOWN', ACTION = 'WRITE', POSITION = 'APPEND' )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL mp_bcast( lstop, ionode_id )
|
||||
!
|
||||
IF ( lstop ) CALL stop_run( .FALSE. )
|
||||
!
|
||||
CALL mp_bcast( starting_metadyn_iter, ionode_id )
|
||||
CALL mp_bcast( metadyn_history, ionode_id )
|
||||
CALL mp_bcast( target, ionode_id )
|
||||
CALL mp_bcast( fe_grad, ionode_id )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE metadyn_init
|
||||
!
|
||||
!------------------------------------------------------------------------
|
||||
SUBROUTINE add_gaussians( iter )
|
||||
!------------------------------------------------------------------------
|
||||
!
|
||||
USE constraints_module, ONLY : nconstr
|
||||
USE coarsegrained_vars, ONLY : metadyn_history, fe_grad, dfe_acc
|
||||
USE coarsegrained_vars, ONLY : A, sigma_sq, two_sigma_sq
|
||||
USE coarsegrained_vars, ONLY : g_amplitude, g_sigma_sq, two_g_sigma_sq
|
||||
USE basic_algebra_routines
|
||||
!
|
||||
IMPLICIT NONE
|
||||
|
@ -132,6 +274,8 @@ MODULE coarsegrained_base
|
|||
!
|
||||
! ... history dependent term
|
||||
!
|
||||
IF ( iter == 1 ) RETURN
|
||||
!
|
||||
ALLOCATE( delta( nconstr ) )
|
||||
!
|
||||
dfe_acc = 0.D0
|
||||
|
@ -141,11 +285,11 @@ MODULE coarsegrained_base
|
|||
delta = metadyn_history(:,i) - metadyn_history(:,iter)
|
||||
!
|
||||
dfe_acc(:) = dfe_acc(:) + delta(:) * &
|
||||
EXP( - ( delta(:) .dot. delta(:) ) / two_sigma_sq )
|
||||
EXP( - ( delta(:) .dot. delta(:) ) / two_g_sigma_sq )
|
||||
!
|
||||
END DO
|
||||
!
|
||||
fe_grad(:) = fe_grad(:) + A / sigma_sq * dfe_acc(:)
|
||||
fe_grad(:) = fe_grad(:) + g_amplitude / g_sigma_sq * dfe_acc(:)
|
||||
!
|
||||
DEALLOCATE( delta )
|
||||
!
|
||||
|
|
|
@ -1144,22 +1144,34 @@ MODULE input_parameters
|
|||
REAL (DP) :: smd_ene_fin = 1.D0
|
||||
!
|
||||
REAL (DP) :: smd_spal = 1.D0
|
||||
|
||||
!
|
||||
! ... variable for meta-dynamics
|
||||
!
|
||||
|
||||
INTEGER :: fe_nstep = 50
|
||||
INTEGER :: shake_nstep = 5
|
||||
REAL(DP) :: fe_step = 0.4D0
|
||||
REAL(DP) :: g_amplitude = 0.01D0
|
||||
REAL(DP) :: g_sigma = 0.4D0
|
||||
|
||||
NAMELIST / ions / phase_space, ion_dynamics, ion_radius, ion_damping, &
|
||||
ion_positions, ion_velocities, ion_temperature, &
|
||||
tempw, fnosep, nhpcl, nhptyp, ndega, tranp, amprp, greasp, &
|
||||
tolp, ion_nstepe, ion_maxstep, upscale, delta_t, &
|
||||
pot_extrapolation, wfc_extrapolation, nraise, &
|
||||
num_of_images, CI_scheme, opt_scheme, use_masses, &
|
||||
first_last_opt, use_multistep, write_save, damp, &
|
||||
temp_req, ds, k_max, k_min, path_thr, fixed_tan, &
|
||||
init_num_of_images, free_energy, use_freezing, &
|
||||
use_fourier, trust_radius_max, trust_radius_min, &
|
||||
tempw, fnosep, nhpcl, nhptyp, ndega, tranp, amprp, &
|
||||
greasp, tolp, ion_nstepe, ion_maxstep, upscale, &
|
||||
delta_t, pot_extrapolation, wfc_extrapolation, &
|
||||
nraise, num_of_images, CI_scheme, opt_scheme, &
|
||||
use_masses, first_last_opt, use_multistep, &
|
||||
write_save, damp, temp_req, ds, k_max, k_min, &
|
||||
path_thr, fixed_tan, init_num_of_images, &
|
||||
free_energy, use_freezing, use_fourier, &
|
||||
trust_radius_max, trust_radius_min, &
|
||||
trust_radius_ini, w_1, w_2, bfgs_ndim, sic_rloc, &
|
||||
smd_polm, smd_kwnp, smd_linr, smd_stcd, smd_stcd1, &
|
||||
smd_stcd2, smd_stcd3, smd_codf, smd_forf, smd_smwf, &
|
||||
smd_lmfreq, smd_tol, smd_maxlm, smd_smcp, smd_smopt, &
|
||||
smd_smlm, smd_ene_ini, smd_ene_fin
|
||||
smd_smlm, smd_ene_ini, smd_ene_fin, &
|
||||
fe_step, fe_nstep, shake_nstep, g_amplitude, g_sigma
|
||||
|
||||
!=----------------------------------------------------------------------------=!
|
||||
! CELL Namelist Input Parameters
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
!
|
||||
! Copyright (C) 2002-2004 FPMD & PWSCF groups
|
||||
! Copyright (C) 2002-2005 Quantum-ESPRESSO group
|
||||
! This file is distributed under the terms of the
|
||||
! GNU General Public License. See the file `License'
|
||||
! in the root directory of the present distribution,
|
||||
|
@ -108,17 +108,21 @@ MODULE io_files
|
|||
INTEGER :: iunaxsf = 25 ! unit for saving coordinates ( axsf format )
|
||||
INTEGER :: iunbroy = 26 ! unit for saving broyden's history
|
||||
!
|
||||
! ... meta-dynamics
|
||||
!
|
||||
INTEGER :: iunmeta = 99 ! unit for saving meta-dynamics history
|
||||
!
|
||||
! ... Y. Kanai combined smd/cp method
|
||||
!
|
||||
INTEGER :: smwout = 20 ! base value to compute index for replica files
|
||||
!
|
||||
INTEGER :: vib_out = 20 ! output of phrozen phonon vibrational calculation
|
||||
INTEGER :: vib_mass = 21 ! isotope masses used for the dynamical matrix
|
||||
|
||||
!
|
||||
!... finite electric field (Umari)
|
||||
!
|
||||
INTEGER :: iunefield = 31 ! unit to store wavefunction for calculatin electric field operator
|
||||
!
|
||||
!=----------------------------------------------------------------------------=!
|
||||
END MODULE io_files
|
||||
!=----------------------------------------------------------------------------=!
|
||||
|
|
|
@ -15,13 +15,15 @@ MODULE read_namelists_module
|
|||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE constants, ONLY : factem, kb_au, au_kb, k_boltzman_au, angstrom_au, &
|
||||
uma_au, pi
|
||||
uma_au, pi, e2
|
||||
USE input_parameters
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
SAVE
|
||||
!
|
||||
PRIVATE
|
||||
!
|
||||
REAL(DP), PARAMETER :: sm_not_set = -20.D0
|
||||
!
|
||||
PUBLIC :: read_namelists, sm_not_set
|
||||
|
@ -413,6 +415,14 @@ MODULE read_namelists_module
|
|||
smd_ene_ini = 1.D0
|
||||
smd_ene_fin = 1.D0
|
||||
!
|
||||
! ... meta-dynamics defaults
|
||||
!
|
||||
fe_step = 0.4D0
|
||||
fe_nstep = 50
|
||||
shake_nstep = 5
|
||||
g_amplitude = 0.01D0
|
||||
g_sigma = 0.4D0
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE
|
||||
|
@ -570,37 +580,37 @@ MODULE read_namelists_module
|
|||
IMPLICIT NONE
|
||||
!
|
||||
!
|
||||
CALL mp_bcast( title, ionode_id )
|
||||
CALL mp_bcast( calculation, ionode_id )
|
||||
CALL mp_bcast( verbosity, ionode_id )
|
||||
CALL mp_bcast( restart_mode, ionode_id )
|
||||
CALL mp_bcast( nstep, ionode_id )
|
||||
CALL mp_bcast( iprint, ionode_id )
|
||||
CALL mp_bcast( isave, ionode_id )
|
||||
CALL mp_bcast( tstress, ionode_id )
|
||||
CALL mp_bcast( tprnfor, ionode_id )
|
||||
CALL mp_bcast( dt, ionode_id )
|
||||
CALL mp_bcast( ndr, ionode_id )
|
||||
CALL mp_bcast( ndw, ionode_id )
|
||||
CALL mp_bcast( outdir, ionode_id )
|
||||
CALL mp_bcast( scradir, ionode_id )
|
||||
CALL mp_bcast( prefix, ionode_id )
|
||||
CALL mp_bcast( max_seconds, ionode_id )
|
||||
CALL mp_bcast( title, ionode_id )
|
||||
CALL mp_bcast( calculation, ionode_id )
|
||||
CALL mp_bcast( verbosity, ionode_id )
|
||||
CALL mp_bcast( restart_mode, ionode_id )
|
||||
CALL mp_bcast( nstep, ionode_id )
|
||||
CALL mp_bcast( iprint, ionode_id )
|
||||
CALL mp_bcast( isave, ionode_id )
|
||||
CALL mp_bcast( tstress, ionode_id )
|
||||
CALL mp_bcast( tprnfor, ionode_id )
|
||||
CALL mp_bcast( dt, ionode_id )
|
||||
CALL mp_bcast( ndr, ionode_id )
|
||||
CALL mp_bcast( ndw, ionode_id )
|
||||
CALL mp_bcast( outdir, ionode_id )
|
||||
CALL mp_bcast( scradir, ionode_id )
|
||||
CALL mp_bcast( prefix, ionode_id )
|
||||
CALL mp_bcast( max_seconds, ionode_id )
|
||||
CALL mp_bcast( ekin_conv_thr, ionode_id )
|
||||
CALL mp_bcast( etot_conv_thr, ionode_id )
|
||||
CALL mp_bcast( forc_conv_thr, ionode_id )
|
||||
CALL mp_bcast( pseudo_dir, ionode_id )
|
||||
CALL mp_bcast( refg, ionode_id )
|
||||
CALL mp_bcast( disk_io, ionode_id )
|
||||
CALL mp_bcast( tefield, ionode_id )
|
||||
CALL mp_bcast( dipfield, ionode_id )
|
||||
CALL mp_bcast( lberry, ionode_id )
|
||||
CALL mp_bcast( gdir, ionode_id )
|
||||
CALL mp_bcast( nppstr, ionode_id )
|
||||
CALL mp_bcast( wf_collect, ionode_id )
|
||||
CALL mp_bcast( printwfc, ionode_id )
|
||||
CALL mp_bcast( lelfield, ionode_id )
|
||||
CALL mp_bcast( nberrycic, ionode_id )
|
||||
CALL mp_bcast( pseudo_dir, ionode_id )
|
||||
CALL mp_bcast( refg, ionode_id )
|
||||
CALL mp_bcast( disk_io, ionode_id )
|
||||
CALL mp_bcast( tefield, ionode_id )
|
||||
CALL mp_bcast( dipfield, ionode_id )
|
||||
CALL mp_bcast( lberry, ionode_id )
|
||||
CALL mp_bcast( gdir, ionode_id )
|
||||
CALL mp_bcast( nppstr, ionode_id )
|
||||
CALL mp_bcast( wf_collect, ionode_id )
|
||||
CALL mp_bcast( printwfc, ionode_id )
|
||||
CALL mp_bcast( lelfield, ionode_id )
|
||||
CALL mp_bcast( nberrycic, ionode_id )
|
||||
|
||||
!
|
||||
RETURN
|
||||
|
@ -623,62 +633,62 @@ MODULE read_namelists_module
|
|||
IMPLICIT NONE
|
||||
!
|
||||
!
|
||||
CALL mp_bcast( ibrav, ionode_id )
|
||||
CALL mp_bcast( celldm, ionode_id )
|
||||
CALL mp_bcast( a, ionode_id )
|
||||
CALL mp_bcast( b, ionode_id )
|
||||
CALL mp_bcast( c, ionode_id )
|
||||
CALL mp_bcast( cosab, ionode_id )
|
||||
CALL mp_bcast( cosac, ionode_id )
|
||||
CALL mp_bcast( cosbc, ionode_id )
|
||||
CALL mp_bcast( nat, ionode_id )
|
||||
CALL mp_bcast( ntyp, ionode_id )
|
||||
CALL mp_bcast( nbnd, ionode_id )
|
||||
CALL mp_bcast( nelec, ionode_id )
|
||||
CALL mp_bcast( ecutwfc, ionode_id )
|
||||
CALL mp_bcast( ecutrho, ionode_id )
|
||||
CALL mp_bcast( nr1, ionode_id )
|
||||
CALL mp_bcast( nr2, ionode_id )
|
||||
CALL mp_bcast( nr3, ionode_id )
|
||||
CALL mp_bcast( nr1s, ionode_id )
|
||||
CALL mp_bcast( nr2s, ionode_id )
|
||||
CALL mp_bcast( nr3s, ionode_id )
|
||||
CALL mp_bcast( nr1b, ionode_id )
|
||||
CALL mp_bcast( nr2b, ionode_id )
|
||||
CALL mp_bcast( nr3b, ionode_id )
|
||||
CALL mp_bcast( occupations, ionode_id )
|
||||
CALL mp_bcast( smearing, ionode_id )
|
||||
CALL mp_bcast( degauss, ionode_id )
|
||||
CALL mp_bcast( nelup, ionode_id )
|
||||
CALL mp_bcast( neldw, ionode_id )
|
||||
CALL mp_bcast( nspin, ionode_id )
|
||||
CALL mp_bcast( nosym, ionode_id )
|
||||
CALL mp_bcast( ecfixed, ionode_id )
|
||||
CALL mp_bcast( qcutz, ionode_id )
|
||||
CALL mp_bcast( q2sigma, ionode_id )
|
||||
CALL mp_bcast( xc_type, ionode_id )
|
||||
CALL mp_bcast( ibrav, ionode_id )
|
||||
CALL mp_bcast( celldm, ionode_id )
|
||||
CALL mp_bcast( a, ionode_id )
|
||||
CALL mp_bcast( b, ionode_id )
|
||||
CALL mp_bcast( c, ionode_id )
|
||||
CALL mp_bcast( cosab, ionode_id )
|
||||
CALL mp_bcast( cosac, ionode_id )
|
||||
CALL mp_bcast( cosbc, ionode_id )
|
||||
CALL mp_bcast( nat, ionode_id )
|
||||
CALL mp_bcast( ntyp, ionode_id )
|
||||
CALL mp_bcast( nbnd, ionode_id )
|
||||
CALL mp_bcast( nelec, ionode_id )
|
||||
CALL mp_bcast( ecutwfc, ionode_id )
|
||||
CALL mp_bcast( ecutrho, ionode_id )
|
||||
CALL mp_bcast( nr1, ionode_id )
|
||||
CALL mp_bcast( nr2, ionode_id )
|
||||
CALL mp_bcast( nr3, ionode_id )
|
||||
CALL mp_bcast( nr1s, ionode_id )
|
||||
CALL mp_bcast( nr2s, ionode_id )
|
||||
CALL mp_bcast( nr3s, ionode_id )
|
||||
CALL mp_bcast( nr1b, ionode_id )
|
||||
CALL mp_bcast( nr2b, ionode_id )
|
||||
CALL mp_bcast( nr3b, ionode_id )
|
||||
CALL mp_bcast( occupations, ionode_id )
|
||||
CALL mp_bcast( smearing, ionode_id )
|
||||
CALL mp_bcast( degauss, ionode_id )
|
||||
CALL mp_bcast( nelup, ionode_id )
|
||||
CALL mp_bcast( neldw, ionode_id )
|
||||
CALL mp_bcast( nspin, ionode_id )
|
||||
CALL mp_bcast( nosym, ionode_id )
|
||||
CALL mp_bcast( ecfixed, ionode_id )
|
||||
CALL mp_bcast( qcutz, ionode_id )
|
||||
CALL mp_bcast( q2sigma, ionode_id )
|
||||
CALL mp_bcast( xc_type, ionode_id )
|
||||
CALL mp_bcast( starting_magnetization, ionode_id )
|
||||
CALL mp_bcast( starting_ns_eigenvalue, ionode_id )
|
||||
CALL mp_bcast( U_projection_type, ionode_id )
|
||||
CALL mp_bcast( lda_plus_U, ionode_id )
|
||||
CALL mp_bcast( Hubbard_U, ionode_id )
|
||||
CALL mp_bcast( Hubbard_alpha, ionode_id )
|
||||
CALL mp_bcast( edir, ionode_id )
|
||||
CALL mp_bcast( emaxpos, ionode_id )
|
||||
CALL mp_bcast( eopreg, ionode_id )
|
||||
CALL mp_bcast( eamp, ionode_id )
|
||||
CALL mp_bcast( U_projection_type, ionode_id )
|
||||
CALL mp_bcast( lda_plus_U, ionode_id )
|
||||
CALL mp_bcast( Hubbard_U, ionode_id )
|
||||
CALL mp_bcast( Hubbard_alpha, ionode_id )
|
||||
CALL mp_bcast( edir, ionode_id )
|
||||
CALL mp_bcast( emaxpos, ionode_id )
|
||||
CALL mp_bcast( eopreg, ionode_id )
|
||||
CALL mp_bcast( eamp, ionode_id )
|
||||
!
|
||||
! ... non collinear broadcast
|
||||
!
|
||||
CALL mp_bcast( lspinorb, ionode_id )
|
||||
CALL mp_bcast( noncolin, ionode_id )
|
||||
CALL mp_bcast( angle1, ionode_id )
|
||||
CALL mp_bcast( angle2, ionode_id )
|
||||
CALL mp_bcast( report, ionode_id )
|
||||
CALL mp_bcast( lspinorb, ionode_id )
|
||||
CALL mp_bcast( noncolin, ionode_id )
|
||||
CALL mp_bcast( angle1, ionode_id )
|
||||
CALL mp_bcast( angle2, ionode_id )
|
||||
CALL mp_bcast( report, ionode_id )
|
||||
CALL mp_bcast( constrained_magnetization, ionode_id )
|
||||
CALL mp_bcast( B_field, ionode_id )
|
||||
CALL mp_bcast( fixed_magnetization, ionode_id )
|
||||
CALL mp_bcast( lambda, ionode_id )
|
||||
CALL mp_bcast( B_field, ionode_id )
|
||||
CALL mp_bcast( fixed_magnetization, ionode_id )
|
||||
CALL mp_bcast( lambda, ionode_id )
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
|
@ -700,59 +710,60 @@ MODULE read_namelists_module
|
|||
IMPLICIT NONE
|
||||
!
|
||||
!
|
||||
CALL mp_bcast( emass, ionode_id )
|
||||
CALL mp_bcast( emass_cutoff, ionode_id )
|
||||
CALL mp_bcast( orthogonalization, ionode_id )
|
||||
CALL mp_bcast( electron_maxstep, ionode_id )
|
||||
CALL mp_bcast( ortho_eps, ionode_id )
|
||||
CALL mp_bcast( ortho_max, ionode_id )
|
||||
CALL mp_bcast( electron_dynamics, ionode_id )
|
||||
CALL mp_bcast( electron_damping, ionode_id )
|
||||
CALL mp_bcast( electron_velocities, ionode_id )
|
||||
CALL mp_bcast( emass, ionode_id )
|
||||
CALL mp_bcast( emass_cutoff, ionode_id )
|
||||
CALL mp_bcast( orthogonalization, ionode_id )
|
||||
CALL mp_bcast( electron_maxstep, ionode_id )
|
||||
CALL mp_bcast( ortho_eps, ionode_id )
|
||||
CALL mp_bcast( ortho_max, ionode_id )
|
||||
CALL mp_bcast( electron_dynamics, ionode_id )
|
||||
CALL mp_bcast( electron_damping, ionode_id )
|
||||
CALL mp_bcast( electron_velocities, ionode_id )
|
||||
CALL mp_bcast( electron_temperature, ionode_id )
|
||||
CALL mp_bcast( conv_thr, ionode_id )
|
||||
CALL mp_bcast( ekincw, ionode_id )
|
||||
CALL mp_bcast( fnosee, ionode_id )
|
||||
CALL mp_bcast( startingwfc, ionode_id )
|
||||
CALL mp_bcast( ampre, ionode_id )
|
||||
CALL mp_bcast( grease, ionode_id )
|
||||
CALL mp_bcast( startingpot, ionode_id )
|
||||
CALL mp_bcast( empty_states_nbnd, ionode_id )
|
||||
CALL mp_bcast( conv_thr, ionode_id )
|
||||
CALL mp_bcast( ekincw, ionode_id )
|
||||
CALL mp_bcast( fnosee, ionode_id )
|
||||
CALL mp_bcast( startingwfc, ionode_id )
|
||||
CALL mp_bcast( ampre, ionode_id )
|
||||
CALL mp_bcast( grease, ionode_id )
|
||||
CALL mp_bcast( startingpot, ionode_id )
|
||||
CALL mp_bcast( empty_states_nbnd, ionode_id )
|
||||
CALL mp_bcast( empty_states_maxstep, ionode_id )
|
||||
CALL mp_bcast( empty_states_delt, ionode_id )
|
||||
CALL mp_bcast( empty_states_emass, ionode_id )
|
||||
CALL mp_bcast( empty_states_ethr, ionode_id )
|
||||
CALL mp_bcast( diis_size, ionode_id )
|
||||
CALL mp_bcast( diis_nreset, ionode_id )
|
||||
CALL mp_bcast( diis_hcut, ionode_id )
|
||||
CALL mp_bcast( diis_wthr, ionode_id )
|
||||
CALL mp_bcast( diis_delt, ionode_id )
|
||||
CALL mp_bcast( diis_maxstep, ionode_id )
|
||||
CALL mp_bcast( diis_rot, ionode_id )
|
||||
CALL mp_bcast( diis_fthr, ionode_id )
|
||||
CALL mp_bcast( diis_temp, ionode_id )
|
||||
CALL mp_bcast( diis_achmix, ionode_id )
|
||||
CALL mp_bcast( diis_g0chmix, ionode_id )
|
||||
CALL mp_bcast( diis_g1chmix, ionode_id )
|
||||
CALL mp_bcast( diis_nchmix, ionode_id )
|
||||
CALL mp_bcast( diis_nrot, ionode_id )
|
||||
CALL mp_bcast( diis_rothr, ionode_id )
|
||||
CALL mp_bcast( diis_ethr, ionode_id )
|
||||
CALL mp_bcast( diis_chguess, ionode_id )
|
||||
CALL mp_bcast( mixing_fixed_ns, ionode_id )
|
||||
CALL mp_bcast( mixing_mode, ionode_id )
|
||||
CALL mp_bcast( mixing_beta, ionode_id )
|
||||
CALL mp_bcast( mixing_ndim, ionode_id )
|
||||
CALL mp_bcast( diagonalization, ionode_id )
|
||||
CALL mp_bcast( diago_thr_init, ionode_id )
|
||||
CALL mp_bcast( diago_cg_maxiter, ionode_id )
|
||||
CALL mp_bcast( diago_david_ndim, ionode_id )
|
||||
CALL mp_bcast( diago_diis_ndim, ionode_id )
|
||||
CALL mp_bcast( sic, ionode_id )
|
||||
CALL mp_bcast( sic_epsilon , ionode_id )
|
||||
CALL mp_bcast( force_pairing , ionode_id )
|
||||
CALL mp_bcast( empty_states_delt, ionode_id )
|
||||
CALL mp_bcast( empty_states_emass, ionode_id )
|
||||
CALL mp_bcast( empty_states_ethr, ionode_id )
|
||||
CALL mp_bcast( diis_size, ionode_id )
|
||||
CALL mp_bcast( diis_nreset, ionode_id )
|
||||
CALL mp_bcast( diis_hcut, ionode_id )
|
||||
CALL mp_bcast( diis_wthr, ionode_id )
|
||||
CALL mp_bcast( diis_delt, ionode_id )
|
||||
CALL mp_bcast( diis_maxstep, ionode_id )
|
||||
CALL mp_bcast( diis_rot, ionode_id )
|
||||
CALL mp_bcast( diis_fthr, ionode_id )
|
||||
CALL mp_bcast( diis_temp, ionode_id )
|
||||
CALL mp_bcast( diis_achmix, ionode_id )
|
||||
CALL mp_bcast( diis_g0chmix, ionode_id )
|
||||
CALL mp_bcast( diis_g1chmix, ionode_id )
|
||||
CALL mp_bcast( diis_nchmix, ionode_id )
|
||||
CALL mp_bcast( diis_nrot, ionode_id )
|
||||
CALL mp_bcast( diis_rothr, ionode_id )
|
||||
CALL mp_bcast( diis_ethr, ionode_id )
|
||||
CALL mp_bcast( diis_chguess, ionode_id )
|
||||
CALL mp_bcast( mixing_fixed_ns, ionode_id )
|
||||
CALL mp_bcast( mixing_mode, ionode_id )
|
||||
CALL mp_bcast( mixing_beta, ionode_id )
|
||||
CALL mp_bcast( mixing_ndim, ionode_id )
|
||||
CALL mp_bcast( diagonalization, ionode_id )
|
||||
CALL mp_bcast( diago_thr_init, ionode_id )
|
||||
CALL mp_bcast( diago_cg_maxiter, ionode_id )
|
||||
CALL mp_bcast( diago_david_ndim, ionode_id )
|
||||
CALL mp_bcast( diago_diis_ndim, ionode_id )
|
||||
CALL mp_bcast( sic, ionode_id )
|
||||
CALL mp_bcast( sic_epsilon , ionode_id )
|
||||
CALL mp_bcast( force_pairing , ionode_id )
|
||||
!
|
||||
!***ensemble-DFT
|
||||
! ... ensemble-DFT
|
||||
!
|
||||
CALL mp_bcast( fermi_energy, ionode_id )
|
||||
CALL mp_bcast( n_inner, ionode_id )
|
||||
CALL mp_bcast( rotation_dynamics, ionode_id )
|
||||
|
@ -761,15 +772,18 @@ MODULE read_namelists_module
|
|||
CALL mp_bcast( occmass, ionode_id )
|
||||
CALL mp_bcast( rotation_damping, ionode_id )
|
||||
CALL mp_bcast( occupation_damping, ionode_id )
|
||||
!*** GRADIENTE CONIUGATO
|
||||
CALL mp_bcast( tcg, ionode_id )
|
||||
CALL mp_bcast( maxiter, ionode_id )
|
||||
CALL mp_bcast( etresh, ionode_id )
|
||||
CALL mp_bcast( passop, ionode_id )
|
||||
|
||||
!***** CAMPO ELETTRICO
|
||||
CALL mp_bcast( epol, ionode_id )
|
||||
CALL mp_bcast( efield, ionode_id )
|
||||
!
|
||||
! ... conjugate gradient
|
||||
!
|
||||
CALL mp_bcast( tcg, ionode_id )
|
||||
CALL mp_bcast( maxiter, ionode_id )
|
||||
CALL mp_bcast( etresh, ionode_id )
|
||||
CALL mp_bcast( passop, ionode_id )
|
||||
!
|
||||
! ... electric field
|
||||
!
|
||||
CALL mp_bcast( epol, ionode_id )
|
||||
CALL mp_bcast( efield, ionode_id )
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
|
@ -791,83 +805,89 @@ MODULE read_namelists_module
|
|||
IMPLICIT NONE
|
||||
!
|
||||
!
|
||||
CALL mp_bcast( phase_space, ionode_id )
|
||||
CALL mp_bcast( ion_dynamics, ionode_id )
|
||||
CALL mp_bcast( ion_radius, ionode_id )
|
||||
CALL mp_bcast( ion_damping, ionode_id )
|
||||
CALL mp_bcast( ion_positions, ionode_id )
|
||||
CALL mp_bcast( ion_velocities, ionode_id )
|
||||
CALL mp_bcast( ion_temperature, ionode_id )
|
||||
CALL mp_bcast( tempw, ionode_id )
|
||||
CALL mp_bcast( fnosep, ionode_id )
|
||||
CALL mp_bcast( nhpcl, ionode_id )
|
||||
CALL mp_bcast( nhptyp, ionode_id )
|
||||
CALL mp_bcast( ndega, ionode_id )
|
||||
CALL mp_bcast( tranp, ionode_id )
|
||||
CALL mp_bcast( amprp, ionode_id )
|
||||
CALL mp_bcast( greasp, ionode_id )
|
||||
CALL mp_bcast( tolp, ionode_id )
|
||||
CALL mp_bcast( ion_nstepe, ionode_id )
|
||||
CALL mp_bcast( ion_maxstep, ionode_id )
|
||||
CALL mp_bcast( delta_t, ionode_id )
|
||||
CALL mp_bcast( nraise, ionode_id )
|
||||
CALL mp_bcast( upscale, ionode_id )
|
||||
CALL mp_bcast( phase_space, ionode_id )
|
||||
CALL mp_bcast( ion_dynamics, ionode_id )
|
||||
CALL mp_bcast( ion_radius, ionode_id )
|
||||
CALL mp_bcast( ion_damping, ionode_id )
|
||||
CALL mp_bcast( ion_positions, ionode_id )
|
||||
CALL mp_bcast( ion_velocities, ionode_id )
|
||||
CALL mp_bcast( ion_temperature, ionode_id )
|
||||
CALL mp_bcast( tempw, ionode_id )
|
||||
CALL mp_bcast( fnosep, ionode_id )
|
||||
CALL mp_bcast( nhpcl, ionode_id )
|
||||
CALL mp_bcast( nhptyp, ionode_id )
|
||||
CALL mp_bcast( ndega, ionode_id )
|
||||
CALL mp_bcast( tranp, ionode_id )
|
||||
CALL mp_bcast( amprp, ionode_id )
|
||||
CALL mp_bcast( greasp, ionode_id )
|
||||
CALL mp_bcast( tolp, ionode_id )
|
||||
CALL mp_bcast( ion_nstepe, ionode_id )
|
||||
CALL mp_bcast( ion_maxstep, ionode_id )
|
||||
CALL mp_bcast( delta_t, ionode_id )
|
||||
CALL mp_bcast( nraise, ionode_id )
|
||||
CALL mp_bcast( upscale, ionode_id )
|
||||
CALL mp_bcast( pot_extrapolation, ionode_id )
|
||||
CALL mp_bcast( wfc_extrapolation, ionode_id )
|
||||
!
|
||||
! ... "path" variables broadcast
|
||||
!
|
||||
CALL mp_bcast( num_of_images, ionode_id )
|
||||
CALL mp_bcast( first_last_opt, ionode_id )
|
||||
CALL mp_bcast( use_masses, ionode_id )
|
||||
CALL mp_bcast( num_of_images, ionode_id )
|
||||
CALL mp_bcast( first_last_opt, ionode_id )
|
||||
CALL mp_bcast( use_masses, ionode_id )
|
||||
CALL mp_bcast( init_num_of_images, ionode_id )
|
||||
CALL mp_bcast( use_multistep, ionode_id )
|
||||
CALL mp_bcast( use_fourier, ionode_id )
|
||||
CALL mp_bcast( use_freezing, ionode_id )
|
||||
CALL mp_bcast( fixed_tan, ionode_id )
|
||||
CALL mp_bcast( free_energy, ionode_id )
|
||||
CALL mp_bcast( write_save, ionode_id )
|
||||
CALL mp_bcast( CI_scheme, ionode_id )
|
||||
CALL mp_bcast( opt_scheme, ionode_id )
|
||||
CALL mp_bcast( damp, ionode_id )
|
||||
CALL mp_bcast( temp_req, ionode_id )
|
||||
CALL mp_bcast( ds, ionode_id )
|
||||
CALL mp_bcast( k_max, ionode_id )
|
||||
CALL mp_bcast( k_min, ionode_id )
|
||||
CALL mp_bcast( path_thr, ionode_id )
|
||||
CALL mp_bcast( use_multistep, ionode_id )
|
||||
CALL mp_bcast( use_fourier, ionode_id )
|
||||
CALL mp_bcast( use_freezing, ionode_id )
|
||||
CALL mp_bcast( fixed_tan, ionode_id )
|
||||
CALL mp_bcast( free_energy, ionode_id )
|
||||
CALL mp_bcast( write_save, ionode_id )
|
||||
CALL mp_bcast( CI_scheme, ionode_id )
|
||||
CALL mp_bcast( opt_scheme, ionode_id )
|
||||
CALL mp_bcast( damp, ionode_id )
|
||||
CALL mp_bcast( temp_req, ionode_id )
|
||||
CALL mp_bcast( ds, ionode_id )
|
||||
CALL mp_bcast( k_max, ionode_id )
|
||||
CALL mp_bcast( k_min, ionode_id )
|
||||
CALL mp_bcast( path_thr, ionode_id )
|
||||
!
|
||||
! ... BFGS
|
||||
!
|
||||
CALL mp_bcast( bfgs_ndim, ionode_id )
|
||||
CALL mp_bcast( bfgs_ndim, ionode_id )
|
||||
CALL mp_bcast( trust_radius_max, ionode_id )
|
||||
CALL mp_bcast( trust_radius_min, ionode_id )
|
||||
CALL mp_bcast( trust_radius_ini, ionode_id )
|
||||
CALL mp_bcast( w_1, ionode_id )
|
||||
CALL mp_bcast( w_2, ionode_id )
|
||||
CALL mp_bcast( w_1, ionode_id )
|
||||
CALL mp_bcast( w_2, ionode_id )
|
||||
!
|
||||
CALL mp_bcast( sic_rloc, ionode_id )
|
||||
!
|
||||
! ... SMD broadcast (Y.K. 15/04/2004)
|
||||
!
|
||||
CALL mp_bcast( smd_polm, ionode_id )
|
||||
CALL mp_bcast( smd_kwnp, ionode_id )
|
||||
CALL mp_bcast( smd_linr, ionode_id )
|
||||
CALL mp_bcast( smd_stcd, ionode_id )
|
||||
CALL mp_bcast( smd_stcd2, ionode_id )
|
||||
CALL mp_bcast( smd_stcd2, ionode_id )
|
||||
CALL mp_bcast( smd_stcd3, ionode_id )
|
||||
CALL mp_bcast( smd_codf, ionode_id )
|
||||
CALL mp_bcast( smd_forf, ionode_id )
|
||||
CALL mp_bcast( smd_smwf, ionode_id )
|
||||
CALL mp_bcast( smd_lmfreq, ionode_id )
|
||||
CALL mp_bcast( smd_tol, ionode_id )
|
||||
CALL mp_bcast( smd_maxlm, ionode_id)
|
||||
CALL mp_bcast( smd_smcp, ionode_id )
|
||||
CALL mp_bcast( smd_smopt, ionode_id )
|
||||
CALL mp_bcast( smd_smlm, ionode_id)
|
||||
CALL mp_bcast( smd_polm, ionode_id )
|
||||
CALL mp_bcast( smd_kwnp, ionode_id )
|
||||
CALL mp_bcast( smd_linr, ionode_id )
|
||||
CALL mp_bcast( smd_stcd, ionode_id )
|
||||
CALL mp_bcast( smd_stcd2, ionode_id )
|
||||
CALL mp_bcast( smd_stcd2, ionode_id )
|
||||
CALL mp_bcast( smd_stcd3, ionode_id )
|
||||
CALL mp_bcast( smd_codf, ionode_id )
|
||||
CALL mp_bcast( smd_forf, ionode_id )
|
||||
CALL mp_bcast( smd_smwf, ionode_id )
|
||||
CALL mp_bcast( smd_lmfreq, ionode_id )
|
||||
CALL mp_bcast( smd_tol, ionode_id )
|
||||
CALL mp_bcast( smd_maxlm, ionode_id )
|
||||
CALL mp_bcast( smd_smcp, ionode_id )
|
||||
CALL mp_bcast( smd_smopt, ionode_id )
|
||||
CALL mp_bcast( smd_smlm, ionode_id )
|
||||
CALL mp_bcast( smd_ene_ini, ionode_id )
|
||||
CALL mp_bcast( smd_ene_fin, ionode_id )
|
||||
|
||||
!
|
||||
CALL mp_bcast( fe_step, ionode_id )
|
||||
CALL mp_bcast( fe_nstep, ionode_id )
|
||||
CALL mp_bcast( shake_nstep, ionode_id )
|
||||
CALL mp_bcast( g_amplitude, ionode_id )
|
||||
CALL mp_bcast( g_sigma, ionode_id )
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE
|
||||
|
@ -888,19 +908,19 @@ MODULE read_namelists_module
|
|||
IMPLICIT NONE
|
||||
!
|
||||
!
|
||||
CALL mp_bcast( cell_parameters, ionode_id )
|
||||
CALL mp_bcast( cell_dynamics, ionode_id )
|
||||
CALL mp_bcast( cell_velocities, ionode_id )
|
||||
CALL mp_bcast( cell_dofree, ionode_id )
|
||||
CALL mp_bcast( press, ionode_id )
|
||||
CALL mp_bcast( wmass, ionode_id )
|
||||
CALL mp_bcast( cell_parameters, ionode_id )
|
||||
CALL mp_bcast( cell_dynamics, ionode_id )
|
||||
CALL mp_bcast( cell_velocities, ionode_id )
|
||||
CALL mp_bcast( cell_dofree, ionode_id )
|
||||
CALL mp_bcast( press, ionode_id )
|
||||
CALL mp_bcast( wmass, ionode_id )
|
||||
CALL mp_bcast( cell_temperature, ionode_id )
|
||||
CALL mp_bcast( temph, ionode_id )
|
||||
CALL mp_bcast( fnoseh, ionode_id )
|
||||
CALL mp_bcast( greash, ionode_id )
|
||||
CALL mp_bcast( cell_factor, ionode_id )
|
||||
CALL mp_bcast( cell_nstepe, ionode_id )
|
||||
CALL mp_bcast( cell_damping, ionode_id )
|
||||
CALL mp_bcast( temph, ionode_id )
|
||||
CALL mp_bcast( fnoseh, ionode_id )
|
||||
CALL mp_bcast( greash, ionode_id )
|
||||
CALL mp_bcast( cell_factor, ionode_id )
|
||||
CALL mp_bcast( cell_nstepe, ionode_id )
|
||||
CALL mp_bcast( cell_damping, ionode_id )
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
|
@ -923,7 +943,7 @@ MODULE read_namelists_module
|
|||
!
|
||||
!
|
||||
CALL mp_bcast( modenum, ionode_id )
|
||||
CALL mp_bcast( xqq, ionode_id )
|
||||
CALL mp_bcast( xqq, ionode_id )
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
|
@ -946,7 +966,7 @@ MODULE read_namelists_module
|
|||
!
|
||||
!
|
||||
CALL mp_bcast( b_length, ionode_id )
|
||||
CALL mp_bcast( lcart, ionode_id )
|
||||
CALL mp_bcast( lcart, ionode_id )
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
|
@ -969,29 +989,29 @@ MODULE read_namelists_module
|
|||
IMPLICIT NONE
|
||||
!
|
||||
!
|
||||
CALL mp_bcast( wf_efield, ionode_id )
|
||||
CALL mp_bcast( wf_switch, ionode_id )
|
||||
CALL mp_bcast( sw_len, ionode_id )
|
||||
CALL mp_bcast( efx0, ionode_id )
|
||||
CALL mp_bcast( efy0, ionode_id )
|
||||
CALL mp_bcast( efz0, ionode_id )
|
||||
CALL mp_bcast( efx1, ionode_id )
|
||||
CALL mp_bcast( efy1, ionode_id )
|
||||
CALL mp_bcast( efz1, ionode_id )
|
||||
CALL mp_bcast( wfsd, ionode_id )
|
||||
CALL mp_bcast( wfdt, ionode_id )
|
||||
CALL mp_bcast( maxwfdt, ionode_id )
|
||||
CALL mp_bcast( wf_q, ionode_id )
|
||||
CALL mp_bcast( wf_efield, ionode_id )
|
||||
CALL mp_bcast( wf_switch, ionode_id )
|
||||
CALL mp_bcast( sw_len, ionode_id )
|
||||
CALL mp_bcast( efx0, ionode_id )
|
||||
CALL mp_bcast( efy0, ionode_id )
|
||||
CALL mp_bcast( efz0, ionode_id )
|
||||
CALL mp_bcast( efx1, ionode_id )
|
||||
CALL mp_bcast( efy1, ionode_id )
|
||||
CALL mp_bcast( efz1, ionode_id )
|
||||
CALL mp_bcast( wfsd, ionode_id )
|
||||
CALL mp_bcast( wfdt, ionode_id )
|
||||
CALL mp_bcast( maxwfdt, ionode_id )
|
||||
CALL mp_bcast( wf_q, ionode_id )
|
||||
CALL mp_bcast( wf_friction, ionode_id )
|
||||
CALL mp_bcast( nit, ionode_id )
|
||||
CALL mp_bcast( nsd, ionode_id )
|
||||
CALL mp_bcast( nsteps, ionode_id )
|
||||
CALL mp_bcast( tolw, ionode_id )
|
||||
CALL mp_bcast( adapt, ionode_id )
|
||||
CALL mp_bcast( calwf, ionode_id )
|
||||
CALL mp_bcast( nwf, ionode_id )
|
||||
CALL mp_bcast( wffort, ionode_id )
|
||||
CALL mp_bcast( writev, ionode_id )
|
||||
CALL mp_bcast( nit, ionode_id )
|
||||
CALL mp_bcast( nsd, ionode_id )
|
||||
CALL mp_bcast( nsteps, ionode_id )
|
||||
CALL mp_bcast( tolw, ionode_id )
|
||||
CALL mp_bcast( adapt, ionode_id )
|
||||
CALL mp_bcast( calwf, ionode_id )
|
||||
CALL mp_bcast( nwf, ionode_id )
|
||||
CALL mp_bcast( wffort, ionode_id )
|
||||
CALL mp_bcast( writev, ionode_id )
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
|
@ -1376,25 +1396,25 @@ MODULE read_namelists_module
|
|||
! ... SMD checking ( Y.K. 15/04/2004 )
|
||||
!
|
||||
IF ( smd_polm .AND. smd_linr ) &
|
||||
CALL infomsg ( sub_name,' smd_polm & smd_linr both true ', -1)
|
||||
CALL infomsg( sub_name,' smd_polm & smd_linr both true ', -1)
|
||||
!
|
||||
IF ( smd_polm .AND. smd_kwnp < 3 ) &
|
||||
CALL infomsg ( sub_name,' smd_kwnp < 3 for smd_polm ', -1)
|
||||
CALL infomsg( sub_name,' smd_kwnp < 3 for smd_polm ', -1)
|
||||
!
|
||||
IF ( smd_stcd .AND. (smd_stcd1==0 .OR. smd_stcd2==0 .OR. smd_stcd3==0) ) &
|
||||
CALL infomsg ( sub_name,' smd_stcd not specified ', -1)
|
||||
CALL infomsg( sub_name,' smd_stcd not specified ', -1)
|
||||
!
|
||||
IF( smd_smcp .AND. (smd_smopt .OR. smd_smlm) ) &
|
||||
CALL infomsg ( sub_name,' SMCP ? ', -1)
|
||||
CALL infomsg( sub_name,' smcp ? ', -1)
|
||||
!
|
||||
IF( smd_smopt .AND. (smd_smcp .OR. smd_smlm) ) &
|
||||
CALL infomsg ( sub_name,' SMOPT ? ', -1)
|
||||
CALL infomsg( sub_name,' smopt ? ', -1)
|
||||
!
|
||||
IF( smd_smlm .AND. (smd_smcp .OR. smd_smopt) ) &
|
||||
CALL infomsg ( sub_name,' SMLM ? ', -1)
|
||||
CALL infomsg( sub_name,' smlm ? ', -1)
|
||||
!
|
||||
IF (sic /= 'none' .and. sic_rloc == 0.d0) &
|
||||
CALL errore( sub_name, ' invalid sic_rloc with sic activated ', 1)
|
||||
CALL errore( sub_name, ' invalid sic_rloc with sic activated ', 1 )
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
|
@ -1649,6 +1669,9 @@ MODULE read_namelists_module
|
|||
( nelup == neldw .OR. nelup == neldw+1 ) ) force_pairing = .TRUE.
|
||||
END IF
|
||||
!
|
||||
IF ( calculation == 'metadyn' .AND. &
|
||||
prog == 'CP' ) g_amplitude = g_amplitude / e2
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END SUBROUTINE
|
||||
|
|
|
@ -17,7 +17,7 @@ SUBROUTINE compute_fes_grads( N_in, N_fin, stat )
|
|||
USE basis, ONLY : startingwfc_ => startingwfc, &
|
||||
startingpot_ => startingpot
|
||||
USE coarsegrained_vars, ONLY : new_target, to_target, to_new_target, &
|
||||
dfe_acc, max_shake_iter, max_fe_iter
|
||||
dfe_acc, shake_nstep, fe_nstep
|
||||
USE path_variables, ONLY : pos, pes, grad_pes, frozen, &
|
||||
num_of_images, istep_path, suspended_image
|
||||
USE constraints_module, ONLY : lagrange, target, init_constraint, &
|
||||
|
@ -270,7 +270,7 @@ SUBROUTINE compute_fes_grads( N_in, N_fin, stat )
|
|||
!
|
||||
to_new_target = .TRUE.
|
||||
!
|
||||
DO iter = 1, max_shake_iter
|
||||
DO iter = 1, shake_nstep
|
||||
!
|
||||
istep = iter
|
||||
!
|
||||
|
@ -290,7 +290,7 @@ SUBROUTINE compute_fes_grads( N_in, N_fin, stat )
|
|||
!
|
||||
to_new_target = .FALSE.
|
||||
!
|
||||
DO iter = 1, max_fe_iter
|
||||
DO iter = 1, fe_nstep
|
||||
!
|
||||
istep = iter
|
||||
!
|
||||
|
@ -406,18 +406,12 @@ SUBROUTINE metadyn()
|
|||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE constraints_module, ONLY : nconstr, target
|
||||
USE control_flags, ONLY : istep, ldamped
|
||||
USE cell_base, ONLY : at, alat
|
||||
USE ener, ONLY : etot
|
||||
USE io_files, ONLY : prefix, iunaxsf, tmp_dir
|
||||
USE constants, ONLY : bohr_radius_angs
|
||||
USE io_files, ONLY : iunaxsf, iunmeta
|
||||
USE coarsegrained_vars, ONLY : fe_grad, new_target, to_target, &
|
||||
to_new_target, fe_step, metadyn_history, &
|
||||
max_metadyn_iter, A, sigma
|
||||
USE coarsegrained_vars, ONLY : allocate_coarsegrained_vars, &
|
||||
deallocate_coarsegrained_vars
|
||||
max_metadyn_iter, starting_metadyn_iter
|
||||
USE coarsegrained_base, ONLY : add_gaussians
|
||||
USE parser, ONLY : delete_if_present
|
||||
USE io_global, ONLY : ionode
|
||||
USE basic_algebra_routines
|
||||
!
|
||||
|
@ -426,43 +420,21 @@ SUBROUTINE metadyn()
|
|||
INTEGER :: iter
|
||||
!
|
||||
!
|
||||
CALL allocate_coarsegrained_vars( nconstr, max_metadyn_iter )
|
||||
iter = starting_metadyn_iter
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
metadyn_loop: DO
|
||||
!
|
||||
OPEN( UNIT = iunaxsf, FILE = TRIM( prefix ) // ".axsf", &
|
||||
STATUS = "UNKNOWN", ACTION = "WRITE" )
|
||||
iter = iter + 1
|
||||
!
|
||||
WRITE( UNIT = iunaxsf, FMT = '(" ANIMSTEPS ",I3)' ) max_metadyn_iter
|
||||
WRITE( UNIT = iunaxsf, FMT = '(" CRYSTAL ")' )
|
||||
WRITE( UNIT = iunaxsf, FMT = '(" PRIMVEC ")' )
|
||||
WRITE( UNIT = iunaxsf, FMT = '(3F14.10)' ) &
|
||||
at(1,1) * alat * bohr_radius_angs, &
|
||||
at(2,1) * alat * bohr_radius_angs, &
|
||||
at(3,1) * alat * bohr_radius_angs
|
||||
WRITE( UNIT = iunaxsf, FMT = '(3F14.10)' ) &
|
||||
at(1,2) * alat * bohr_radius_angs, &
|
||||
at(2,2) * alat * bohr_radius_angs, &
|
||||
at(3,2) * alat * bohr_radius_angs
|
||||
WRITE( UNIT = iunaxsf, FMT = '(3F14.10)' ) &
|
||||
at(1,3) * alat * bohr_radius_angs, &
|
||||
at(2,3) * alat * bohr_radius_angs, &
|
||||
at(3,3) * alat * bohr_radius_angs
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL delete_if_present( TRIM( prefix ) // '.metadyn' )
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
OPEN( UNIT = 999, FILE = TRIM( prefix ) // '.metadyn', STATUS = 'NEW' )
|
||||
!
|
||||
WRITE( 999, '(2(2X,I5))' ) nconstr, max_metadyn_iter
|
||||
WRITE( 999, '(2(2X,F12.8))' ) A, sigma
|
||||
!
|
||||
END IF
|
||||
!
|
||||
DO iter = 1, max_metadyn_iter
|
||||
IF ( iter > 1 ) THEN
|
||||
!
|
||||
CALL add_gaussians( iter )
|
||||
!
|
||||
new_target(:) = target(:) - fe_step * fe_grad(:) / norm( fe_grad )
|
||||
!
|
||||
CALL move_to_target()
|
||||
!
|
||||
END IF
|
||||
!
|
||||
metadyn_history(:,iter) = target(:)
|
||||
!
|
||||
|
@ -471,29 +443,23 @@ SUBROUTINE metadyn()
|
|||
CALL free_energy_grad( iter )
|
||||
!
|
||||
IF ( ionode ) &
|
||||
WRITE( 999, '(I4,5(2X,F12.8))' ) iter, target(:), etot, fe_grad(:)
|
||||
WRITE( iunmeta, '(I4,5(2X,F12.8))' ) iter, target(:), etot, fe_grad(:)
|
||||
!
|
||||
CALL add_gaussians( iter )
|
||||
IF ( ionode ) CALL flush_unit( iunmeta )
|
||||
!
|
||||
new_target(:) = target(:) - fe_step * fe_grad(:) / norm( fe_grad )
|
||||
IF ( iter >= max_metadyn_iter ) EXIT metadyn_loop
|
||||
!
|
||||
CALL move_to_target()
|
||||
!
|
||||
IF ( ionode ) CALL flush_unit( 999 )
|
||||
!
|
||||
END DO
|
||||
END DO metadyn_loop
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
CALL write_config( iter )
|
||||
!
|
||||
CLOSE( UNIT = iunaxsf )
|
||||
CLOSE( UNIT = 999 )
|
||||
CLOSE( UNIT = iunmeta )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL deallocate_coarsegrained_vars()
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
CONTAINS
|
||||
|
@ -503,9 +469,12 @@ SUBROUTINE metadyn()
|
|||
!------------------------------------------------------------------------
|
||||
!
|
||||
USE constants, ONLY : e2
|
||||
USE coarsegrained_vars, ONLY : max_fe_iter, dfe_acc
|
||||
USE control_flags, ONLY : istep, ldamped
|
||||
USE coarsegrained_vars, ONLY : fe_nstep, dfe_acc
|
||||
USE constraints_module, ONLY : lagrange
|
||||
USE control_flags, ONLY : istep, conv_ions
|
||||
USE io_files, ONLY : tmp_dir, prefix
|
||||
USE parser, ONLY : delete_if_present
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
|
@ -523,13 +492,13 @@ SUBROUTINE metadyn()
|
|||
!
|
||||
to_new_target = .FALSE.
|
||||
!
|
||||
DO i = 1, max_fe_iter
|
||||
DO i = 1, fe_nstep
|
||||
!
|
||||
istep = istep + 1
|
||||
!
|
||||
CALL electronic_scf( lfirst, stat )
|
||||
!
|
||||
IF ( .NOT. stat ) RETURN
|
||||
IF ( .NOT. stat ) CALL stop_run( stat )
|
||||
!
|
||||
CALL move_ions()
|
||||
!
|
||||
|
@ -561,7 +530,10 @@ SUBROUTINE metadyn()
|
|||
SUBROUTINE move_to_target()
|
||||
!------------------------------------------------------------------------
|
||||
!
|
||||
USE coarsegrained_vars, ONLY : max_shake_iter
|
||||
USE coarsegrained_vars, ONLY : shake_nstep
|
||||
USE control_flags, ONLY : istep
|
||||
USE io_files, ONLY : tmp_dir, prefix
|
||||
USE parser, ONLY : delete_if_present
|
||||
!
|
||||
INTEGER :: i
|
||||
LOGICAL :: stat
|
||||
|
@ -573,13 +545,13 @@ SUBROUTINE metadyn()
|
|||
!
|
||||
to_new_target = .TRUE.
|
||||
!
|
||||
DO i = 1, max_shake_iter
|
||||
DO i = 1, shake_nstep
|
||||
!
|
||||
istep = i
|
||||
!
|
||||
CALL electronic_scf( .FALSE., stat )
|
||||
!
|
||||
IF ( .NOT. stat ) RETURN
|
||||
IF ( .NOT. stat ) CALL stop_run( stat )
|
||||
!
|
||||
CALL move_ions()
|
||||
!
|
||||
|
@ -648,8 +620,6 @@ SUBROUTINE electronic_scf( lfirst, stat )
|
|||
WRITE( UNIT = iunpath, &
|
||||
FMT = '(/,5X,"WARNING : scf convergence NOT achieved",/)' )
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL forces()
|
||||
|
|
51
PW/input.f90
51
PW/input.f90
|
@ -21,7 +21,8 @@ SUBROUTINE iosys()
|
|||
! ... independent input parser
|
||||
!
|
||||
!
|
||||
USE constants, ONLY : AU, eV_to_kelvin
|
||||
USE kinds, ONLY : DP
|
||||
USE constants, ONLY : au, eV_to_kelvin
|
||||
USE mp_global, ONLY : npool, nproc_pool
|
||||
!
|
||||
USE io_global, ONLY : stdout, ionode
|
||||
|
@ -181,6 +182,12 @@ SUBROUTINE iosys()
|
|||
w_1_ => w_1, &
|
||||
w_2_ => w_2
|
||||
!
|
||||
USE coarsegrained_vars, ONLY : fe_nstep_ => fe_nstep, &
|
||||
shake_nstep_ => shake_nstep, &
|
||||
fe_step_ => fe_step, &
|
||||
g_amplitude_ => g_amplitude, &
|
||||
g_sigma_ => g_sigma
|
||||
!
|
||||
USE check_stop, ONLY : check_stop_init
|
||||
!
|
||||
! CONTROL namelist
|
||||
|
@ -230,9 +237,10 @@ SUBROUTINE iosys()
|
|||
use_masses, use_multistep, first_last_opt, &
|
||||
damp, init_num_of_images, temp_req, k_max, &
|
||||
k_min, ds, use_fourier, use_freezing, &
|
||||
fixed_tan, free_energy, write_save, &
|
||||
fixed_tan, free_energy, write_save, w_1, w_2, &
|
||||
trust_radius_max, trust_radius_min, bfgs_ndim, &
|
||||
trust_radius_ini, w_1, w_2
|
||||
trust_radius_ini, g_amplitude, g_sigma, fe_step,&
|
||||
fe_nstep, shake_nstep
|
||||
!
|
||||
! CELL namelist
|
||||
!
|
||||
|
@ -253,16 +261,13 @@ SUBROUTINE iosys()
|
|||
!
|
||||
USE read_namelists_module, ONLY : read_namelists, sm_not_set
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
! ... local variables
|
||||
!
|
||||
INTEGER :: unit = 5, &
|
||||
i, ia, ios, is, image, nt
|
||||
LOGICAL :: ltest
|
||||
REAL(DP) :: theta, phi
|
||||
INTEGER :: unit = 5, i, ia, ios, is, image, nt
|
||||
LOGICAL :: ltest
|
||||
REAL(DP) :: theta, phi
|
||||
!
|
||||
!
|
||||
CALL getenv( 'HOME', pseudo_dir )
|
||||
|
@ -1153,15 +1158,16 @@ SUBROUTINE iosys()
|
|||
report_ = report
|
||||
lambda_ = lambda
|
||||
!
|
||||
Hubbard_U_( 1 : ntyp ) = hubbard_u( 1 : ntyp )
|
||||
Hubbard_alpha_( 1 : ntyp ) = hubbard_alpha( 1 : ntyp )
|
||||
lda_plus_u_ = lda_plus_u
|
||||
nspin_ = nspin
|
||||
starting_magnetization_ = starting_magnetization
|
||||
starting_ns = starting_ns_eigenvalue
|
||||
U_projection = U_projection_type
|
||||
nosym_ = nosym
|
||||
nbnd_ = nbnd
|
||||
Hubbard_U_(1:ntyp) = hubbard_u(1:ntyp)
|
||||
Hubbard_alpha_(1:ntyp) = hubbard_alpha(1:ntyp)
|
||||
lda_plus_u_ = lda_plus_u
|
||||
nspin_ = nspin
|
||||
starting_magnetization_ = starting_magnetization
|
||||
starting_ns = starting_ns_eigenvalue
|
||||
U_projection = U_projection_type
|
||||
nosym_ = nosym
|
||||
nbnd_ = nbnd
|
||||
!
|
||||
#if defined (EXX)
|
||||
!
|
||||
lexx_ = lexx
|
||||
|
@ -1169,6 +1175,7 @@ SUBROUTINE iosys()
|
|||
nqx2_ = nqx2
|
||||
nqx3_ = nqx3
|
||||
yukawa_ = yukawa
|
||||
!
|
||||
#endif
|
||||
!
|
||||
startingwfc_ = startingwfc
|
||||
|
@ -1221,6 +1228,14 @@ SUBROUTINE iosys()
|
|||
w_1_ = w_1
|
||||
w_2_ = w_2
|
||||
!
|
||||
! ... meta-dynamics
|
||||
!
|
||||
fe_nstep_ = fe_nstep
|
||||
shake_nstep_ = shake_nstep
|
||||
fe_step_ = fe_step
|
||||
g_amplitude_ = g_amplitude
|
||||
g_sigma_ = g_sigma
|
||||
!
|
||||
! ... read following cards
|
||||
!
|
||||
ALLOCATE( ityp( nat_ ) )
|
||||
|
|
35
PW/pwscf.f90
35
PW/pwscf.f90
|
@ -11,18 +11,19 @@ PROGRAM pwscf
|
|||
!
|
||||
! ... Plane Wave Self-Consistent Field code
|
||||
!
|
||||
USE io_global, ONLY : stdout
|
||||
USE parameters, ONLY : ntypx, npk, lmaxx, nchix, ndmx, nqfx, nbrx
|
||||
USE global_version, ONLY : version_number
|
||||
USE wvfct, ONLY : gamma_only
|
||||
USE noncollin_module, ONLY : noncolin
|
||||
USE control_flags, ONLY : nstep, istep, conv_elec, conv_ions, &
|
||||
lpath, lmetadyn
|
||||
USE io_files, ONLY : nd_nmbr, iunpath, tmp_dir
|
||||
USE path_variables, ONLY : conv_path
|
||||
USE path_base, ONLY : initialize_path, search_mep
|
||||
USE path_io_routines, ONLY : io_path_start, io_path_stop
|
||||
USE io_global, ONLY : ionode
|
||||
USE io_global, ONLY : stdout
|
||||
USE parameters, ONLY : ntypx, npk, lmaxx, nchix, ndmx, nqfx, nbrx
|
||||
USE global_version, ONLY : version_number
|
||||
USE wvfct, ONLY : gamma_only
|
||||
USE noncollin_module, ONLY : noncolin
|
||||
USE control_flags, ONLY : nstep, istep, conv_elec, conv_ions, &
|
||||
lpath, lmetadyn
|
||||
USE io_files, ONLY : nd_nmbr, iunpath, tmp_dir
|
||||
USE path_variables, ONLY : conv_path
|
||||
USE path_base, ONLY : initialize_path, search_mep
|
||||
USE coarsegrained_base, ONLY : metadyn_init
|
||||
USE path_io_routines, ONLY : io_path_start, io_path_stop
|
||||
USE io_global, ONLY : ionode
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
|
@ -89,6 +90,8 @@ PROGRAM pwscf
|
|||
!
|
||||
! ... meta-dynamics
|
||||
!
|
||||
CALL metadyn_init()
|
||||
!
|
||||
CALL metadyn()
|
||||
!
|
||||
ELSE
|
||||
|
@ -117,12 +120,12 @@ PROGRAM pwscf
|
|||
!
|
||||
END DO main_loop
|
||||
!
|
||||
CALL punch()
|
||||
!
|
||||
CALL stop_run( conv_ions )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL punch()
|
||||
!
|
||||
CALL stop_run( conv_ions )
|
||||
!
|
||||
END IF
|
||||
!
|
||||
STOP
|
||||
|
|
|
@ -15,12 +15,14 @@ SUBROUTINE stop_run( flag )
|
|||
! ... or during execution with flag = .FALSE. (does not remove 'restart')
|
||||
!
|
||||
USE io_global, ONLY : stdout, ionode
|
||||
USE control_flags, ONLY : lpath, lneb, lsmd, twfcollect, lconstrain
|
||||
USE control_flags, ONLY : lpath, lneb, lsmd, twfcollect, lconstrain, &
|
||||
lcoarsegrained
|
||||
USE io_files, ONLY : prefix, iunwfc, iunigk, iunres, iunefield
|
||||
USE input_parameters, ONLY : deallocate_input_parameters
|
||||
USE path_variables, ONLY : path_deallocation
|
||||
USE path_io_routines, ONLY : io_path_stop
|
||||
USE constraints_module, ONLY : deallocate_constraint
|
||||
USE coarsegrained_vars, ONLY : deallocate_coarsegrained_vars
|
||||
USE mp, ONLY : mp_barrier, mp_end
|
||||
USE bp, ONLY : lelfield
|
||||
!
|
||||
|
@ -59,22 +61,22 @@ SUBROUTINE stop_run( flag )
|
|||
CALL seqopn( 4, 'md', 'FORMATTED', exst )
|
||||
CLOSE( UNIT = 4, STATUS = 'DELETE' )
|
||||
!
|
||||
!CALL seqopn( 4, 'para', 'FORMATTED', exst )
|
||||
!CLOSE( UNIT = 4, STATUS = 'DELETE' )
|
||||
CALL seqopn( 4, 'para', 'FORMATTED', exst )
|
||||
CLOSE( UNIT = 4, STATUS = 'DELETE' )
|
||||
!
|
||||
CALL seqopn( 4, 'BLOCK', 'FORMATTED', exst )
|
||||
CLOSE( UNIT = 4, STATUS = 'DELETE' )
|
||||
!
|
||||
END IF
|
||||
! close unit for electric field if needed
|
||||
IF( lelfield) CLOSE( UNIT = iunefield, STATUS = 'KEEP' )
|
||||
|
||||
!
|
||||
! ... close unit for electric field if needed
|
||||
!
|
||||
IF ( lelfield ) CLOSE( UNIT = iunefield, STATUS = 'KEEP' )
|
||||
!
|
||||
! ... iunigk is kept open during the execution - close and remove
|
||||
!
|
||||
CLOSE( UNIT = iunigk, STATUS = 'DELETE' )
|
||||
!
|
||||
|
||||
CALL print_clock_pw()
|
||||
!
|
||||
CALL mp_barrier()
|
||||
|
@ -94,6 +96,8 @@ SUBROUTINE stop_run( flag )
|
|||
!
|
||||
IF ( lconstrain ) CALL deallocate_constraint()
|
||||
!
|
||||
IF ( lcoarsegrained ) CALL deallocate_coarsegrained_vars()
|
||||
!
|
||||
IF ( lneb ) THEN
|
||||
!
|
||||
CALL path_deallocation( 'neb' )
|
||||
|
|
Loading…
Reference in New Issue