Reactive scattering from a metal surface
Our implementation allows us to simulate vibrational de-excitation probability during reactive scattering events at metal surfaces for any diatomic molecule with a suitable model to describe energies and forces (and friction coefficients for MDEF simulations). Here, we investigate the reactive scattering of hydrogen on a Ag(111) metal surface as a prototypical example.
To run this kind of simulation, a set of initial positions and velocities ($\mathbf{R}$ and $\mathbf{\dot{R}}$) with ro-vibrational quantum states $\nu$ and $j$ have to be generated (see EBK quantisation). With a specific ro-vibrational quantum state it is possible to compute different properties after molecular collision and energy transfer with the metal surface like the vibrational de-excitation probabilities discussed here.
In order to reproduce the state-to-state vibrational de-excitation probability results presented originally by [21] for this system, the same initial conditions were generated with QuantisedDiatomic.generate_configurations
setting the initial ro-vibrational quantum state to ($\nu=2, j=0$) as was explored in the original paper.
As shown earlier in the EBK documentation we are able to generate a semiclassically quantised distribution for a diatomic molecule on a collision course with a metal surface. In this example we follow the EBK example using the H2AgModel
to prepare our initial distribution and run our simulation.
Specifically, we have produced a set of initial conditions with different translational energy (translational_energy
keyword) ranging from 0.2 to 1.4 eV, locating the hydrogen molecule 8 Å away from the metal surface (height
keyword) with a normal incidence.
As usual, all quantities default to atomic units. Here we use Unitful to input the translational energy and height using different units, where they are later converted internally.
using NQCDynamics
using NNInterfaces
using Unitful
using NQCDynamics.InitialConditions: QuantisedDiatomic
using JLD2
atoms = Atoms([:H, :H])
model = H2AgModel()
cell = PeriodicCell([11.1175 -5.5588 0.0; 0.0 9.628 0.0; 0.0 0.0 70.3079])
sim = Simulation(atoms, model; cell=cell)
ν, J = 2, 0 # selected ro-vibrational quantum states
nsamples = 300 # number of configurations
Ek = 0.5u"eV" # Translational energy [eV] ; range considered [0.2-1.4] eV
z = 8.0u"Å" # Height [Å] ; fixed at 8 Å
configurations = QuantisedDiatomic.generate_configurations(sim, ν, J;
samples=nsamples, translational_energy=Ek, height=z)
v = first.(configurations)
r = last.(configurations)
distribution = DynamicalDistribution(v, r, (3,2))
read all parameters done
Binding curve
+----------------------------------------+
0.5 | | Actual values
| | Fitted curve
| . |
| : |
| : |
| :. |
| : |
Energy / Hartree | : |
| : |
| : ....:'''''|
| : ...''' |
| :. .:'' |
| : ..:'' |
| ': .:' |
0 | ':....:' |
+----------------------------------------+
0 5
Bond length / bohr
[ Info: The two lines shown above should closely match. This indicates the evaluation of the potential is working correctly.
[ Info: Converging the total energy to match the chosen quantum numbers...
Iter Function value Gradient norm
0 1.700968e-01 5.782251e+01
* time: 0.016371965408325195
1 7.932366e-02 5.704135e+01
* time: 0.5253541469573975
2 3.667518e-02 5.740255e+01
* time: 0.5254859924316406
3 3.486622e-03 5.727708e+01
* time: 0.5255601406097412
[ Info: Generating distribution of bond lengths and radial momenta...
Sampling 0%| | ETA: N/A
Sampling 0%|▏ | ETA: 0:00:03
Sampling 1%|▎ | ETA: 0:00:04
Sampling 1%|▍ | ETA: 0:00:03
Sampling 1%|▌ | ETA: 0:00:02
Sampling 2%|▊ | ETA: 0:00:02
Sampling 2%|▉ | ETA: 0:00:01
Sampling 2%|█ | ETA: 0:00:01
Sampling 3%|█▏ | ETA: 0:00:01
Sampling 3%|█▎ | ETA: 0:00:01
Sampling 3%|█▍ | ETA: 0:00:01
Sampling 4%|█▌ | ETA: 0:00:01
Sampling 4%|█▋ | ETA: 0:00:01
Sampling 4%|█▉ | ETA: 0:00:01
Sampling 5%|██ | ETA: 0:00:01
Sampling 5%|██▏ | ETA: 0:00:01
Sampling 5%|██▎ | ETA: 0:00:01
Sampling 6%|██▍ | ETA: 0:00:01
Sampling 6%|██▌ | ETA: 0:00:00
Sampling 6%|██▋ | ETA: 0:00:00
Sampling 7%|██▊ | ETA: 0:00:00
Sampling 7%|███ | ETA: 0:00:00
Sampling 7%|███▏ | ETA: 0:00:00
Sampling 8%|███▎ | ETA: 0:00:00
Sampling 8%|███▍ | ETA: 0:00:00
Sampling 8%|███▌ | ETA: 0:00:00
Sampling 9%|███▋ | ETA: 0:00:00
Sampling 9%|███▊ | ETA: 0:00:00
Sampling 9%|███▉ | ETA: 0:00:00
Sampling 10%|████ | ETA: 0:00:00
Sampling 10%|████▎ | ETA: 0:00:00
Sampling 10%|████▍ | ETA: 0:00:00
Sampling 11%|████▌ | ETA: 0:00:00
Sampling 11%|████▋ | ETA: 0:00:00
Sampling 11%|████▊ | ETA: 0:00:00
Sampling 12%|████▉ | ETA: 0:00:00
Sampling 12%|█████ | ETA: 0:00:00
Sampling 12%|█████▏ | ETA: 0:00:00
Sampling 13%|█████▍ | ETA: 0:00:00
Sampling 13%|█████▌ | ETA: 0:00:00
Sampling 13%|█████▋ | ETA: 0:00:00
Sampling 14%|█████▊ | ETA: 0:00:00
Sampling 14%|█████▉ | ETA: 0:00:00
Sampling 14%|██████ | ETA: 0:00:00
Sampling 15%|██████▏ | ETA: 0:00:00
Sampling 15%|██████▎ | ETA: 0:00:00
Sampling 15%|██████▌ | ETA: 0:00:00
Sampling 16%|██████▋ | ETA: 0:00:00
Sampling 16%|██████▊ | ETA: 0:00:00
Sampling 16%|██████▉ | ETA: 0:00:00
Sampling 17%|███████ | ETA: 0:00:00
Sampling 17%|███████▏ | ETA: 0:00:00
Sampling 17%|███████▎ | ETA: 0:00:00
Sampling 18%|███████▍ | ETA: 0:00:00
Sampling 18%|███████▌ | ETA: 0:00:00
Sampling 18%|███████▊ | ETA: 0:00:00
Sampling 19%|███████▉ | ETA: 0:00:00
Sampling 19%|████████ | ETA: 0:00:00
Sampling 19%|████████▏ | ETA: 0:00:00
Sampling 20%|████████▎ | ETA: 0:00:00
Sampling 20%|████████▍ | ETA: 0:00:00
Sampling 20%|████████▌ | ETA: 0:00:00
Sampling 21%|████████▋ | ETA: 0:00:00
Sampling 21%|████████▉ | ETA: 0:00:00
Sampling 21%|█████████ | ETA: 0:00:00
Sampling 22%|█████████▏ | ETA: 0:00:00
Sampling 22%|█████████▎ | ETA: 0:00:00
Sampling 22%|█████████▍ | ETA: 0:00:00
Sampling 23%|█████████▌ | ETA: 0:00:00
Sampling 23%|█████████▋ | ETA: 0:00:00
Sampling 23%|█████████▊ | ETA: 0:00:00
Sampling 24%|██████████ | ETA: 0:00:00
Sampling 24%|██████████▏ | ETA: 0:00:00
Sampling 24%|██████████▎ | ETA: 0:00:00
Sampling 25%|██████████▍ | ETA: 0:00:00
Sampling 25%|██████████▌ | ETA: 0:00:00
Sampling 25%|██████████▋ | ETA: 0:00:00
Sampling 26%|██████████▊ | ETA: 0:00:00
Sampling 26%|██████████▉ | ETA: 0:00:00
Sampling 26%|███████████ | ETA: 0:00:00
Sampling 27%|███████████▎ | ETA: 0:00:00
Sampling 27%|███████████▍ | ETA: 0:00:00
Sampling 27%|███████████▌ | ETA: 0:00:00
Sampling 28%|███████████▋ | ETA: 0:00:00
Sampling 28%|███████████▊ | ETA: 0:00:00
Sampling 28%|███████████▉ | ETA: 0:00:00
Sampling 29%|████████████ | ETA: 0:00:00
Sampling 29%|████████████▏ | ETA: 0:00:00
Sampling 29%|████████████▍ | ETA: 0:00:00
Sampling 30%|████████████▌ | ETA: 0:00:00
Sampling 30%|████████████▋ | ETA: 0:00:00
Sampling 30%|████████████▊ | ETA: 0:00:00
Sampling 31%|████████████▉ | ETA: 0:00:00
Sampling 31%|█████████████ | ETA: 0:00:00
Sampling 31%|█████████████▏ | ETA: 0:00:00
Sampling 32%|█████████████▎ | ETA: 0:00:00
Sampling 32%|█████████████▌ | ETA: 0:00:00
Sampling 32%|█████████████▋ | ETA: 0:00:00
Sampling 33%|█████████████▊ | ETA: 0:00:00
Sampling 33%|█████████████▉ | ETA: 0:00:00
Sampling 33%|██████████████ | ETA: 0:00:00
Sampling 34%|██████████████▏ | ETA: 0:00:00
Sampling 34%|██████████████▎ | ETA: 0:00:00
Sampling 34%|██████████████▍ | ETA: 0:00:00
Sampling 35%|██████████████▌ | ETA: 0:00:00
Sampling 35%|██████████████▊ | ETA: 0:00:00
Sampling 35%|██████████████▉ | ETA: 0:00:00
Sampling 36%|███████████████ | ETA: 0:00:00
Sampling 36%|███████████████▏ | ETA: 0:00:00
Sampling 36%|███████████████▎ | ETA: 0:00:00
Sampling 37%|███████████████▍ | ETA: 0:00:00
Sampling 37%|███████████████▌ | ETA: 0:00:00
Sampling 37%|███████████████▋ | ETA: 0:00:00
Sampling 38%|███████████████▉ | ETA: 0:00:00
Sampling 38%|████████████████ | ETA: 0:00:00
Sampling 38%|████████████████▏ | ETA: 0:00:00
Sampling 39%|████████████████▎ | ETA: 0:00:00
Sampling 39%|████████████████▍ | ETA: 0:00:00
Sampling 39%|████████████████▌ | ETA: 0:00:00
Sampling 40%|████████████████▋ | ETA: 0:00:00
Sampling 40%|████████████████▊ | ETA: 0:00:00
Sampling 40%|█████████████████ | ETA: 0:00:00
Sampling 41%|█████████████████▏ | ETA: 0:00:00
Sampling 41%|█████████████████▎ | ETA: 0:00:00
Sampling 41%|█████████████████▍ | ETA: 0:00:00
Sampling 42%|█████████████████▌ | ETA: 0:00:00
Sampling 42%|█████████████████▋ | ETA: 0:00:00
Sampling 42%|█████████████████▊ | ETA: 0:00:00
Sampling 43%|█████████████████▉ | ETA: 0:00:00
Sampling 43%|██████████████████ | ETA: 0:00:00
Sampling 43%|██████████████████▎ | ETA: 0:00:00
Sampling 44%|██████████████████▍ | ETA: 0:00:00
Sampling 44%|██████████████████▌ | ETA: 0:00:00
Sampling 44%|██████████████████▋ | ETA: 0:00:00
Sampling 45%|██████████████████▊ | ETA: 0:00:00
Sampling 45%|██████████████████▉ | ETA: 0:00:00
Sampling 45%|███████████████████ | ETA: 0:00:00
Sampling 46%|███████████████████▏ | ETA: 0:00:00
Sampling 46%|███████████████████▍ | ETA: 0:00:00
Sampling 46%|███████████████████▌ | ETA: 0:00:00
Sampling 47%|███████████████████▋ | ETA: 0:00:00
Sampling 47%|███████████████████▊ | ETA: 0:00:00
Sampling 47%|███████████████████▉ | ETA: 0:00:00
Sampling 48%|████████████████████ | ETA: 0:00:00
Sampling 48%|████████████████████▏ | ETA: 0:00:00
Sampling 48%|████████████████████▎ | ETA: 0:00:00
Sampling 49%|████████████████████▌ | ETA: 0:00:00
Sampling 49%|████████████████████▋ | ETA: 0:00:00
Sampling 49%|████████████████████▊ | ETA: 0:00:00
Sampling 50%|████████████████████▉ | ETA: 0:00:00
Sampling 50%|█████████████████████ | ETA: 0:00:00
Sampling 50%|█████████████████████▏ | ETA: 0:00:00
Sampling 51%|█████████████████████▎ | ETA: 0:00:00
Sampling 51%|█████████████████████▍ | ETA: 0:00:00
Sampling 51%|█████████████████████▌ | ETA: 0:00:00
Sampling 52%|█████████████████████▊ | ETA: 0:00:00
Sampling 52%|█████████████████████▉ | ETA: 0:00:00
Sampling 52%|██████████████████████ | ETA: 0:00:00
Sampling 53%|██████████████████████▏ | ETA: 0:00:00
Sampling 53%|██████████████████████▎ | ETA: 0:00:00
Sampling 53%|██████████████████████▍ | ETA: 0:00:00
Sampling 54%|██████████████████████▌ | ETA: 0:00:00
Sampling 54%|██████████████████████▋ | ETA: 0:00:00
Sampling 54%|██████████████████████▉ | ETA: 0:00:00
Sampling 55%|███████████████████████ | ETA: 0:00:00
Sampling 55%|███████████████████████▏ | ETA: 0:00:00
Sampling 55%|███████████████████████▎ | ETA: 0:00:00
Sampling 56%|███████████████████████▍ | ETA: 0:00:00
Sampling 56%|███████████████████████▌ | ETA: 0:00:00
Sampling 56%|███████████████████████▋ | ETA: 0:00:00
Sampling 57%|███████████████████████▊ | ETA: 0:00:00
Sampling 57%|████████████████████████ | ETA: 0:00:00
Sampling 57%|████████████████████████▏ | ETA: 0:00:00
Sampling 58%|████████████████████████▎ | ETA: 0:00:00
Sampling 58%|████████████████████████▍ | ETA: 0:00:00
Sampling 58%|████████████████████████▌ | ETA: 0:00:00
Sampling 59%|████████████████████████▋ | ETA: 0:00:00
Sampling 59%|████████████████████████▊ | ETA: 0:00:00
Sampling 59%|████████████████████████▉ | ETA: 0:00:00
Sampling 60%|█████████████████████████ | ETA: 0:00:00
Sampling 60%|█████████████████████████▎ | ETA: 0:00:00
Sampling 60%|█████████████████████████▍ | ETA: 0:00:00
Sampling 61%|█████████████████████████▌ | ETA: 0:00:00
Sampling 61%|█████████████████████████▋ | ETA: 0:00:00
Sampling 61%|█████████████████████████▊ | ETA: 0:00:00
Sampling 62%|█████████████████████████▉ | ETA: 0:00:00
Sampling 62%|██████████████████████████ | ETA: 0:00:00
Sampling 62%|██████████████████████████▏ | ETA: 0:00:00
Sampling 63%|██████████████████████████▍ | ETA: 0:00:00
Sampling 63%|██████████████████████████▌ | ETA: 0:00:00
Sampling 63%|██████████████████████████▋ | ETA: 0:00:00
Sampling 64%|██████████████████████████▊ | ETA: 0:00:00
Sampling 64%|██████████████████████████▉ | ETA: 0:00:00
Sampling 64%|███████████████████████████ | ETA: 0:00:00
Sampling 65%|███████████████████████████▏ | ETA: 0:00:00
Sampling 65%|███████████████████████████▎ | ETA: 0:00:00
Sampling 65%|███████████████████████████▌ | ETA: 0:00:00
Sampling 66%|███████████████████████████▋ | ETA: 0:00:00
Sampling 66%|███████████████████████████▊ | ETA: 0:00:00
Sampling 66%|███████████████████████████▉ | ETA: 0:00:00
Sampling 67%|████████████████████████████ | ETA: 0:00:00
Sampling 67%|████████████████████████████▏ | ETA: 0:00:00
Sampling 67%|████████████████████████████▎ | ETA: 0:00:00
Sampling 68%|████████████████████████████▍ | ETA: 0:00:00
Sampling 68%|████████████████████████████▌ | ETA: 0:00:00
Sampling 68%|████████████████████████████▊ | ETA: 0:00:00
Sampling 69%|████████████████████████████▉ | ETA: 0:00:00
Sampling 69%|█████████████████████████████ | ETA: 0:00:00
Sampling 69%|█████████████████████████████▏ | ETA: 0:00:00
Sampling 70%|█████████████████████████████▎ | ETA: 0:00:00
Sampling 70%|█████████████████████████████▍ | ETA: 0:00:00
Sampling 70%|█████████████████████████████▌ | ETA: 0:00:00
Sampling 71%|█████████████████████████████▋ | ETA: 0:00:00
Sampling 71%|█████████████████████████████▉ | ETA: 0:00:00
Sampling 71%|██████████████████████████████ | ETA: 0:00:00
Sampling 72%|██████████████████████████████▏ | ETA: 0:00:00
Sampling 72%|██████████████████████████████▎ | ETA: 0:00:00
Sampling 72%|██████████████████████████████▍ | ETA: 0:00:00
Sampling 73%|██████████████████████████████▌ | ETA: 0:00:00
Sampling 73%|██████████████████████████████▋ | ETA: 0:00:00
Sampling 73%|██████████████████████████████▊ | ETA: 0:00:00
Sampling 74%|███████████████████████████████ | ETA: 0:00:00
Sampling 74%|███████████████████████████████▏ | ETA: 0:00:00
Sampling 74%|███████████████████████████████▎ | ETA: 0:00:00
Sampling 75%|███████████████████████████████▍ | ETA: 0:00:00
Sampling 75%|███████████████████████████████▌ | ETA: 0:00:00
Sampling 75%|███████████████████████████████▋ | ETA: 0:00:00
Sampling 76%|███████████████████████████████▊ | ETA: 0:00:00
Sampling 76%|███████████████████████████████▉ | ETA: 0:00:00
Sampling 76%|████████████████████████████████ | ETA: 0:00:00
Sampling 77%|████████████████████████████████▎ | ETA: 0:00:00
Sampling 77%|████████████████████████████████▍ | ETA: 0:00:00
Sampling 77%|████████████████████████████████▌ | ETA: 0:00:00
Sampling 78%|████████████████████████████████▋ | ETA: 0:00:00
Sampling 78%|████████████████████████████████▊ | ETA: 0:00:00
Sampling 78%|████████████████████████████████▉ | ETA: 0:00:00
Sampling 79%|█████████████████████████████████ | ETA: 0:00:00
Sampling 79%|█████████████████████████████████▏ | ETA: 0:00:00
Sampling 79%|█████████████████████████████████▍ | ETA: 0:00:00
Sampling 80%|█████████████████████████████████▌ | ETA: 0:00:00
Sampling 80%|█████████████████████████████████▋ | ETA: 0:00:00
Sampling 80%|█████████████████████████████████▊ | ETA: 0:00:00
Sampling 81%|█████████████████████████████████▉ | ETA: 0:00:00
Sampling 81%|██████████████████████████████████ | ETA: 0:00:00
Sampling 81%|██████████████████████████████████▏ | ETA: 0:00:00
Sampling 82%|██████████████████████████████████▎ | ETA: 0:00:00
Sampling 82%|██████████████████████████████████▌ | ETA: 0:00:00
Sampling 82%|██████████████████████████████████▋ | ETA: 0:00:00
Sampling 83%|██████████████████████████████████▊ | ETA: 0:00:00
Sampling 83%|██████████████████████████████████▉ | ETA: 0:00:00
Sampling 83%|███████████████████████████████████ | ETA: 0:00:00
Sampling 84%|███████████████████████████████████▏ | ETA: 0:00:00
Sampling 84%|███████████████████████████████████▎ | ETA: 0:00:00
Sampling 84%|███████████████████████████████████▍ | ETA: 0:00:00
Sampling 85%|███████████████████████████████████▌ | ETA: 0:00:00
Sampling 85%|███████████████████████████████████▊ | ETA: 0:00:00
Sampling 85%|███████████████████████████████████▉ | ETA: 0:00:00
Sampling 86%|████████████████████████████████████ | ETA: 0:00:00
Sampling 86%|████████████████████████████████████▏ | ETA: 0:00:00
Sampling 86%|████████████████████████████████████▎ | ETA: 0:00:00
Sampling 87%|████████████████████████████████████▍ | ETA: 0:00:00
Sampling 87%|████████████████████████████████████▌ | ETA: 0:00:00
Sampling 87%|████████████████████████████████████▋ | ETA: 0:00:00
Sampling 88%|████████████████████████████████████▉ | ETA: 0:00:00
Sampling 88%|█████████████████████████████████████ | ETA: 0:00:00
Sampling 88%|█████████████████████████████████████▏ | ETA: 0:00:00
Sampling 89%|█████████████████████████████████████▎ | ETA: 0:00:00
Sampling 89%|█████████████████████████████████████▍ | ETA: 0:00:00
Sampling 89%|█████████████████████████████████████▌ | ETA: 0:00:00
Sampling 90%|█████████████████████████████████████▋ | ETA: 0:00:00
Sampling 90%|█████████████████████████████████████▊ | ETA: 0:00:00
Sampling 90%|██████████████████████████████████████ | ETA: 0:00:00
Sampling 91%|██████████████████████████████████████▏ | ETA: 0:00:00
Sampling 91%|██████████████████████████████████████▎ | ETA: 0:00:00
Sampling 91%|██████████████████████████████████████▍ | ETA: 0:00:00
Sampling 92%|██████████████████████████████████████▌ | ETA: 0:00:00
Sampling 92%|██████████████████████████████████████▋ | ETA: 0:00:00
Sampling 92%|██████████████████████████████████████▊ | ETA: 0:00:00
Sampling 93%|██████████████████████████████████████▉ | ETA: 0:00:00
Sampling 93%|███████████████████████████████████████ | ETA: 0:00:00
Sampling 93%|███████████████████████████████████████▎ | ETA: 0:00:00
Sampling 94%|███████████████████████████████████████▍ | ETA: 0:00:00
Sampling 94%|███████████████████████████████████████▌ | ETA: 0:00:00
Sampling 94%|███████████████████████████████████████▋ | ETA: 0:00:00
Sampling 95%|███████████████████████████████████████▊ | ETA: 0:00:00
Sampling 95%|███████████████████████████████████████▉ | ETA: 0:00:00
Sampling 95%|████████████████████████████████████████ | ETA: 0:00:00
Sampling 96%|████████████████████████████████████████▏ | ETA: 0:00:00
Sampling 96%|████████████████████████████████████████▍ | ETA: 0:00:00
Sampling 96%|████████████████████████████████████████▌ | ETA: 0:00:00
Sampling 97%|████████████████████████████████████████▋ | ETA: 0:00:00
Sampling 97%|████████████████████████████████████████▊ | ETA: 0:00:00
Sampling 97%|████████████████████████████████████████▉ | ETA: 0:00:00
Sampling 98%|█████████████████████████████████████████ | ETA: 0:00:00
Sampling 98%|█████████████████████████████████████████▏| ETA: 0:00:00
Sampling 98%|█████████████████████████████████████████▎| ETA: 0:00:00
Sampling 99%|█████████████████████████████████████████▌| ETA: 0:00:00
Sampling 99%|█████████████████████████████████████████▋| ETA: 0:00:00
Sampling 99%|█████████████████████████████████████████▊| ETA: 0:00:00
Sampling 100%|█████████████████████████████████████████▉| ETA: 0:00:00
Sampling 100%|██████████████████████████████████████████| Time: 0:00:00
Sampling 100%|██████████████████████████████████████████| Time: 0:00:00
Bond length distribution
+----------------------------------------+
[1.0, 1.2) |█████████████████████████████▎ 68 |
[1.2, 1.4) |██████████████████▊ 44 |
[1.4, 1.6) |███████████▎ 26 |
[1.6, 1.8) |██████████████▌ 34 |
[1.8, 2.0) |██████████████████▊ 44 |
[2.0, 2.2) |████████████████████████████████████ 84|
+----------------------------------------+
Frequency
Radial velocity distribution
+----------------------------------------+
[-0.01 , -0.008) |████████████████████████████████████ 56|
[-0.008, -0.006) |███████████████▌ 24 |
[-0.006, -0.004) |█████████▋ 15 |
[-0.004, -0.002) |█████████████▌ 21 |
[-0.002, 0.0 ) |█████████████▌ 21 |
[ 0.0 , 0.002) |██████████████▊ 23 |
[ 0.002, 0.004) |███████████████████▉ 31 |
[ 0.004, 0.006) |█████████████████▍ 27 |
[ 0.006, 0.008) |███████████████████▍ 30 |
[ 0.008, 0.01 ) |█████████████████████████████████▌ 52 |
+----------------------------------------+
Frequency
[ Info: Generating the requested configurations...
Generally it will be desirable to generate a distribution once and re-use it for multiple dynamics simulations. The simplest way to do this is to save the distribution using JLD2.jl. Refer to Saving and loading to learn more.
In order to produce an unweighted distribution, the lateral and angular orientation are randomly selected within the unit cell. As an example of the spacial and orientation distribution generated with this module, a subset of data (300 configurations) is shown below. To run our production simulations, however, a set of 80,000 initial velocities and positions were used.
Data analysis and truncation function
Since we are interested in the dynamics only when the molecule is close to the surface, we can use a callback to terminate the simulation early to save us some time. This requires defining a function that returns true
when we want the simulation to terminate. This means we can set our time span relatively long since we expect most simulations to terminate before reaching the time limit.
using Statistics: mean
using LinearAlgebra: norm
h2distance(p) = norm(p[:,1] .- p[:,2])
"Terminates simulation if returns `true`."
function termination_condition(u, t, integrator)::Bool
R = get_positions(u)
zcom = au_to_ang(mean(R[3,:])) # Convert vertical centre of mass to angstrom
if zcom > 8.1 # Scattering event
return true
elseif au_to_ang(h2distance(R)) > 2.5 # Reactive event
return true
else
return false
end
end
terminate = DynamicsUtils.TerminatingCallback(termination_condition)
tspan = (0.0, 420.0u"fs")
In this example, we consider the outcome a reactive event if the H-H bond length is larger than 2.5 Å in any point of during the trajectory and a scattering event if the molecule rebounds to a vertical distance from the metal surface greater than 8.1 Å.
MDEF with the LDFA
Now that we have set up the initial distribution and some of our simulation parameters, we can choose which form of friction we would like use. First, let's use the LDFA implementation provided by the CubeLDFAModel. This takes a .cube
file containing the electron density and will provide the friction during the dynamics. Here we have given the new model our model from above, which will provide the forces.
using CubeLDFAModel
model = LDFAModel(model, "../assets/friction/test.cube", atoms, friction_atoms=[1,2], cell)
LDFAModel{Float64, H2AgModel{Float64}, Vector{Any}}(H2AgModel{Float64}([1, 2], [0.0 -1.8709239713944754; 1.8709239713944754 0.0; 8.0 8.0], [0.0 0.0; 0.0 0.0; 0.0 0.0], [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0], [5.386179958506469;;]), Any[[0.311, 0.208, 0.127, 0.06, 0.0, 1.5, 2.5, 3.5, 5.0, 10.0], [0.311, 0.208, 0.127, 0.06, 0.0, 1.5, 2.5, 3.5, 5.0, 10.0]], CubeLDFAModel.Cube{Float64}([0.027794, 0.04814, 0.351539], (100, 100, 100), PeriodicCell{Float64}([11.1175 -5.5588 0.0; 0.0 9.628 0.0; 0.0 0.0 70.3079], [0.08994827973915 0.051932332510800476 0.0; 0.0 0.1038637307852098 0.0; 0.0 0.0 0.014223152732480987], Bool[1, 1, 1], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], Bool[0, 0, 0]), [226.88483 177.90594 … 139.98084 209.19731; 177.90506 164.14418 … 82.743512 139.98084; … ; 139.98052 82.742731 … 164.14422 177.90599; 209.19663 139.98052 … 177.90511 226.88489;;; 8.049642 7.8383691 … 7.6327501 7.9785833; 7.8381475 7.7690614 … 7.1749416 7.6327535; … ; 7.6323286 7.1732512 … 7.769056 7.8383659; 7.9785068 7.632331 … 7.8381433 8.0496409;;; 0.85312313 0.84014091 … 0.82743106 0.84876713; 0.84013169 0.83586651 … 0.79878911 0.82742884; … ; 0.82741213 0.7987105 … 0.83587289 0.84014515; 0.84876367 0.82740994 … 0.84013594 0.85312519;;; … ;;; 0.8837023 0.87094919 … 0.85846399 0.87942271; 0.87092654 0.86674127 … 0.83036493 0.85846116; … ; 0.85842135 0.83016995 … 0.8667489 0.87095411; 0.87941609 0.85841891 … 0.87093184 0.88370481;;; 8.0533957 7.8419094 … 7.6361041 7.9822691; 7.8421028 7.7728025 … 7.1770574 7.6360964; … ; 7.6364753 7.1785203 … 7.7728233 7.8419227; 7.9823381 7.6364691 … 7.8421176 8.0534028;;; 226.90547 177.91402 … 139.98258 209.21293; 177.915 164.15031 … 82.74489 139.98258; … ; 139.98296 82.745671 … 164.15034 177.91404; 209.21368 139.98296 … 177.91502 226.9055]), [0.0, 0.0], [0.0, 0.0], [1, 2], PeriodicCell{Float64}([11.1175 -5.5588 0.0; 0.0 9.628 0.0; 0.0 0.0 70.3079], [0.08994827973915 0.051932332510800476 0.0; 0.0 0.1038637307852098 0.0; 0.0 0.0 0.014223152732480987], Bool[1, 1, 1], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], Bool[0, 0, 0]))
Now we can pass all the variables defined so far to the Simulation
and run multiple trajectories using run_dynamics
.
sim = Simulation{MDEF}(atoms, model, cell=cell, temperature=300u"K")
ensemble = run_dynamics(sim, tspan, distribution;selection=1:20,
dt=0.1u"fs", output=OutputPosition, trajectories=20, callback=terminate)
MDEF with neural network friction
Above, we used the LDFA interpretation of MDEF to perform the simulation. However, the H2AgModel
actually provides it's own friction tensor trained on ab initio data. This can be used by simply using the model directly, without wrapping it with the LDFAModel
.
model = H2AgModel()
sim = Simulation{MDEF}(atoms, model, cell=cell, temperature=300u"K")
ensemble = run_dynamics(sim, tspan, distribution;selection=1:20,
dt=0.1u"fs", output=OutputPosition, trajectories=20, callback=terminate)
Visualisation
To show the effect of the truncation procedure, we have run 20 trajectories with and without the truncation function starting with an initial translation energy at 1.0 eV. For both figures, the total and kinetic energies are shown in the top panels along with the H-H distance and centre of mass z coordinate for each individual trajectory.