Example: Water dimer dissociation¶
This example demonstrates a basic InfRETIS path sampling calculation for the dissociation of a water dimer using the Amber force field (GAFF).
Files¶
The example files are located in $AMSHOME/examples/infretis/water_dimer/:
water_dimer.run(main run script)infretis.toml(InfRETIS configuration)ams_inp/ams.inp(AMS engine input)
Run script¶
#!/bin/sh
cp -r "$AMSHOME/examples/infretis/water_dimer/ams_inp" .
cp "$AMSHOME/examples/infretis/water_dimer/infretis.toml" .
export NSCM=1 # MPI ranks per infretis worker
export OMP_NUM_THREADS=1 # OpenMP threads per MPI rank
# The following retry loop is only needed for regression testing purposes,
# ordinary simulations need just the few lines between "BEGIN infretis run" and
# "END infretis run"
i=0
retry_limit=4
while true; do
# BEGIN infretis run
cp -r "$AMSHOME/examples/infretis/water_dimer/load" .
$AMSBIN/uv_scm run infretis exec infretisrun -i infretis.toml
# -nskip 10 is only needed to make wham work for this extremely short run
$AMSBIN/uv_scm run infretis exec inft wham -nskip 10
# END infretis run
# What follows is purely regression testing logic
if awk 'BEGIN { max_Pcross = 0.25; } END { exit(!($2 != 0 && $2 <= max_Pcross && $3 != 0 && $3 <= max_Pcross && $4 != 0 && $4 <= max_Pcross)); }' wham/Pcross.txt; then
# All Pcross are nonzero => WHAM successfull
# We also check that Pcross aren't too large, which does happen randomly
# and would just trigger a spurious diff, so we just retry in that case
# to see if the diff goes away.
break
fi
if [[ ! -s wham/Pcross.txt ]]; then
# Something went badly wrong, bail out
exit 1
elif ((i++ < retry_limit)); then
echo "WHAM failed, retrying..."
rm -rf load/ wham/ worker*/ amsworker_*/ restart.toml infretis_data.txt *.log
else
echo "Giving up after $i attempts"
exit 2
fi
done
echo "Success, had to retry $i times"
echo "BEGIN pathlengths.txt"
# skip [0-] as that is the least well-defined one
grep -v '^-1' wham/pathlengths.txt
echo "END pathlengths.txt"
for f in wham/{ploc_unscaled,Pcross}.txt; do
echo "BEGIN ${f#*/}"
cat "$f"
echo "END ${f#*/}"
done
echo "BEGIN overall Pcross"
tail -n 1 wham/Pcross.txt
echo "END overall Pcross"
InfRETIS configuration (infretis.toml)¶
# infretis config
[runner]
workers = 2
wmdrun = [1,1]
[simulation]
interfaces = [ 0.30, 0.35 , 0.40, 0.45, 0.50 ]
steps = 100
seed = 0
load_dir = 'load'
shooting_moves = ['sh', 'sh', 'wf', 'wf', 'wf']
[simulation.tis_set]
maxlength = 20000
aimless = true
allowmaxlength = false
zero_momentum = true # momentum true
temperature = 300
[engine]
class = 'ams'
engine = 'ams'
timestep = 0.001
input_path = 'ams_inp'
subcycles = 5
[orderparameter]
class = 'Distance'
index = [ 0, 3]
periodic = false
[output]
backup = 'backup'
data_dir = "./"
order-file = 1
energy-file = 1
trajectory-file = -1
screen = 1
pattern = false
delete_old = true
AMS engine input (ams_inp/ams.inp)¶
MolecularDynamics
TimeStep 1.0
Preserve CenterofMass=Yes Momentum=No AngularMomentum=No
Thermostat Type=none
InitialVelocities Type=Random Temperature=300 RandomVelocitiesMethod=Exact
End
System
Charge 0.0
Atoms [A]
O 49.91002560 49.72051620 50.63497066 ForceField.Type=OW ForceField.Charge=-0.834
H 49.91043091 50.30117035 49.87400055 ForceField.Type=HW ForceField.Charge=0.417
H 50.39500713 48.94715309 50.34698963 ForceField.Type=HW ForceField.Charge=0.417
O 50.09613991 51.82065487 48.74695301 ForceField.Type=OW ForceField.Charge=-0.834
H 49.73316669 52.70631790 48.73785973 ForceField.Type=HW ForceField.Charge=0.417
H 50.76516151 51.82843685 48.06241989 ForceField.Type=HW ForceField.Charge=0.417
End
BondOrders
1 2 1.0
1 3 1.0
4 5 1.0
4 6 1.0
End
End
Engine ForceField
Type GAFF
NonBondedCutoff 999.0
EndEngine
Description¶
This example simulates the dissociation of a water dimer using the distance between the two oxygen atoms as the order parameter. The RETIS interfaces are placed at distances of 0.30, 0.35, 0.40, 0.45, and 0.50 nm.
Key features of this setup:
Engine: ForceField (GAFF) with 1.0 fs timestep
Order Parameter: Oxygen-oxygen distance (atoms 0 and 3)
Trajectory Length: Maximum 20,000 steps
Workers: 2 parallel workers
Shooting Moves: Standard shooting (sh) for the first two ensembles, Wire Fencing (wf) for the others
The initial reactive paths in the load/ directory are required to start the simulation. These can be generated using biased MD or the InfInit tool.
After running, the analysis is performed with the inft wham command to compute crossing probabilities and rate constants.