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:
sbraccia 2005-09-20 15:17:18 +00:00
parent e7bf22f916
commit 5e399e3a0b
12 changed files with 698 additions and 491 deletions

View File

@ -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

View File

@ -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()
!

View File

@ -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' )
!

View File

@ -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' )

View File

@ -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 )
!

View File

@ -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

View File

@ -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
!=----------------------------------------------------------------------------=!

View File

@ -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

View File

@ -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()

View File

@ -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_ ) )

View File

@ -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

View File

@ -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' )