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.

Atomic units

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.015768051147460938
     1     7.932366e-02     5.704135e+01
 * time: 0.5014750957489014
     2     3.667518e-02     5.740255e+01
 * time: 0.5015890598297119
     3     3.486622e-03     5.727708e+01
 * time: 0.5016601085662842
[ 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:00
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) |████████████████████████▊ 56            | 
   [1.2, 1.4) |███████████████████▎ 43                 | 
   [1.4, 1.6) |██████████▋ 24                          | 
   [1.6, 1.8) |██████████████████▋ 42                  | 
   [1.8, 2.0) |████████████████████████  54            | 
   [2.0, 2.2) |████████████████████████████████████  81| 
              +----------------------------------------+
                               Frequency
                           Radial velocity distribution
                    +----------------------------------------+
   [-0.01 , -0.008) |████████████████████████████████████  56| 
   [-0.008, -0.006) |██████████████████  28                  | 
   [-0.006, -0.004) |████████████████████▌ 32                | 
   [-0.004, -0.002) |█████████████████████▊ 34               | 
   [-0.002,  0.0  ) |█████▎ 8                                | 
   [ 0.0  ,  0.002) |█████████▋ 15                           | 
   [ 0.002,  0.004) |██████████████████▋ 29                  | 
   [ 0.004,  0.006) |██████████████▎ 22                      | 
   [ 0.006,  0.008) |█████████████▌ 21                       | 
   [ 0.008,  0.01 ) |███████████████████████████████████▍ 55 | 
                    +----------------------------------------+
                                     Frequency
[ Info: Generating the requested configurations...
Saving the distribution

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.

initial conditions

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.

truncation