Running a Parallel Replica Job

Running a Parallel Replica Job#

A sample parallel replica simulation can be found in the directory: examples/parallel-replica/. Two input files config.ini and pos.con are required for EON simlution.

The example system is the diffusion of an Al adatom on the Al(100) surface. A snapshot of the system is given below:

Al adatom on the Al(100)

Al adatom on the Al(100)#

The config.ini file will run a parallel replica job with 2 replicas on one local core.

[Main]
job = parallel_replica
temperature = 500                   ; temperature of the MD simulations
random_seed = 1024

[Potential]
potential = eam_al                  ; embedded atom method potential for aluminum

[Communicator]
type = local                        ; run the client locally
client_path =../../client/client    ; $PATH for the client binary
number_of_cpus = 1                  ; number of jobs to run locally
num_jobs = 2                        ; total number of trajectories to run

[Dynamics]
time_step = 2.0                     ; timestep of the MD simulation (in fs)
time = 12000.0                      ; total number of MD steps to run
thermostat = andersen               ; Andersen thermostat with Verlet algorithm
andersen_alpha = 0.2                ; collision strength in the andersen thermostat
andersen_collision_period = 10.0    ; collision period of andersen thermostat (in fs)

[Parallel Replica]
dephase_time = 200                  ; number of steps used to decorrelate the replica trajectories.
state_check_interval = 3000         ; number of steps between quanches to check if a new state is found
state_save_interval  = 200          ; number of steps recorded to a buffer array to refine the transition time
post_transition_time = 200          ; number of additional MD steps run after a new state is found
stop_after_transition = false       ; flag to stop the job when a new state is found

[Optimizer]
opt_method = cg                     ; use the conjugate gradient optimizer
converged_force = 0.005             ; stop optimizations when the max force per atom reaches 0.005 eV/A

Now we can run the trajectory by executing the command python -m eon.server

EONgit/examples/parallel-replica via 🅒 eongit 
➜ python -m eon.server
Eon version: 1321976b
Simulation time: 0.000000e+00 s
State list path does not exist; Creating: .//states/
Registering results
Processed results: 0
Time in current state: 0.000000e+00 s
Simulation time: 0.000000e+00 s
Queue contains: 0 searches
Making: 2 searches
Job finished: .//jobs/scratch/0_0
Job finished: .//jobs/scratch/0_1
Created: 2 searches

Then use the -n flag to register the result::

EONgit/examples/parallel-replica via 🅒 eongit 
➜ python -m eon.server -n
Eon version: 1321976b
Simulation time: 0.000000e+00 s
Registering results
Found transition with time: 5.000e-12 s
Cancelled 0 workunits from state 0
Processed results: 0
Currently in state: 1
Time in current state: 0.000000e+00 s
Simulation time: 5.000000e-12 s
Queue contains: 0 searches
Making: 0 searches

Information from the trajectory is written in the dynamics.txt file:

➜ cat dynamics.txt             
 step-number   reactant-id    process-id    product-id     step-time    total-time       barrier          rate        energy
-----------------------------------------------------------------------------------------------------------------------------
           0             0             0             1  5.000000e-12  5.000000e-12      0.000000  0.000000e+00   -472.909569

More information is obtained by running a few more times:

➜ for i in {0..2}; python -m eon.server; done
Eon version: 1321976b
Simulation time: 5.000000e-12 s
Registering results
Processed results: 0
Time in current state: 0.000000e+00 s
Simulation time: 5.000000e-12 s
Queue contains: 0 searches
Making: 2 searches
Job finished: .//jobs/scratch/1_2
Job finished: .//jobs/scratch/1_3
Created: 2 searches
Eon version: 1321976b
Simulation time: 5.000000e-12 s
Registering results
Found transition with time: 2.000e-12 s
Cancelled 0 workunits from state 1
Processed results: 0
Currently in state: 2
Time in current state: 0.000000e+00 s
Simulation time: 7.000000e-12 s
Queue contains: 0 searches
Making: 2 searches
Job finished: .//jobs/scratch/2_4
Job finished: .//jobs/scratch/2_5
Created: 2 searches
➜ python -m eon.server -n
Eon version: None
Simulation time: 7.000000e-12 s
Registering results
Found transition with time: 3.000e-12 s
Cancelled 0 workunits from state 2
Processed results: 0
Currently in state: 3
Time in current state: 0.000000e+00 s
Simulation time: 1.000000e-11 s
Queue contains: 0 searches
Making: 0 searches
➜ cat dynamics.txt             
 step-number   reactant-id    process-id    product-id     step-time    total-time       barrier          rate        energy
-----------------------------------------------------------------------------------------------------------------------------
           0             0             0             1  5.000000e-12  5.000000e-12      0.000000  0.000000e+00   -472.909569
           1             1             0             2  2.000000e-12  7.000000e-12      0.000000  0.000000e+00   -472.909577
           2             2             0             3  3.000000e-12  1.000000e-11      0.000000  0.000000e+00   -472.909572

Detailed information of the simulation is stored in the folder states. where the geometric and energy of the visited states are stored in the sub-folder labeled as state id. You can find the geometric of the prodcut in states/1/reactant.con/, a snapshot is shown below:

Al adatom on the Al(100)

Al adatom on the Al(100)#

Compared to the reactant geometric, we can tell that the transition we found follows the exchange mechanism.

Adding Hyperdynamics#

You can turn on the hyperdynamics method by adding the following section to your config.ini file:

[Hyperdynamics]
bias_potential=bond_boost       ; bond_boost bias potential
bb_boost_atomlist=20,26,50,56,150 ; atoms that are boosted in the bias potential
bb_rcut=3.0                     ; boost radius
bb_rmd_time=100.0               ; MD time to obtain the equilibrium configuration
bb_dvmax=0.4                    ; magnitude of the bond-boost bias potential
bb_stretch_threshold=0.2        ; defines the bond-boost dividing surface
bb_ds_curvature=0.95            ; curvature near the bond-boost dividing surface, it should be <= 1; a value of 0.9-0.98 is recommended

All other settings and output infomation are as in a regular parallel replica dynamics simulation.