<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Surface-Science on Hunter Heidenreich | Senior AI Research Scientist</title><link>https://hunterheidenreich.com/tags/surface-science/</link><description>Recent content in Surface-Science on Hunter Heidenreich | Senior AI Research Scientist</description><image><title>Hunter Heidenreich | Senior AI Research Scientist</title><url>https://hunterheidenreich.com/img/avatar.webp</url><link>https://hunterheidenreich.com/img/avatar.webp</link></image><generator>Hugo -- 0.163.3</generator><language>en-US</language><copyright>2026 Hunter Heidenreich</copyright><lastBuildDate>Sat, 11 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://hunterheidenreich.com/tags/surface-science/index.xml" rel="self" type="application/rss+xml"/><item><title>Oscillatory CO Oxidation on Pt(110): Temporal Modeling</title><link>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/surface-science/oscillatory-co-oxidation-pt110-1992/</link><pubDate>Sun, 14 Dec 2025 00:00:00 +0000</pubDate><guid>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/surface-science/oscillatory-co-oxidation-pt110-1992/</guid><description>A kinetic model using coupled ODEs to explain temporal self-organization and mixed-mode oscillations in catalytic CO oxidation on Pt(110).</description><content:encoded><![CDATA[<p><strong>Related Work</strong>: This builds on <a href="/notes/chemistry/molecular-simulation/surface-science/kinetic-oscillations-pt100-1985/">Kinetic Oscillations on Pt(100)</a>, which established that surface phase transitions drive oscillatory catalysis. The Pt(110) system exhibits richer dynamics including mixed-mode oscillations and chaos.</p>
<h2 id="method-presentation-modeling-temporal-self-organization">Method Presentation: Modeling Temporal Self-Organization</h2>
<p>This is primarily a <strong>Method</strong> paper, supported by <strong>Theory</strong>.</p>
<ul>
<li><strong>Method</strong>: The authors construct a specific computational architecture, a set of coupled Ordinary Differential Equations (ODEs), to simulate the catalytic oxidation of CO. They systematically &ldquo;ablate&rdquo; the model, starting with 2 variables (bistability only), adding a 3rd (simple oscillations), and finally a 4th (mixed-mode oscillations) to demonstrate the necessity of each physical component.</li>
<li><strong>Theory</strong>: The model is analyzed using formal bifurcation theory (continuation methods) to map the topology of the phase space (Hopf bifurcations, saddle-node loops, etc.).</li>
</ul>
<h2 id="motivation-bridging-microscopic-structure-and-macroscopic-dynamics">Motivation: Bridging Microscopic Structure and Macroscopic Dynamics</h2>
<p>The Pt(110) surface exhibits complex temporal behavior during CO oxidation, including bistability, sustained oscillations, mixed-mode oscillations (MMOs), and chaos. Previous simple models could explain bistability but failed to capture the oscillatory dynamics observed experimentally. There was a need for a &ldquo;realistic&rdquo; model that used physically derived parameters to quantitatively link microscopic surface changes (structural phase transitions) to macroscopic reaction rates.</p>
<h2 id="novelty-coupling-reaction-kinetics-and-surface-phase-transitions">Novelty: Coupling Reaction Kinetics and Surface Phase Transitions</h2>
<p>The core novelty is the <strong>&ldquo;Reconstruction Model&rdquo;</strong>, which couples the chemical kinetics (Langmuir-Hinshelwood mechanism) with the physical structural phase transition of the platinum surface ($1\times1 \leftrightarrow 1\times2$).</p>
<ul>
<li>They treat the surface structure as a dynamic variable ($w$).</li>
<li>They introduce a fourth variable ($z$) representing &ldquo;faceting&rdquo; to explain complex mixed-mode oscillations, identifying the interplay between two negative feedback loops on different time scales as the driver for this behavior.</li>
</ul>
<h2 id="methodology-experimental-parameters-and-bifurcation-topology">Methodology: Experimental Parameters and Bifurcation Topology</h2>
<p>The validation approach involved a tight loop between numerical simulation and physical experiment:</p>
<ol>
<li><strong>Parameter Determination</strong>: They experimentally measured individual rate constants (sticking coefficients, desorption energies) using Surface Science techniques (LEED, TDS) to ground the model in reality.</li>
<li><strong>Bifurcation Analysis</strong>: They used numerical continuation methods (AUTO package) to compute &ldquo;skeleton bifurcation diagrams,&rdquo; mapping the boundaries between stable states, simple oscillations, and chaos in parameter space ($p_{CO}$ vs $p_{O_2}$).</li>
<li><strong>Physical Validation</strong>: These diagrams were compared directly against experimental work function ($\Delta \phi$) measurements and LEED intensity profiles to verify the existence regions of different dynamic regimes.</li>
</ol>
<h2 id="results-and-limitations-mixed-mode-oscillations-vs-spatiotemporal-chaos">Results and Limitations: Mixed-Mode Oscillations vs. Spatiotemporal Chaos</h2>
<ul>
<li><strong>Successes</strong>: The 3-variable model successfully reproduces bistability and simple oscillations (limit cycles). The extended 4-variable model qualitatively captures mixed-mode oscillations (MMOs).</li>
<li><strong>Mechanism</strong>: Oscillations arise from the delay between CO adsorption and the resulting surface phase transition (which changes oxygen sticking probabilities).</li>
<li><strong>Limitations</strong>: The 4-variable model only reproduces one type of MMO; certain experimental patterns (e.g., square-wave forms with small oscillations on both high and low work-function levels) were not obtained. The oscillatory region also does not extend to low temperatures as observed experimentally. More fundamentally, the ODE model fails to predict the period-doubling cascade to chaos or hyperchaos observed in experiments. The authors conclude these are likely spatiotemporal phenomena (involving wave propagation and pattern formation) that require Partial Differential Equations (PDEs).</li>
</ul>
<hr>
<h2 id="reproducibility-details">Reproducibility Details</h2>
<p>The paper provides a complete set of equations and parameters required to reproduce the dynamics.</p>
<h3 id="data-parameters">Data (Parameters)</h3>
<p>The model uses kinetic parameters derived from Pt(110) experiments. Key constants for reproduction:</p>
<table>
	<thead>
			<tr>
					<th style="text-align: left">Parameter</th>
					<th style="text-align: left">Value</th>
					<th style="text-align: left">Description</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left">$\kappa_c$</td>
					<td style="text-align: left">$3.135 \times 10^5 , s^{-1} \text{mbar}^{-1}$</td>
					<td style="text-align: left">Rate of CO hitting surface</td>
			</tr>
			<tr>
					<td style="text-align: left">$s_c$</td>
					<td style="text-align: left">$1.0$</td>
					<td style="text-align: left">CO sticking coefficient</td>
			</tr>
			<tr>
					<td style="text-align: left">$q$</td>
					<td style="text-align: left">$3$</td>
					<td style="text-align: left">Mobility parameter of precursor adsorption</td>
			</tr>
			<tr>
					<td style="text-align: left">$u_s$</td>
					<td style="text-align: left">$1.0$</td>
					<td style="text-align: left">Saturation coverage ($CO$)</td>
			</tr>
			<tr>
					<td style="text-align: left">$\kappa_o$</td>
					<td style="text-align: left">$5.858 \times 10^5 , s^{-1} \text{mbar}^{-1}$</td>
					<td style="text-align: left">Rate of $O_2$ hitting surface</td>
			</tr>
			<tr>
					<td style="text-align: left">$s_{o,1\times2}$</td>
					<td style="text-align: left">$0.4$</td>
					<td style="text-align: left">$O_2$ sticking coeff ($1\times2$ phase)</td>
			</tr>
			<tr>
					<td style="text-align: left">$s_{o,1\times1}$</td>
					<td style="text-align: left">$0.6$</td>
					<td style="text-align: left">$O_2$ sticking coeff ($1\times1$ phase)</td>
			</tr>
			<tr>
					<td style="text-align: left">$v_s$</td>
					<td style="text-align: left">$0.8$</td>
					<td style="text-align: left">Saturation coverage ($O$)</td>
			</tr>
			<tr>
					<td style="text-align: left">$k_{r}^{0}$</td>
					<td style="text-align: left">$3 \times 10^6 , s^{-1}$</td>
					<td style="text-align: left">Reaction pre-exponential</td>
			</tr>
			<tr>
					<td style="text-align: left">$E_r$</td>
					<td style="text-align: left">$10 , \text{kcal/mol}$</td>
					<td style="text-align: left">Reaction activation energy</td>
			</tr>
			<tr>
					<td style="text-align: left">$k_{d}^{0}$</td>
					<td style="text-align: left">$2 \times 10^{16} , s^{-1}$</td>
					<td style="text-align: left">Desorption pre-exponential</td>
			</tr>
			<tr>
					<td style="text-align: left">$E_d$</td>
					<td style="text-align: left">$38 , \text{kcal/mol}$</td>
					<td style="text-align: left">Desorption activation energy</td>
			</tr>
			<tr>
					<td style="text-align: left">$k_{p}^{0}$</td>
					<td style="text-align: left">$10^2 , s^{-1}$</td>
					<td style="text-align: left">Phase transition pre-exponential</td>
			</tr>
			<tr>
					<td style="text-align: left">$E_p$</td>
					<td style="text-align: left">$7 , \text{kcal/mol}$</td>
					<td style="text-align: left">Phase transition activation energy</td>
			</tr>
			<tr>
					<td style="text-align: left">$k_f$</td>
					<td style="text-align: left">$0.03 , s^{-1}$</td>
					<td style="text-align: left">Rate of facet formation</td>
			</tr>
			<tr>
					<td style="text-align: left">$k_{t}^{0}$</td>
					<td style="text-align: left">$2.65 \times 10^5 , s^{-1}$</td>
					<td style="text-align: left">Thermal annealing pre-exponential</td>
			</tr>
			<tr>
					<td style="text-align: left">$E_t$</td>
					<td style="text-align: left">$20 , \text{kcal/mol}$</td>
					<td style="text-align: left">Thermal annealing activation energy</td>
			</tr>
			<tr>
					<td style="text-align: left">$s_{o,3}$</td>
					<td style="text-align: left">$0.2$</td>
					<td style="text-align: left">Increase of $s_o$ for max faceting ($z=1$)</td>
			</tr>
	</tbody>
</table>
<h3 id="algorithms-the-equations">Algorithms (The Equations)</h3>
<p>The system is defined by a set of coupled Ordinary Differential Equations (ODEs).</p>
<p><strong>1. Basic 3-Variable Model (Reconstruction Model)</strong></p>
<p>The core system is structured as a single mathematical block of coupled variables representing CO coverage ($u$), Oxygen coverage ($v$), and the surface phase fraction ($w$):</p>
<p>$$
\begin{aligned}
\dot{u} &amp;= p_{CO} \kappa_c s_c \left(1 - \left(\frac{u}{u_s}\right)^q \right) - k_d u - k_r u v \\
\dot{v} &amp;= p_{O_2} \kappa_o s_o \left(1 - \frac{u}{u_s} - \frac{v}{v_s}\right)^2 - k_r u v \\
\dot{w} &amp;= k_p (w_{eq}(u) - w)
\end{aligned}
$$</p>
<p><em>Note:</em> The oxygen sticking coefficient $s_o$ dynamically depends on the structure $w$, calculated as $s_o = w \cdot s_{o,1\times1} + (1-w) \cdot s_{o,1\times2}$. The equilibrium function $w_{eq}(u)$ is a polynomial step function that activates the phase transition:</p>
<p>$$
w_{eq}(u) =
\begin{cases}
0 &amp; u \le 0.2 \
\sum_{i=0}^3 r_i u^i &amp; 0.2 &lt; u &lt; 0.5 \
1 &amp; u \ge 0.5
\end{cases}
$$</p>
<p>The polynomial coefficients from Table II are: $r_3 = -1/0.0135$, $r_2 = -1.05 r_3$, $r_1 = 0.3 r_3$, $r_0 = -0.026 r_3$.</p>
<p><strong>2. Extended 4-Variable Model (Faceting)</strong></p>
<p>To reproduce Mixed-Mode Oscillations, the model adds a faceting variable $z$:</p>
<p>$$
\begin{aligned}
s_o &amp;= w \cdot s_{o,1\times1} + (1-w) \cdot s_{o,1\times2} + s_{o,3} z \\
\dot{z} &amp;= k_f \cdot u \cdot v \cdot w \cdot (1-z) - k_t z (1-u)
\end{aligned}
$$</p>
<h3 id="models">Models</h3>
<p>The authors define two distinct configurations:</p>
<ol>
<li><strong>3-Variable (u, v, w)</strong>: Sufficient for bistability and simple oscillations (limit cycles).</li>
<li><strong>4-Variable (u, v, w, z)</strong>: Required for mixed-mode oscillations (small oscillations superimposed on large relaxation spikes).</li>
</ol>
<h3 id="evaluation">Evaluation</h3>
<ul>
<li><strong>Bifurcation Analysis</strong>: The system should be evaluated by computing steady states and detecting Hopf bifurcations as a function of $p_{CO}$ and $p_{O_2}$.</li>
<li><strong>Time Integration</strong>: Stiff ODE solvers (e.g., <code>scipy.integrate.odeint</code> or <code>solve_ivp</code> with &lsquo;Radau&rsquo; or &lsquo;BDF&rsquo; method) are recommended due to the differing time scales of reaction ($u,v$) and reconstruction ($w,z$).</li>
</ul>
<h3 id="hardware">Hardware</h3>
<ul>
<li><strong>Original</strong>: VAX 6800 and VAX station 3100.</li>
<li><strong>Modern Reqs</strong>: Minimal. Can be solved in milliseconds on any modern CPU using standard scientific libraries (Python/Matlab).</li>
</ul>
<h3 id="reference-implementation">Reference Implementation</h3>
<p>The following Python script implements the 3-variable Reconstruction Model described in the paper, replicating the stable oscillations shown in Figure 7 (T=540K):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> numpy <span style="color:#66d9ef">as</span> np
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> scipy.integrate <span style="color:#f92672">import</span> odeint
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> matplotlib.pyplot <span style="color:#66d9ef">as</span> plt
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># --- 1. CONSTANTS &amp; PARAMETERS ---</span>
</span></span><span style="display:flex;"><span>R <span style="color:#f92672">=</span> <span style="color:#ae81ff">0.001987</span>
</span></span><span style="display:flex;"><span>k_c, s_c, q <span style="color:#f92672">=</span> <span style="color:#ae81ff">3.135e5</span>, <span style="color:#ae81ff">1.0</span>, <span style="color:#ae81ff">3.0</span>
</span></span><span style="display:flex;"><span>k_o, s_o1, s_o2 <span style="color:#f92672">=</span> <span style="color:#ae81ff">5.858e5</span>, <span style="color:#ae81ff">0.6</span>, <span style="color:#ae81ff">0.4</span>
</span></span><span style="display:flex;"><span>k_d0, E_d <span style="color:#f92672">=</span> <span style="color:#ae81ff">2.0e16</span>, <span style="color:#ae81ff">38.0</span>
</span></span><span style="display:flex;"><span>k_r0, E_r <span style="color:#f92672">=</span> <span style="color:#ae81ff">3.0e6</span>, <span style="color:#ae81ff">10.0</span>
</span></span><span style="display:flex;"><span>k_p0, E_p <span style="color:#f92672">=</span> <span style="color:#ae81ff">100.0</span>, <span style="color:#ae81ff">7.0</span>
</span></span><span style="display:flex;"><span>u_s, v_s <span style="color:#f92672">=</span> <span style="color:#ae81ff">1.0</span>, <span style="color:#ae81ff">0.8</span>
</span></span><span style="display:flex;"><span>T, p_CO, p_O2 <span style="color:#f92672">=</span> <span style="color:#ae81ff">540.0</span>, <span style="color:#ae81ff">3.0e-5</span>, <span style="color:#ae81ff">6.67e-5</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Calculate Arrhenius rates</span>
</span></span><span style="display:flex;"><span>k_d <span style="color:#f92672">=</span> k_d0 <span style="color:#f92672">*</span> np<span style="color:#f92672">.</span>exp(<span style="color:#f92672">-</span>E_d <span style="color:#f92672">/</span> (R <span style="color:#f92672">*</span> T))
</span></span><span style="display:flex;"><span>k_r <span style="color:#f92672">=</span> k_r0 <span style="color:#f92672">*</span> np<span style="color:#f92672">.</span>exp(<span style="color:#f92672">-</span>E_r <span style="color:#f92672">/</span> (R <span style="color:#f92672">*</span> T))
</span></span><span style="display:flex;"><span>k_p <span style="color:#f92672">=</span> k_p0 <span style="color:#f92672">*</span> np<span style="color:#f92672">.</span>exp(<span style="color:#f92672">-</span>E_p <span style="color:#f92672">/</span> (R <span style="color:#f92672">*</span> T))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">def</span> <span style="color:#a6e22e">model</span>(y, t):
</span></span><span style="display:flex;"><span>    u, v, w <span style="color:#f92672">=</span> y
</span></span><span style="display:flex;"><span>    s_o <span style="color:#f92672">=</span> w <span style="color:#f92672">*</span> s_o1 <span style="color:#f92672">+</span> (<span style="color:#ae81ff">1</span> <span style="color:#f92672">-</span> w) <span style="color:#f92672">*</span> s_o2
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Smooth step function for Equilibrium w</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> u <span style="color:#f92672">&lt;=</span> <span style="color:#ae81ff">0.2</span>: weq <span style="color:#f92672">=</span> <span style="color:#ae81ff">0.0</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">elif</span> u <span style="color:#f92672">&gt;=</span> <span style="color:#ae81ff">0.5</span>: weq <span style="color:#f92672">=</span> <span style="color:#ae81ff">1.0</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">else</span>:
</span></span><span style="display:flex;"><span>        x <span style="color:#f92672">=</span> (u <span style="color:#f92672">-</span> <span style="color:#ae81ff">0.2</span>) <span style="color:#f92672">/</span> <span style="color:#ae81ff">0.3</span>
</span></span><span style="display:flex;"><span>        weq <span style="color:#f92672">=</span> <span style="color:#ae81ff">3</span><span style="color:#f92672">*</span>x<span style="color:#f92672">**</span><span style="color:#ae81ff">2</span> <span style="color:#f92672">-</span> <span style="color:#ae81ff">2</span><span style="color:#f92672">*</span>x<span style="color:#f92672">**</span><span style="color:#ae81ff">3</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    r_reac <span style="color:#f92672">=</span> k_r <span style="color:#f92672">*</span> u <span style="color:#f92672">*</span> v
</span></span><span style="display:flex;"><span>    du <span style="color:#f92672">=</span> p_CO <span style="color:#f92672">*</span> k_c <span style="color:#f92672">*</span> s_c <span style="color:#f92672">*</span> (<span style="color:#ae81ff">1</span> <span style="color:#f92672">-</span> (u<span style="color:#f92672">/</span>u_s)<span style="color:#f92672">**</span>q) <span style="color:#f92672">-</span> k_d <span style="color:#f92672">*</span> u <span style="color:#f92672">-</span> r_reac
</span></span><span style="display:flex;"><span>    dv <span style="color:#f92672">=</span> p_O2 <span style="color:#f92672">*</span> k_o <span style="color:#f92672">*</span> s_o <span style="color:#f92672">*</span> (<span style="color:#ae81ff">1</span> <span style="color:#f92672">-</span> u<span style="color:#f92672">/</span>u_s <span style="color:#f92672">-</span> v<span style="color:#f92672">/</span>v_s)<span style="color:#f92672">**</span><span style="color:#ae81ff">2</span> <span style="color:#f92672">-</span> r_reac
</span></span><span style="display:flex;"><span>    dw <span style="color:#f92672">=</span> k_p <span style="color:#f92672">*</span> (weq <span style="color:#f92672">-</span> w)
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> [du, dv, dw]
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># --- 2. SIMULATION STRATEGY ---</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Simulate for 300 seconds to kill transients</span>
</span></span><span style="display:flex;"><span>t_full <span style="color:#f92672">=</span> np<span style="color:#f92672">.</span>linspace(<span style="color:#ae81ff">0</span>, <span style="color:#ae81ff">300</span>, <span style="color:#ae81ff">3000</span>)
</span></span><span style="display:flex;"><span>y0 <span style="color:#f92672">=</span> [<span style="color:#ae81ff">0.1</span>, <span style="color:#ae81ff">0.1</span>, <span style="color:#ae81ff">0.0</span>]
</span></span><span style="display:flex;"><span>solution <span style="color:#f92672">=</span> odeint(model, y0, t_full)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># --- 3. SLICING FOR FIGURE 7 ---</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Only take the last 60 seconds (stable limit cycle)</span>
</span></span><span style="display:flex;"><span>mask <span style="color:#f92672">=</span> (t_full <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">240</span>) <span style="color:#f92672">&amp;</span> (t_full <span style="color:#f92672">&lt;</span> <span style="color:#ae81ff">300</span>)
</span></span><span style="display:flex;"><span>t_plot <span style="color:#f92672">=</span> t_full[mask]
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Shift time axis to start at 10s (matching Fig 7 style)</span>
</span></span><span style="display:flex;"><span>t_display <span style="color:#f92672">=</span> t_plot <span style="color:#f92672">-</span> t_plot[<span style="color:#ae81ff">0</span>] <span style="color:#f92672">+</span> <span style="color:#ae81ff">10</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>u_plot <span style="color:#f92672">=</span> solution[mask, <span style="color:#ae81ff">0</span>]
</span></span><span style="display:flex;"><span>v_plot <span style="color:#f92672">=</span> solution[mask, <span style="color:#ae81ff">1</span>]
</span></span><span style="display:flex;"><span>w_plot <span style="color:#f92672">=</span> solution[mask, <span style="color:#ae81ff">2</span>]
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># --- 4. VISUALIZATION ---</span>
</span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>figure(figsize<span style="color:#f92672">=</span>(<span style="color:#ae81ff">8</span>, <span style="color:#ae81ff">5</span>))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Plot CO (u) and Structure (w) on top (Primary Axis)</span>
</span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>plot(t_display, w_plot, <span style="color:#e6db74">&#39;g--&#39;</span>, label<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;1x1 Fraction (w)&#39;</span>, linewidth<span style="color:#f92672">=</span><span style="color:#ae81ff">1.5</span>)
</span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>plot(t_display, u_plot, <span style="color:#e6db74">&#39;k-&#39;</span>, label<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;CO Coverage (u)&#39;</span>, linewidth<span style="color:#f92672">=</span><span style="color:#ae81ff">2</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Plot Oxygen (v) on bottom</span>
</span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>plot(t_display, v_plot, <span style="color:#e6db74">&#39;r-.&#39;</span>, label<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;Oxygen (v)&#39;</span>, linewidth<span style="color:#f92672">=</span><span style="color:#ae81ff">1.5</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>title(<span style="color:#e6db74">&#39;Replication of Figure 7: Stable Oscillations&#39;</span>)
</span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>xlabel(<span style="color:#e6db74">&#39;Time (s)&#39;</span>)
</span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>ylabel(<span style="color:#e6db74">&#39;Coverage [ML]&#39;</span>)
</span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>legend(loc<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;upper center&#39;</span>, ncol<span style="color:#f92672">=</span><span style="color:#ae81ff">3</span>)
</span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>xlim(<span style="color:#ae81ff">10</span>, <span style="color:#ae81ff">60</span>)
</span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>ylim(<span style="color:#ae81ff">0</span>, <span style="color:#ae81ff">1.0</span>)
</span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>grid(<span style="color:#66d9ef">True</span>, alpha<span style="color:#f92672">=</span><span style="color:#ae81ff">0.3</span>)
</span></span><span style="display:flex;"><span>plt<span style="color:#f92672">.</span>show()
</span></span></code></pre></div>














<figure class="post-figure center ">
    <img src="/img/notes/oscillatory-co-pt110-replication.webp"
         alt="Replication of Figure 7 showing stable oscillations in CO oxidation on Pt(110)"
         title="Replication of Figure 7 showing stable oscillations in CO oxidation on Pt(110)"
         
         
         loading="lazy"
         class="post-image">
    
    <figcaption class="post-caption">Output of the reference implementation showing stable oscillations on Pt(110)</figcaption>
    
</figure>

<p>This plot faithfully replicates the stable limit cycle shown in <strong>Figure 7</strong> of the paper:</p>
<ul>
<li><strong>Timeframe</strong>: Shows a 50-second window (labeled 10-60s) after initial transients have died out.</li>
<li><strong>Period</strong>: Regular oscillations with a period of roughly 7-8 seconds.</li>
<li><strong>Phase Relationship</strong>: The surface phase reconstruction ($w$, green dashed) lags slightly behind the CO coverage ($u$, black solid). This delay is the crucial &ldquo;memory&rdquo; effect that enables the oscillation.</li>
<li><strong>Anticorrelation</strong>: The oxygen coverage ($v$, red dash-dot) spikes exactly when the surface is in the active $1\times1$ phase (high $w$) and CO is low, confirming the &ldquo;Langmuir-Hinshelwood&rdquo; reaction mechanism.</li>
</ul>
<hr>
<h2 id="paper-information">Paper Information</h2>
<p><strong>Citation</strong>: Krischer, K., Eiswirth, M., &amp; Ertl, G. (1992). Oscillatory CO oxidation on Pt(110): Modeling of temporal self-organization. <em>The Journal of Chemical Physics</em>, 96(12), 9161-9172. <a href="https://doi.org/10.1063/1.462226">https://doi.org/10.1063/1.462226</a></p>
<p><strong>Publication</strong>: Journal of Chemical Physics 1992</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bibtex" data-lang="bibtex"><span style="display:flex;"><span><span style="color:#a6e22e">@article</span>{krischerOscillatoryCOOxidation1992,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">title</span> = <span style="color:#e6db74">{Oscillatory {{CO}} Oxidation on {{Pt}}(110): {{Modeling}} of Temporal Self-organization}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">shorttitle</span> = <span style="color:#e6db74">{Oscillatory {{CO}} Oxidation on {{Pt}}(110)}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">author</span> = <span style="color:#e6db74">{Krischer, K. and Eiswirth, M. and Ertl, G.}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">year</span> = <span style="color:#ae81ff">1992</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">month</span> = jun,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">journal</span> = <span style="color:#e6db74">{The Journal of Chemical Physics}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">volume</span> = <span style="color:#e6db74">{96}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">number</span> = <span style="color:#e6db74">{12}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">pages</span> = <span style="color:#e6db74">{9161--9172}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">issn</span> = <span style="color:#e6db74">{0021-9606, 1089-7690}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">doi</span> = <span style="color:#e6db74">{10.1063/1.462226}</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>]]></content:encoded></item><item><title>MD Simulation of Self-Diffusion on Metal Surfaces (1994)</title><link>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/surface-science/self-diffusion-metal-surfaces-1994/</link><pubDate>Sun, 14 Dec 2025 00:00:00 +0000</pubDate><guid>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/surface-science/self-diffusion-metal-surfaces-1994/</guid><description>Molecular dynamics simulation of Iridium surface diffusion confirming atomic exchange mechanisms using EAM and many-body potentials.</description><content:encoded><![CDATA[<h2 id="scientific-typology-computational-discovery">Scientific Typology: Computational Discovery</h2>
<p>This is primarily a <strong>Discovery</strong> ($\Psi_{\text{Discovery}}$) paper, with strong supporting contributions as a <strong>Method</strong> ($\Psi_{\text{Method}}$) evaluation. The primary contribution is the validation and mechanistic visualization of the &ldquo;exchange mechanism&rdquo; for surface diffusion using computational methods (Molecular Dynamics with many-body potentials). This physical phenomenon was previously observed in Field Ion Microscope (FIM) experiments but difficult to characterize dynamically. The paper focuses on determining <em>how</em> atoms move, specifically distinguishing between hopping and exchange mechanisms.</p>
<h2 id="the-field-ion-microscope-fim-observation-gap">The Field Ion Microscope (FIM) Observation Gap</h2>
<p>Surface diffusion is critical for understanding phenomena like crystal growth, epitaxy, and catalysis. Experimental evidence from FIM on fcc(001) surfaces (specifically Pt and Ir) suggested an &ldquo;exchange mechanism&rdquo; where an adatom replaces a substrate atom, challenging the conventional wisdom that adatoms migrate by hopping over potential barriers (bridge sites) between binding sites. The authors sought to:</p>
<ol>
<li>Investigate whether this exchange mechanism could be reproduced dynamically in simulation.</li>
<li>Determine which interatomic potentials (EAM, Sutton-Chen, R-G-L) accurately describe these surface behaviors compared to bulk properties.</li>
</ol>
<h2 id="dynamic-visualization-of-atomic-exchange">Dynamic Visualization of Atomic Exchange</h2>
<p>The study provides a direct dynamic visualization of the &ldquo;concerted motion&rdquo; involved in exchange diffusion events, which happens on timescales too fast for experimental imaging. By comparing three different many-body potentials, the authors demonstrate that the choice of potential is critical for capturing surface phenomena; specifically, identifying that &ldquo;bulk&rdquo; derived potentials (like Sutton-Chen) may fail to capture specific surface exchange events that EAM and R-G-L potentials successfully model.</p>
<h2 id="simulation-protocol--evaluated-potentials">Simulation Protocol &amp; Evaluated Potentials</h2>
<p>The authors performed Molecular Dynamics (MD) simulations on Iridium (Ir) surfaces:</p>
<ul>
<li><strong>Surfaces</strong>: Channeled (110), densely packed (111), and loosely packed (001).</li>
<li><strong>Potentials</strong>: Three many-body models were tested: Embedded Atom Method (EAM), Sutton-Chen (S-C), and Rosato-Guillope-Legrand (R-G-L).</li>
<li><strong>Conditions</strong>: Simulations were primarily run at $T=800$ K to ensure sufficient sampling of diffusion events.</li>
<li><strong>Cross-Validation</strong>: The study extended the analysis to Cu, Rh, and Pt systems to verify the universality of the exchange mechanism against experimental data.</li>
</ul>
<h2 id="confirmation-of-concerted-motion-mechanisms">Confirmation of Concerted Motion Mechanisms</h2>
<ul>
<li><strong>Mechanism Confirmation</strong>: The study confirmed that diffusion on Ir(001) proceeds via an atomic exchange mechanism (concerted motion). The activation energy for exchange ($0.77$ eV) was found to be significantly lower than for hopping over bridge sites ($1.57$ eV).</li>
<li><strong>Surface Structure Dependence</strong>:
<ul>
<li><strong>Ir(111)</strong>: Diffusion is rapid (activation energy $V_a = 0.17$ eV from R-G-L Arrhenius plot) and occurs exclusively via hopping; no exchange events were observed due to the close-packed nature of the surface.</li>
<li><strong>Ir(110)</strong>: Diffusion is anisotropic; atoms hop <em>along</em> channels but use the exchange mechanism to move <em>across</em> channels.</li>
</ul>
</li>
<li><strong>Potential Validity</strong>: The R-G-L and EAM potentials successfully reproduced experimental exchange behaviors, whereas the Sutton-Chen potential failed to predict exchange on Ir(001). The authors attribute the S-C failure primarily to the use of &ldquo;bulk&rdquo; potential parameters to describe interactions at the surface.</li>
<li><strong>Cross-System Comparison</strong>: The study extended the analysis to Cu, Rh, and Pt systems. Both S-C and R-G-L potentials correctly predicted the absence of exchange on all three Rh surfaces and on (111) surfaces of Cu and Pt. Exchange events were correctly predicted on Cu(001), Cu(110), Pt(001), and Pt(110) by both potentials. The sole discrepancy was S-C failing to predict exchange on Ir(001), where R-G-L and EAM succeeded in agreement with experiment.</li>
</ul>
<h2 id="reproducibility-details">Reproducibility Details</h2>
<h3 id="algorithms">Algorithms</h3>
<ul>
<li><strong>Integration</strong>: &ldquo;Velocity&rdquo; form of the Verlet algorithm.</li>
<li><strong>Time Step</strong>: $\Delta t = 0.01$ ps ($10^{-14}$ s).</li>
<li><strong>Simulation Protocol</strong>:
<ol>
<li><strong>Quenching</strong>: System relaxed to 0 K by zeroing velocities when $v \cdot F &lt; 0$.</li>
<li><strong>Equilibration</strong>: 5 ps constant-temperature run (renormalizing velocities every step).</li>
<li><strong>Production</strong>: 15 ps constant-energy (microcanonical) run where trajectories are collected.</li>
</ol>
</li>
</ul>
<h3 id="models">Models</h3>
<p>The study relies on three specific many-body potential formulations:</p>
<ol>
<li><strong>Embedded Atom Method (EAM)</strong>:
<ul>
<li>Total energy:
$$U_{tot} = \sum_i F_i(\rho_i) + \frac{1}{2} \sum_{j \neq i} \phi_{ij}(r_{ij})$$</li>
</ul>
</li>
<li><strong>Sutton-Chen (S-C)</strong>:
<ul>
<li>Uses a square root density dependence and power-law pair repulsion $(a/r)^{n}$:
$$F(\rho) \propto \rho^{1/2}$$</li>
</ul>
</li>
<li><strong>Rosato-Guillope-Legrand (R-G-L)</strong>:
<ul>
<li>Born-Mayer type repulsion:
$$\phi_{ij}(r) = A \exp[-p(r/r_0 - 1)]$$</li>
<li>Attractive band energy:
$$F_i(\rho) = -\left(\sum \xi^2 \exp[-2q(r/r_0 - 1)]\right)^{1/2}$$</li>
</ul>
</li>
</ol>
<h3 id="data">Data</h3>
<ul>
<li><strong>System Size</strong>: 648 classical atoms.</li>
<li><strong>Geometry</strong>:
<ul>
<li>Cubic box with fixed volume.</li>
<li>Periodic boundary conditions in $x$ and $y$ (parallel to surface), free motion in $z$.</li>
<li>Substrate depth: 8, 12, or 9 atomic layers depending on orientation [(001), (110), (111)].</li>
</ul>
</li>
<li><strong>Cutoff Radius</strong>: 14 bohr ($\sim 7.4$ Å).</li>
<li><strong>Initial Conditions</strong>: Velocities initialized from a Maxwellian distribution.</li>
</ul>
<h3 id="evaluation">Evaluation</h3>
<ul>
<li><strong>Diffusion Constant ($D$)</strong>: Calculated using the Einstein relation via Mean Square Displacement (MSD):
$$D = \lim_{t \to \infty} \frac{\langle \Delta r^2(t) \rangle}{2td}$$
where $d=2$ for surface diffusion.</li>
<li><strong>Activation Energy ($V_a$)</strong>: Extracted from the slope of Arrhenius plots ($\ln D$ vs $1/T$).</li>
<li><strong>Attempt Frequency ($\nu$)</strong>: Estimated via harmonic approximation: $\nu = \frac{1}{2\pi}\sqrt{c/M}$.</li>
</ul>
<h2 id="paper-information">Paper Information</h2>
<p><strong>Citation</strong>: Shiang, K.-D., Wei, C. M., &amp; Tsong, T. T. (1994). A molecular dynamics study of self-diffusion on metal surfaces. <em>Surface Science</em>, 301(1-3), 136-150. <a href="https://doi.org/10.1016/0039-6028(94)91295-5">https://doi.org/10.1016/0039-6028(94)91295-5</a></p>
<p><strong>Publication</strong>: Surface Science 1994</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bibtex" data-lang="bibtex"><span style="display:flex;"><span><span style="color:#a6e22e">@article</span>{shiang1994molecular,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">title</span>=<span style="color:#e6db74">{A molecular dynamics study of self-diffusion on metal surfaces}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">author</span>=<span style="color:#e6db74">{Shiang, Keh-Dong and Wei, C.M. and Tsong, Tien T.}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">journal</span>=<span style="color:#e6db74">{Surface Science}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">volume</span>=<span style="color:#e6db74">{301}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">number</span>=<span style="color:#e6db74">{1-3}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">pages</span>=<span style="color:#e6db74">{136--150}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">year</span>=<span style="color:#e6db74">{1994}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">publisher</span>=<span style="color:#e6db74">{Elsevier}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">doi</span>=<span style="color:#e6db74">{10.1016/0039-6028(94)91295-5}</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>]]></content:encoded></item><item><title>Kinetic Oscillations in CO Oxidation on Pt(100): Theory</title><link>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/surface-science/kinetic-oscillations-pt100-1985/</link><pubDate>Sun, 14 Dec 2025 00:00:00 +0000</pubDate><guid>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/surface-science/kinetic-oscillations-pt100-1985/</guid><description>Theoretical model using coupled differential equations to explain CO oxidation oscillations via surface phase transitions on platinum.</description><content:encoded><![CDATA[














<figure class="post-figure center ">
    <img src="/img/notes/co-pt100-hollow.webp"
         alt="Carbon monoxide molecule adsorbed on Pt(100) FCC surface in hollow site configuration"
         title="Carbon monoxide molecule adsorbed on Pt(100) FCC surface in hollow site configuration"
         
         
         loading="lazy"
         class="post-image">
    
    <figcaption class="post-caption">CO molecule adsorbed in hollow site on Pt(100) surface. The surface structure and CO binding configurations are central to understanding the oscillatory behavior.</figcaption>
    
</figure>

<h2 id="contribution-theoretical-modeling-of-kinetic-oscillations">Contribution: Theoretical Modeling of Kinetic Oscillations</h2>
<p><strong>Theory ($\Psi_{\text{Theory}}$)</strong>.</p>
<p>This paper derives a microscopic mechanism based on experimental kinetic data to explain observed kinetic oscillations. It relies heavily on <strong>formal analysis</strong>, including a <strong>Linear Stability Analysis</strong> of a simplified model to derive eigenvalues and characterize stationary points (stable nodes, saddle points, and foci) whose appearance and disappearance drive relaxation oscillations. The primary contribution is the mathematical formulation of the surface phase transition.</p>
<h2 id="motivation-explaining-periodicity-in-surface-reactions">Motivation: Explaining Periodicity in Surface Reactions</h2>
<p>Experimental studies had shown that the catalytic oxidation of Carbon Monoxide (CO) on Platinum (100) surfaces exhibits temporal oscillations and spatial wave patterns at low pressures ($10^{-4}$ Torr). While the individual elementary steps (adsorption, desorption, reaction) were known, the mechanism driving the periodicity was not understood. Prior models relied on indirect evidence; this work aimed to ground the theory in new LEED (Low-Energy Electron Diffraction) observations showing that the surface structure itself transforms periodically between a reconstructed <code>hex</code> phase and a bulk-like <code>1x1</code> phase.</p>
<h2 id="novelty-the-surface-phase-transition-model">Novelty: The Surface Phase Transition Model</h2>
<p>The core novelty is the <strong>Surface Phase Transition Model</strong>. The authors propose that the oscillations are driven by the reversible phase transition of the Pt surface atoms, which is triggered by critical adsorbate coverages:</p>
<ol>
<li><strong>State Dependent Kinetics</strong>: The <code>hex</code> and <code>1x1</code> phases have vastly different sticking coefficients for Oxygen (negligible on <code>hex</code>, high on <code>1x1</code>).</li>
<li><strong>Critical Coverage Triggers</strong>: The transition depends on whether local CO coverage exceeds a critical threshold ($U_{a,grow}$) or falls below another ($U_{a,crit}$).</li>
<li><strong>Trapping-Desorption</strong>: The model introduces a &ldquo;trapping&rdquo; term where CO diffuses from the weakly-binding <code>hex</code> phase to the strongly-binding <code>1x1</code> patches, creating a feedback loop.</li>
</ol>
<h2 id="methodology-reaction-diffusion-simulations">Methodology: Reaction-Diffusion Simulations</h2>
<p>As a theoretical paper, the &ldquo;experiments&rdquo; were computational simulations and mathematical derivations:</p>
<ul>
<li><strong>Linear Stability Analysis</strong>: They simplified the 4-variable model to a 3-variable system ($u$, $v$, $a$), then treated the phase fraction $a$ as a slowly varying parameter. This allowed them to perform a 2-variable stability analysis on the $u$-$v$ subsystem, identifying the conditions for oscillations through the appearance and disappearance of stationary points as $a$ varies.</li>
<li><strong>Hysteresis Simulation</strong>: They simulated temperature-programmed variations to match experimental CO adsorption hysteresis loops, fitting the critical coverage parameters ($U_{a,grow} \approx 0.5$).</li>
<li><strong>Reaction-Diffusion Simulation</strong>: They numerically integrated the full set of 4 coupled differential equations over a 1D spatial grid (40 compartments) to reproduce temporal oscillations and propagating wave fronts.</li>
</ul>
<h2 id="results-mechanisms-of-spatiotemporal-self-organization">Results: Mechanisms of Spatiotemporal Self-Organization</h2>
<ul>
<li><strong>Mechanism Validation</strong>: The model successfully reproduced the asymmetric oscillation waveform (a slow plateau followed by a steep breakdown) observed in work function and LEED measurements.</li>
<li><strong>Phase Transition Role</strong>: Confirmed that the &ldquo;slow&rdquo; step driving the oscillation period is the phase transformation, specifically the requirement for CO to build up to a critical level to nucleate the reactive <code>1x1</code> phase.</li>
<li><strong>Spatial Self-Organization</strong>: The addition of diffusion terms allowed the model to reproduce wave propagation, showing that defects at crystal edges can act as &ldquo;pacemakers&rdquo; or triggers for the rest of the surface.</li>
<li><strong>Chaotic Behavior</strong>: Under slightly different conditions (e.g., $T = 470$ K instead of 480 K), the coupled system produces irregular, chaotic work function oscillations. This arises when not every trigger compartment oscillation drives a wave into the bulk because the bulk has not yet recovered from the previous wave front. The authors note that such irregular behavior is the rule rather than the exception in experimental observations.</li>
<li><strong>Quantitative Limitations</strong>: The calculated oscillation periods are at least one order of magnitude shorter than experimental values (1 to 4 min). This discrepancy arises mainly from unrealistically high values of $k_5$ and $k_8$ used to reduce computational time. The model also restricts spatial analysis to a 1D grid, which oversimplifies the true 2D wave patterns seen in experiments. The authors note that microscopic adsorbate-adsorbate interactions and island formation are not included, which would require multi-scale modeling.</li>
</ul>
<hr>
<h2 id="reproducibility-details">Reproducibility Details</h2>
<p>To faithfully replicate this study, one must implement the system of four coupled differential equations. The hardware requirements are negligible by modern standards.</p>
<h3 id="models">Models</h3>
<p>The system tracks four state variables:</p>
<ol>
<li>$u_a$: CO coverage on the <code>1x1</code> phase (normalized to local area $a$)</li>
<li>$u_b$: CO coverage on the <code>hex</code> phase (normalized to local area $b$)</li>
<li>$v_a$: Oxygen coverage on the <code>1x1</code> phase (normalized to local area $a$)</li>
<li>$a$: Fraction of surface in <code>1x1</code> phase ($b = 1 - a$)</li>
</ol>
<p><strong>The Governing Equations:</strong></p>
<p><strong>CO coverage on 1x1 phase:</strong>
$$
\begin{aligned}
\frac{\partial u_a}{\partial t} = k_1 a p_{CO} - k_2 u_a + k_3 a u_b - k_4 u_a v_a / a + k_5 \nabla^2(u_a/a)
\end{aligned}
$$</p>
<p><strong>CO coverage on hex phase:</strong>
$$
\begin{aligned}
\frac{\partial u_b}{\partial t} = k_1 b p_{CO} - k_6 u_b - k_3 a u_b
\end{aligned}
$$</p>
<p><strong>Oxygen coverage on 1x1 phase:</strong>
$$
\begin{aligned}
\frac{\partial v_a}{\partial t} = k_7 a p_{O_2} \left[ \left(1 - 2 \frac{u_a}{a} - \frac{5}{3} \frac{v_a}{a}\right)^2 + \alpha \left(1 - \frac{5}{3}\frac{v_a}{a}\right)^2 \right] - k_4 u_a v_a / a
\end{aligned}
$$</p>
<p><strong>The Phase Transition Logic ($da/dt$):</strong></p>
<p>The growth of the <code>1x1</code> phase ($a$) is piecewise, defined by critical coverages:</p>
<ul>
<li>If $U_a &gt; U_{a,grow}$ and $\partial u_a/\partial t &gt; 0$: island growth with $\partial a/\partial t = (1/U_{a,grow}) \cdot \partial u_a/\partial t$</li>
<li>If $c = U_a/U_{a,crit} + V_a/V_{a,crit} &lt; 1$: decay to hex with $\partial a/\partial t = -k_8 a c$</li>
<li>Otherwise: $\partial a/\partial t = 0$</li>
</ul>
<h3 id="algorithms">Algorithms</h3>
<ul>
<li><strong>Time Integration</strong>: Runge-Kutta-Merson routine.</li>
<li><strong>Spatial Integration</strong>: Crank-Nicholson algorithm for the diffusion term.</li>
<li><strong>Time Step</strong>: $\Delta t = 10^{-4}$ s.</li>
<li><strong>Spatial Grid</strong>: 1D array of 40 compartments, total length 0.4 cm (each compartment 0.01 cm).</li>
<li><strong>Boundary Conditions</strong>: Closed ends (no flux). Defects simulated by setting $\alpha$ higher in the first 3 &ldquo;edge&rdquo; compartments.</li>
</ul>
<h3 id="data">Data</h3>
<p>Replication requires the specific rate constants. Note: $k_3$ and $\alpha$ are fitting parameters.</p>
<table>
	<thead>
			<tr>
					<th>Parameter</th>
					<th>Symbol</th>
					<th>Value (at 480 K)</th>
					<th>Description</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>CO Stick</td>
					<td>$k_1$</td>
					<td>$2.94 \times 10^5$ ML/s/Torr</td>
					<td>Pre-exponential factor</td>
			</tr>
			<tr>
					<td>CO Desorp (1x1)</td>
					<td>$k_2$</td>
					<td>$1.5$ s$^{-1}$ ($U_a = 0.5$)</td>
					<td>$E_a = 37.3$ (low cov), $33.5$ kcal/mol (high cov)</td>
			</tr>
			<tr>
					<td>Trapping</td>
					<td>$k_3$</td>
					<td>$50 \pm 30$ s$^{-1}$</td>
					<td>Hex to 1x1 diffusion</td>
			</tr>
			<tr>
					<td>Reaction</td>
					<td>$k_4$</td>
					<td>$10^3 - 10^5$ ML$^{-1}$s$^{-1}$</td>
					<td>Langmuir-Hinshelwood</td>
			</tr>
			<tr>
					<td>Diffusion</td>
					<td>$k_5$</td>
					<td>$4 \times 10^{-4}$ cm$^2$/s</td>
					<td>CO surface diffusion (elevated for computational speed; realistic: $10^{-7}$ to $10^{-5}$)</td>
			</tr>
			<tr>
					<td>CO Desorp (hex)</td>
					<td>$k_6$</td>
					<td>$11$ s$^{-1}$</td>
					<td>$E_a = 27.5$ kcal/mol</td>
			</tr>
			<tr>
					<td>O2 Adsorption</td>
					<td>$k_7$</td>
					<td>$5.6 \times 10^5$ ML/s/Torr</td>
					<td>Only on 1x1 phase</td>
			</tr>
			<tr>
					<td>Phase Trans</td>
					<td>$k_8$</td>
					<td>$0.4 - 2.0$ s$^{-1}$</td>
					<td>Relaxation constant</td>
			</tr>
			<tr>
					<td>Defect Coeff</td>
					<td>$\alpha$</td>
					<td>$0.1 - 0.5$</td>
					<td>Fitting param for defects</td>
			</tr>
			<tr>
					<td>Crit Cov (Grow)</td>
					<td>$U_{a,grow}$</td>
					<td>$0.5 \pm 0.1$</td>
					<td>Trigger for hex to 1x1</td>
			</tr>
			<tr>
					<td>Crit Cov (Decay)</td>
					<td>$U_{a,crit}$</td>
					<td>$0.32$</td>
					<td>Trigger for 1x1 to hex (CO)</td>
			</tr>
			<tr>
					<td>Crit O Cov</td>
					<td>$V_{a,crit}$</td>
					<td>$0.4$</td>
					<td>Trigger for 1x1 to hex (O)</td>
			</tr>
	</tbody>
</table>
<h3 id="evaluation">Evaluation</h3>
<p>The model was evaluated by comparing the simulated temporal oscillations and spatial wave patterns against experimental work function measurements and LEED observations.</p>
<h3 id="hardware">Hardware</h3>
<p>The hardware requirements are negligible by modern standards. The original simulations were likely performed on a mainframe or minicomputer of the era. Today, they can be run on any standard personal computer.</p>
<hr>
<h2 id="paper-information">Paper Information</h2>
<p><strong>Citation</strong>: Imbihl, R., Cox, M. P., Ertl, G., Müller, H., &amp; Brenig, W. (1985). Kinetic oscillations in the catalytic CO oxidation on Pt(100): Theory. <em>The Journal of Chemical Physics</em>, 83(4), 1578-1587. <a href="https://doi.org/10.1063/1.449834">https://doi.org/10.1063/1.449834</a></p>
<p><strong>Publication</strong>: The Journal of Chemical Physics 1985</p>
<p><strong>Related Work</strong>: See also <a href="/notes/chemistry/molecular-simulation/surface-science/oscillatory-co-oxidation-pt110-1992/">Oscillatory CO Oxidation on Pt(110)</a> for the same catalytic system on a different crystal face, demonstrating that surface phase transitions drive oscillatory behavior across multiple platinum surfaces.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bibtex" data-lang="bibtex"><span style="display:flex;"><span><span style="color:#a6e22e">@article</span>{imbihl1985kinetic,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">title</span>=<span style="color:#e6db74">{Kinetic oscillations in the catalytic CO oxidation on Pt(100): Theory}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">author</span>=<span style="color:#e6db74">{Imbihl, R and Cox, MP and Ertl, G and M{\&#34;u}ller, H and Brenig, W}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">journal</span>=<span style="color:#e6db74">{The Journal of Chemical Physics}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">volume</span>=<span style="color:#e6db74">{83}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">number</span>=<span style="color:#e6db74">{4}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">pages</span>=<span style="color:#e6db74">{1578--1587}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">year</span>=<span style="color:#e6db74">{1985}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">publisher</span>=<span style="color:#e6db74">{American Institute of Physics}</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>]]></content:encoded></item><item><title>In Situ XRD of Oxidation-Reduction Oscillations on Pt/SiO2</title><link>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/surface-science/oxidation-reduction-oscillations-pt-sio2-1994/</link><pubDate>Sun, 14 Dec 2025 00:00:00 +0000</pubDate><guid>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/surface-science/oxidation-reduction-oscillations-pt-sio2-1994/</guid><description>In situ XRD validation of the oxide model driving kinetic rate oscillations in high-pressure CO oxidation on supported platinum.</description><content:encoded><![CDATA[<h2 id="experimental-validation-of-the-oxide-model">Experimental Validation of the Oxide Model</h2>
<p>This is a <strong>Discovery (Translational/Application)</strong> paper.</p>
<p>It is classified as such because the primary contribution is the experimental resolution of a long-standing scientific debate regarding the physical driving force of kinetic oscillations. The authors use established techniques (in situ X-ray diffraction and Debye Function Analysis) to falsify existing hypotheses (reconstruction model, carbon model) and validate a specific physical mechanism (the oxide model).</p>
<h2 id="the-missing-driving-force-in-high-pressure-co-oxidation">The Missing Driving Force in High-Pressure CO Oxidation</h2>
<p>The study addresses the debate surrounding the driving force of kinetic oscillations in CO oxidation on platinum catalysts at high pressures ($p &gt; 10^{-3}$ mbar). While low-pressure oscillations on single crystals were known to be caused by surface reconstruction, the mechanism for high-pressure oscillations on supported catalysts was unresolved. Three main models existed:</p>
<ul>
<li><strong>Reconstruction model</strong>: Structural changes of the substrate</li>
<li><strong>Carbon model</strong>: Periodic deactivation by carbon</li>
<li><strong>Oxide model</strong>: Periodic formation and reduction of surface oxides</li>
</ul>
<p>Prior to this work, there was no conclusive experimental proof demonstrating the periodic oxidation and reduction required by the oxide model.</p>
<h2 id="direct-in-situ-xrd-proof">Direct In Situ XRD Proof</h2>
<p>The core novelty is the <strong>first direct experimental evidence</strong> connecting periodic structural changes in the catalyst to rate oscillations. Using in situ X-ray diffraction (XRD), the authors demonstrated that the intensity of the Pt(111) Bragg peak oscillates in sync with the reaction rate.</p>
<p>By applying Debye Function Analysis (DFA) to the diffraction profiles, they quantitatively showed that the catalyst transitions between a metallic Pt state and a partially oxidized state (containing $\text{PtO}$ and $\text{Pt}_3\text{O}_4$). This definitively ruled out the reconstruction model (which would produce much smaller intensity variations) and confirmed the oxide model.</p>
<h2 id="in-situ-x-ray-diffraction-and-activity-monitoring">In Situ X-ray Diffraction and Activity Monitoring</h2>
<p>The authors performed <strong>in situ X-ray diffraction</strong> experiments on a supported Pt catalyst (EuroPt-1) during the CO oxidation reaction.</p>
<ul>
<li><strong>Reaction Monitoring</strong>: They cycled the temperature and gas flow rates (CO, $\text{O}_2$, He) to induce ignition, extinction, and oscillations.</li>
<li><strong>Activity Metrics</strong>: Catalytic activity was tracked via sample temperature (using thermocouples) and $\text{CO}_2$ production (using a quadrupole mass spectrometer).</li>
<li><strong>Structural Monitoring</strong>: They recorded the intensity of the Pt(111) Bragg peak continuously.</li>
<li><strong>Cluster Analysis</strong>: Detailed angular scans of diffracted intensity were taken at stationary points (active vs. inactive states) and analyzed using Debye functions to determine cluster size and composition.</li>
</ul>
<h2 id="periodic-oxidation-mechanism-and-reversibility">Periodic Oxidation Mechanism and Reversibility</h2>
<p><strong>Key Findings</strong>:</p>
<ul>
<li><strong>Oscillation Mechanism</strong>: Rate oscillations are accompanied by the periodic oxidation and reduction of the Pt catalyst.</li>
<li><strong>Phase Relationship</strong>: The X-ray intensity (oxide amount) oscillates approximately 120° ahead of the temperature (reaction rate), consistent with the oxide model: oxidation deactivates the surface → rate drops → CO reduces the surface → rate rises.</li>
<li><strong>Oxide Composition</strong>: The oxidized state consists of a mixture of metallic clusters, $\text{PtO}$, and $\text{Pt}_3\text{O}_4$. $\text{PtO}_2$ was not found.</li>
<li><strong>Extent of Oxidation</strong>: Approximately 20-30% of the metal atoms are oxidized, corresponding effectively to a shell of oxide on the surface of the nanoclusters.</li>
<li><strong>Reversibility</strong>: The transition between metallic and oxidized states is fully reversible with no sintering observed under the experimental conditions.</li>
<li><strong>Scope Limitation</strong>: The authors note that whether the oxide model also applies to kinetic oscillations on Pt foils or Pt wires remains to be verified, since small Pt clusters likely have a much higher tendency to form oxides than massive Pt metal.</li>
</ul>
<hr>
<h2 id="reproducibility-details">Reproducibility Details</h2>
<h3 id="data">Data</h3>
<p>The study used the <strong>EuroPt-1</strong> standard catalyst.</p>
<table>
	<thead>
			<tr>
					<th>Type</th>
					<th>Material</th>
					<th>Details</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Catalyst</strong></td>
					<td>EuroPt-1 ($\text{Pt/SiO}_2$)</td>
					<td>6.3% Pt loading on silica support</td>
			</tr>
			<tr>
					<td><strong>Particle Size</strong></td>
					<td>Pt Clusters</td>
					<td>Mean diameter ~15.5 Å; dispersion $65 \pm 5\%$</td>
			</tr>
			<tr>
					<td><strong>Sample Prep</strong></td>
					<td>Pellets</td>
					<td>40 mg of catalyst pressed into $15 \times 12 \times 0.3 \text{ mm}^3$ self-supporting pellets</td>
			</tr>
	</tbody>
</table>
<h3 id="algorithms">Algorithms</h3>
<p><strong>Debye Function Analysis (DFA)</strong></p>
<p>The study used DFA to fit theoretical scattering curves to experimental intensity profiles. This method is suitable for randomly oriented clusters where standard crystallographic methods might fail due to finite size effects.</p>
<p>$$I_{N}(b)=\sum_{m,n=1}^{N}f_{m}f_{n}\frac{\sin(2\pi br_{mn})}{2\pi br_{mn}}$$</p>
<p>Where:</p>
<ul>
<li><strong>$b$</strong>: Scattering vector magnitude, $b=2 \sin \vartheta/\lambda$</li>
<li><strong>$f_m, f_n$</strong>: Atomic scattering amplitudes</li>
<li><strong>$r_{mn}$</strong>: Distance between atom pairs</li>
<li><strong>Shape Assumption</strong>: Cuboctahedral clusters (nearly spherical)</li>
</ul>
<h3 id="models">Models</h3>
<p><strong>1. The Oxide Model (Physical Mechanism)</strong></p>
<p>Proposed by Sales, Turner, and Maple, validated here:</p>
<ol>
<li><strong>Oxidation</strong>: As oxygen coverage increases, the surface forms a catalytically inactive oxide layer ($\text{PtO}_x$).</li>
<li><strong>Deactivation</strong>: The reaction rate drops as the surface deactivates.</li>
<li><strong>Reduction</strong>: CO adsorption leads to the reduction of the oxide layer, restoring the metallic surface.</li>
<li><strong>Reactivation</strong>: The metallic surface is active for CO oxidation, increasing the rate until oxygen coverage builds up again.</li>
</ol>
<p><strong>2. Shell Model (Structural)</strong></p>
<p>The diffraction data was fit using a &ldquo;Shell Model&rdquo; where a metallic Pt core is surrounded by an oxide shell.</p>
<h3 id="evaluation">Evaluation</h3>
<p><strong>Key Experimental Signatures for Replication</strong>:</p>
<ul>
<li><strong>Ignition Point</strong>: A sharp increase in sample temperature accompanied by a steep 18% decrease in Bragg intensity. After the He flow was switched off, the intensity dropped further to a total decrease of 31.5%.</li>
<li><strong>Oscillation Regime</strong>: Observed at flow rates $\sim 100 \text{ ml/min}$ after cooling the sample to $\sim 375 \text{ K}$. Below $50 \text{ ml/min}$, only bistability is observed. Temperature oscillations had $\sim 50 \text{ K}$ peak-to-peak amplitude.</li>
<li><strong>Magnitude</strong>: Bragg intensity oscillations of ~11% amplitude.</li>
</ul>
<h3 id="hardware">Hardware</h3>
<p><strong>Experimental Setup</strong>:</p>
<ul>
<li><strong>Diffractometer</strong>: Commercial Guinier diffractometer (HUBER) with monochromatized Cu $K_{\alpha1}$ radiation (45° transmission geometry).</li>
<li><strong>Reactor Cell</strong>: Custom 115 $\text{cm}^3$ cell, evacuatable to $10^{-7}$ mbar, equipped with Kapton windows and a Be-cover.</li>
<li><strong>Gases</strong>: CO (4.7 purity), $\text{O}_2$ (4.5 purity), He (4.6 purity) regulated by flow controllers.</li>
<li><strong>Sensors</strong>: Two K-type thermocouples (surface and gas phase) and a differentially pumped Quadrupole Mass Spectrometer (QMS).</li>
</ul>
<hr>
<h2 id="paper-information">Paper Information</h2>
<p><strong>Citation</strong>: Hartmann, N., Imbihl, R., &amp; Vogel, W. (1994). Experimental evidence for an oxidation/reduction mechanism in rate oscillations of catalytic CO oxidation on Pt/SiO2. <em>Catalysis Letters</em>, 28(2-4), 373-381. <a href="https://doi.org/10.1007/BF00806068">https://doi.org/10.1007/BF00806068</a></p>
<p><strong>Publication</strong>: Catalysis Letters 1994</p>
<p><strong>Related Work</strong>: This work complements <a href="/notes/chemistry/molecular-simulation/surface-science/oscillatory-co-oxidation-pt110-1992/">Oscillatory CO Oxidation on Pt(110)</a>, which modeled oscillations via surface reconstruction. Here, the driving force is oxidation/reduction.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bibtex" data-lang="bibtex"><span style="display:flex;"><span><span style="color:#a6e22e">@article</span>{hartmannExperimentalEvidenceOxidation1994,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">title</span> = <span style="color:#e6db74">{Experimental Evidence for an Oxidation/Reduction Mechanism in Rate Oscillations of Catalytic {{CO}} Oxidation on {{Pt}}/{{SiO2}}}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">author</span> = <span style="color:#e6db74">{Hartmann, N. and Imbihl, R. and Vogel, W.}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">year</span> = <span style="color:#ae81ff">1994</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">journal</span> = <span style="color:#e6db74">{Catalysis Letters}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">volume</span> = <span style="color:#e6db74">{28}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">number</span> = <span style="color:#e6db74">{2-4}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">pages</span> = <span style="color:#e6db74">{373--381}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">issn</span> = <span style="color:#e6db74">{1011-372X, 1572-879X}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">doi</span> = <span style="color:#e6db74">{10.1007/BF00806068}</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>]]></content:encoded></item><item><title>Dynamical Corrections to TST for Surface Diffusion</title><link>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/surface-science/self-diffusion-lj-fcc111-1989/</link><pubDate>Sun, 14 Dec 2025 00:00:00 +0000</pubDate><guid>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/surface-science/self-diffusion-lj-fcc111-1989/</guid><description>Application of dynamical corrections formalism to TST for LJ surface diffusion, revealing bounce-back recrossings at low T.</description><content:encoded><![CDATA[<h2 id="bridging-md-and-tst-for-surface-diffusion">Bridging MD and TST for Surface Diffusion</h2>
<p>This is primarily a <strong>Methodological Paper</strong> with a secondary contribution in <strong>Discovery</strong>.</p>
<p>The authors&rsquo; primary goal is to demonstrate the validity of the &ldquo;dynamical corrections formalism&rdquo; for calculating diffusion constants. They validate this by reproducing Molecular Dynamics (MD) results at high temperatures and then extending the method into low-temperature regimes where MD is infeasible.</p>
<p>By applying this method, they uncover a specific physical phenomenon, &ldquo;bounce-back recrossings&rdquo;, that causes a dip in the diffusion coefficient at low temperatures, a detail previously unobserved.</p>
<h2 id="timescale-limits-in-molecular-dynamics">Timescale Limits in Molecular Dynamics</h2>
<p>The authors aim to solve the timescale problem in simulating surface diffusion.</p>
<p><strong>Limit of MD</strong>: Molecular Dynamics (MD) is effective at high temperatures but becomes computationally infeasible at low temperatures because the time between diffusive hops increases drastically.</p>
<p><strong>Limit of TST</strong>: Standard Transition State Theory (TST) can handle long timescales but assumes all barrier crossings are successful, ignoring correlated dynamical events like immediate recrossings or multiple jumps.</p>
<p><strong>Goal</strong>: They seek to apply a formalism that corrects TST using short-time trajectory data, allowing for accurate calculation of diffusion constants across the entire temperature range.</p>
<h2 id="the-bounce-back-mechanism">The Bounce-Back Mechanism</h2>
<p>The core novelty is the rigorous application of the dynamical corrections formalism to a multi-site system (fcc/hcp sites) to characterize non-Arrhenius behavior at low temperatures.</p>
<p><strong>Unified Approach</strong>: They demonstrate that this method works for all temperatures, bridging the gap between the &ldquo;rare-event regime&rdquo; and the high-temperature regime dominated by fluid-like motion.</p>
<p><strong>Bounce-back Mechanism</strong>: They identify a specific &ldquo;dip&rdquo; in the dynamical correction factor ($f_d &lt; 1$) at low temperatures ($T \approx 0.038$), attributed to trajectories where the adatom collides with a substrate atom on the far side of the binding site and immediately recrosses the dividing surface.</p>
<h2 id="simulating-the-lennard-jones-fcc111-surface">Simulating the Lennard-Jones fcc(111) Surface</h2>
<p>The authors performed computational experiments on a Lennard-Jones fcc(111) surface cluster.</p>
<p><strong>System Setup</strong>: A single adatom on a 3-layer substrate (30 atoms/layer) with periodic boundary conditions.</p>
<p><strong>Baselines</strong>: They compared their high-temperature results against standard Molecular Dynamics simulations to validate the method.</p>
<p><strong>Ablation of Substrate Freedom</strong>: They ran a control experiment with a 6-layer substrate (top 3 free, 800 trajectories) to confirm the bounce-back effect persisted independently of the fixed deep layers, obtaining $D/D^{TST} = 0.75 \pm 0.06$, consistent with the original result.</p>
<p><strong>Trajectory Analysis</strong>: They analyzed the angular distribution of initial momenta to characterize the specific geometry of the bounce-back trajectories. Bounce-back trajectories were more strongly peaked at $\phi = 90°$ (perpendicular to the TST gate), confirming the effect arises from interaction with the substrate atom directly across the binding site.</p>
<p><strong>Temperature Range</strong>: The full calculation spanned $0.013 \leq T \leq 0.383$ in reduced units, bridging the rare-event regime and the high-temperature fluid-like regime.</p>
<h2 id="resolving-non-arrhenius-behavior">Resolving Non-Arrhenius Behavior</h2>
<p><strong>Arrhenius Behavior of TST</strong>: The uncorrected TST diffusion constant ($D^{TST}$) followed a near-perfect Arrhenius law, with a linear least-squares fit of $\ln(D^{TST}) = -1.8 - 0.30/T$.</p>
<p><strong>High-Temperature Correction</strong>: At high T, the dynamical correction factor $D/D^{TST} &gt; 1$, indicating correlated multiple forward jumps (long flights).</p>
<p><strong>Low-Temperature Dip</strong>: At low T, $D/D^{TST} &lt; 1$ for $T = 0.013, 0.026, 0.038, 0.051$ (minimum at $T = 0.038$), caused by the bounce-back mechanism.</p>
<p><strong>Validation</strong>: The method successfully reproduced high-T literature values while providing access to low-T dynamics inaccessible to direct MD.</p>
<hr>
<h2 id="reproducibility-details">Reproducibility Details</h2>
<h3 id="data">Data</h3>
<p>The paper does not use external datasets but generates simulation data based on the Lennard-Jones potential.</p>
<table>
	<thead>
			<tr>
					<th>Type</th>
					<th>Parameter</th>
					<th>Value</th>
					<th>Notes</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Potential</strong></td>
					<td>$\epsilon, \sigma$</td>
					<td>1.0 (Reduced units)</td>
					<td>Standard Lennard-Jones 6-12</td>
			</tr>
			<tr>
					<td><strong>Cutoff</strong></td>
					<td>Spline</td>
					<td>$r_1=1.5\sigma, r_2=2.5\sigma$</td>
					<td>5th-order spline smooths potential to 0 at $r_2$</td>
			</tr>
			<tr>
					<td><strong>Geometry</strong></td>
					<td>Lattice Constant</td>
					<td>$a_0 = 1.549$</td>
					<td>Minimum energy for this potential</td>
			</tr>
			<tr>
					<td><strong>Cluster</strong></td>
					<td>Size</td>
					<td>3 layers, 30 atoms/layer</td>
					<td>Periodic boundary conditions parallel to surface</td>
			</tr>
	</tbody>
</table>
<h3 id="algorithms">Algorithms</h3>
<p>The diffusion constant $D$ is calculated as $D = D^{TST} \times (D/D^{TST})$.</p>
<p><strong>1. TST Rate Calculation ($D^{TST}$)</strong></p>
<ul>
<li><strong>Method</strong>: Monte Carlo integration of the flux through the dividing surface.</li>
<li><strong>Technique</strong>: Calculate free energy difference between the entire binding site and the TST dividing region.</li>
<li><strong>Dividing Surface</strong>: Defined geometrically with respect to equilibrium substrate positions (honeycomb boundaries around fcc/hcp sites).</li>
</ul>
<p><strong>2. Dynamical Correction Factor ($D/D^{TST}$)</strong></p>
<p>The method relies on evaluating the dynamical correction factor $f_d$, initialized via a Metropolis walk restricted to the TST boundary region, computed as:</p>
<p>$$
\begin{aligned}
f_d(i\rightarrow j) = \frac{2}{N}\sum_{I=1}^{N}\eta_{ij}(I)
\end{aligned}
$$</p>
<ul>
<li><strong>Initialization</strong>:
<ul>
<li><strong>Position</strong>: Sampled via Metropolis walk restricted to the TST boundary region.</li>
<li><strong>Momentum</strong>: Maxwellian distribution for parallel components; Maxwellian-flux distribution for normal component.</li>
<li><strong>Symmetry</strong>: Trajectories entering hcp sites are generated by reversing momenta of those entering fcc sites.</li>
</ul>
</li>
<li><strong>Integration</strong>:
<ul>
<li><strong>Integrator</strong>: Adams-Bashforth-Moulton predictor-corrector formulas of orders 1 through 12.</li>
<li><strong>Duration</strong>: Integrated until time $t &gt; \tau_{corr}$ (approximately $\tau_{corr} \approx 13$ reduced time units).</li>
<li><strong>Sample Size</strong>: 1400 trajectories per temperature point (700 initially entering each type of site).</li>
</ul>
</li>
</ul>
<h3 id="models">Models</h3>
<ul>
<li><strong>System</strong>: Single component Lennard-Jones solid (Argon-like).</li>
<li><strong>Adsorbate</strong>: Single adatom on fcc(111) surface.</li>
<li><strong>Substrate Flexibility</strong>: Adatom plus top layer atoms are free to move. Layers 2 and 3 are fixed. (Validation run used 6 layers with top 3 free).</li>
</ul>
<h3 id="evaluation">Evaluation</h3>
<p>The primary metric is the Diffusion Constant $D$, analyzed via the Dynamical Correction Factor.</p>
<table>
	<thead>
			<tr>
					<th>Metric</th>
					<th>Value</th>
					<th>Baseline</th>
					<th>Notes</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Slope ($E_a$)</strong></td>
					<td>0.30</td>
					<td>0.303 fcc / 0.316 hcp (Newton-Raphson)</td>
					<td>TST slope in good agreement with static barrier height.</td>
			</tr>
			<tr>
					<td><strong>$D/D^{TST}$ (Low T)</strong></td>
					<td>$0.82 \pm 0.04$</td>
					<td>1.0 (TST)</td>
					<td>At $T=0.038$. Indicates 18% reduction due to recrossing.</td>
			</tr>
			<tr>
					<td><strong>$D/D^{TST}$ (High T)</strong></td>
					<td>$&gt; 1.0$</td>
					<td>MD Literature</td>
					<td>Increases with T due to multiple jumps.</td>
			</tr>
	</tbody>
</table>
<h3 id="hardware">Hardware</h3>
<p>Specific hardware configurations (e.g., node architectures, supercomputers) or training times were not specified in the original publication, which is typical for 1989 literature. Modern open-source MD engines (e.g., LAMMPS, ASE) could perform identical Lennard-Jones molecular dynamics integrations in negligible time on any consumer workstation.</p>
<hr>
<h2 id="paper-information">Paper Information</h2>
<p><strong>Citation</strong>: Cohen, J. M., &amp; Voter, A. F. (1989). Self-diffusion on the Lennard-Jones fcc(111) surface: Effects of temperature on dynamical corrections. <em>The Journal of Chemical Physics</em>, 91(8), 5082-5086. <a href="https://doi.org/10.1063/1.457599">https://doi.org/10.1063/1.457599</a></p>
<p><strong>Publication</strong>: The Journal of Chemical Physics 1989</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bibtex" data-lang="bibtex"><span style="display:flex;"><span><span style="color:#a6e22e">@article</span>{cohenSelfDiffusionLennard1989,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">title</span> = <span style="color:#e6db74">{Self-diffusion on the {{Lennard}}-{{Jones}} Fcc(111) Surface: {{Effects}} of Temperature on Dynamical Corrections}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">shorttitle</span> = <span style="color:#e6db74">{Self-diffusion on the {{Lennard}}-{{Jones}} Fcc(111) Surface}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">author</span> = <span style="color:#e6db74">{Cohen, J. M. and Voter, A. F.}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">year</span> = <span style="color:#e6db74">{1989}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">month</span> = oct,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">journal</span> = <span style="color:#e6db74">{The Journal of Chemical Physics}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">volume</span> = <span style="color:#e6db74">{91}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">number</span> = <span style="color:#e6db74">{8}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">pages</span> = <span style="color:#e6db74">{5082--5086}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">issn</span> = <span style="color:#e6db74">{0021-9606, 1089-7690}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">doi</span> = <span style="color:#e6db74">{10.1063/1.457599}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">langid</span> = <span style="color:#e6db74">{english}</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>]]></content:encoded></item><item><title>Adatom Dimer Diffusion on fcc(111) Crystal Surfaces</title><link>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/surface-science/diffusion-adatom-dimers-1984/</link><pubDate>Sat, 13 Dec 2025 00:00:00 +0000</pubDate><guid>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/surface-science/diffusion-adatom-dimers-1984/</guid><description>A 1984 molecular dynamics study identifying simultaneous multiple jumps in adatom dimer diffusion on fcc(111) surfaces.</description><content:encoded><![CDATA[<h2 id="classification-discovery-of-diffusion-mechanisms">Classification: Discovery of Diffusion Mechanisms</h2>
<p><strong>Discovery (Translational Basis)</strong></p>
<p>This paper applies a computational method (Molecular Dynamics) to observe and characterize a physical phenomenon: the specific diffusion mechanisms of adatom dimers on a crystal surface. It focuses on the &ldquo;what was found&rdquo; (simultaneous multiple jumps).</p>
<p>Based on the <a href="/notes/research-methods/ai-physical-sciences-paper-taxonomy/">AI for Physical Sciences Paper Taxonomy</a>, this is best classified as $\Psi_{\text{Discovery}}$ with a minor superposition of $\Psi_{\text{Method}}$ (approximately 80% Discovery, 20% Method). The dominant contribution is the application of computational tools to observe physical phenomena, while secondarily demonstrating MD&rsquo;s capability for surface diffusion problems in an era when the technique was still developing.</p>
<h2 id="bridging-the-intermediate-temperature-data-gap">Bridging the Intermediate Temperature Data Gap</h2>
<p>The study aims to investigate the behavior of adatom dimers in an <strong>intermediate temperature range</strong> ($0.3T_m$ to $0.6T_m$). At the time, Field Ion Microscopy (FIM) provided data at low temperatures ($T \le 0.2T_m$), and previous simulations had studied single adatoms on various surfaces including (111), (110), and (100), but not dimers on (111). The authors sought to compare dimer mobility with single adatom mobility on the (111) surface, where single adatoms move almost like free particles.</p>
<h2 id="observation-of-simultaneous-multiple-jumps">Observation of Simultaneous Multiple Jumps</h2>
<p>The core contribution is the observation of <strong>simultaneous multiple jumps</strong> for dimers on the (111) surface at intermediate temperatures. The study reveals that:</p>
<ol>
<li>Dimers migrate as a whole entity, with both atoms jumping simultaneously</li>
<li>The mobility of dimers (center of mass) is very close to that of single adatoms in this regime.</li>
</ol>
<h2 id="molecular-dynamics-simulation-design">Molecular Dynamics Simulation Design</h2>
<p>The authors performed <strong>Molecular Dynamics (MD) simulations</strong> of a face-centred cubic (fcc) crystallite:</p>
<ul>
<li><strong>System</strong>: A single crystallite of 192 atoms bounded by two free (111) surfaces</li>
<li><strong>Temperature Range</strong>: $0.22 \epsilon/k$ to $0.40 \epsilon/k$ (approximately $0.3T_m$ to $0.6T_m$)</li>
<li><strong>Duration</strong>: Integration over 50,000 time steps</li>
<li><strong>Comparison</strong>: Results were compared against single adatom diffusion data and Einstein&rsquo;s diffusion relation</li>
</ul>
<h2 id="outcomes-on-mobility-and-migration-dynamics">Outcomes on Mobility and Migration Dynamics</h2>
<ul>
<li><strong>Mechanism Transition</strong>: At low temperatures ($T^\ast=0.22$), diffusion occurs via discrete single jumps where adatoms rotate or extend bonds. At higher temperatures, the &ldquo;multiple jump&rdquo; mechanism becomes preponderant.</li>
<li><strong>Migration Style</strong>: The dimer migrates essentially by extending its bond along the $\langle 110 \rangle$ direction.</li>
<li><strong>Mobility</strong>: The diffusion coefficient of dimers is quantitatively similar to single adatoms.</li>
<li><strong>Qualitative Support</strong>: The results support Bonzel&rsquo;s hypothesis of delocalized diffusion involving energy transfer between translation and rotation. The authors attempted to quantify the coupling using the cross-correlation function:</li>
</ul>
<p>$$g(t) = C \langle E_T(t) , E_R(t + t&rsquo;) \rangle$$</p>
<p>where $C$ is a normalization constant, $E_T$ is the translational energy of the center of mass, and $E_R$ is the rotational energy of the dimer. However, the average lifetime of a dimer (2% to 15% of the total calculation time in the studied temperature range) was too short to allow a statistically significant study of this coupling.</p>
<ul>
<li><strong>Dimer Concentration</strong>: The contribution of dimers to mass transport depends on their concentration. As a first approximation, the dimer concentration is expressed as:</li>
</ul>
<p>$$C = C_0 \exp\left[\frac{-2E_f - E_d}{k_B T}\right]$$</p>
<p>where $E_f$ is the formation energy of adatoms and $E_d$ is the binding energy of a dimer. If the binding energy is sufficiently strong, dimer contributions should be accounted for even in the intermediate temperature range ($0.3T_m$ to $0.6T_m$).</p>
<hr>
<h2 id="reproducibility-details">Reproducibility Details</h2>
<h3 id="data-simulation-setup">Data (Simulation Setup)</h3>
<p>Because this is an early computational study, &ldquo;data&rdquo; refers to the initial structural configuration. The simulation begins with an algorithmically generated generic fcc(111) lattice containing two adatoms as the initial state.</p>















<figure class="post-figure center ">
    <img src="/img/notes/chemistry/argon-dimer-diffusion.webp"
         alt="Visualization of argon dimer on fcc(111) surface"
         title="Visualization of argon dimer on fcc(111) surface"
         
         
         loading="lazy"
         class="post-image">
    
    <figcaption class="post-caption">Initial configuration showing an adatom dimer (two adatoms on neighboring sites) on an fcc(111) surface. The crystallite consists of 192 atoms with periodic boundary conditions in the x and y directions.</figcaption>
    
</figure>

<table>
	<thead>
			<tr>
					<th>Parameter</th>
					<th>Value</th>
					<th>Notes</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Particles</strong></td>
					<td>192 atoms</td>
					<td>Single fcc crystallite</td>
			</tr>
			<tr>
					<td><strong>Dimensions</strong></td>
					<td>$4[110] \times 4[112]$</td>
					<td>Thickness of 6 planes</td>
			</tr>
			<tr>
					<td><strong>Boundary</strong></td>
					<td>Periodic (x, y)</td>
					<td>Free surface in z-direction</td>
			</tr>
			<tr>
					<td><strong>Initial State</strong></td>
					<td>Dimer on neighbor sites</td>
					<td>Starts with 2 adatoms</td>
			</tr>
	</tbody>
</table>
<h3 id="algorithms">Algorithms</h3>
<p>The simulation relies on standard Molecular Dynamics integration techniques. Historical source code is absent. Complete reproducibility is achievable today utilizing modern open-source tools like LAMMPS with standard <code>lj/cut</code> pair styles and NVE/NVT ensembles.</p>
<ul>
<li><strong>Integration Scheme</strong>: Central difference algorithm (Verlet algorithm)</li>
<li><strong>Time Step</strong>: $\Delta t^\ast = 0.01$ (reduced units)</li>
<li><strong>Total Steps</strong>: 50,000 integration steps</li>
<li><strong>Dimer Definition</strong>: Two adatoms are considered a dimer if their distance $r \le r_c = 2\sigma$</li>
</ul>
<h3 id="models-analytic-potential">Models (Analytic Potential)</h3>
<p>The physics are modeled using a classic Lennard-Jones potential.</p>
<p><strong>Potential Form</strong>: (12, 6) Lennard-Jones
$$ V(r) = 4\epsilon \left[ \left(\frac{\sigma}{r}\right)^{12} - \left(\frac{\sigma}{r}\right)^6 \right] $$</p>
<p><strong>Parameters (Argon-like)</strong>:</p>
<ul>
<li>$\epsilon/k = 119.5$ K</li>
<li>$\sigma = 3.4478$ Å</li>
<li>$m = 39.948$ a.u.</li>
<li>Cut-off radius: $2\sigma$</li>
</ul>
<h3 id="evaluation">Evaluation</h3>
<p>Metrics used to quantify the diffusion behavior:</p>
<table>
	<thead>
			<tr>
					<th>Metric</th>
					<th>Formula</th>
					<th>Notes</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Diffusion Coefficient</strong></td>
					<td>$D = \frac{\langle R^2 \rangle}{4t}$</td>
					<td>Calculated from Mean Square Displacement of center of mass</td>
			</tr>
			<tr>
					<td><strong>Trajectory Analysis</strong></td>
					<td>Visual inspection</td>
					<td>Categorized into &ldquo;fast migration&rdquo; (multiple jumps) or &ldquo;discrete jumps&rdquo;</td>
			</tr>
	</tbody>
</table>
<h3 id="hardware">Hardware</h3>
<ul>
<li><strong>Specifics</strong>: Unspecified in the original text.</li>
<li><strong>Scale</strong>: 192 particles simulated for 50,000 steps is extremely lightweight by modern standards. A standard laptop CPU executes this workload in under a second, providing a strong contrast to the mainframe computing resources required in 1984.</li>
</ul>
<hr>
<h2 id="paper-information">Paper Information</h2>
<p><strong>Citation</strong>: Ghaleb, D. (1984). Diffusion of adatom dimers on (111) surface of face centred crystals: A molecular dynamics study. <em>Surface Science</em>, 137(2-3), L103-L108. <a href="https://doi.org/10.1016/0039-6028(84)90515-6">https://doi.org/10.1016/0039-6028(84)90515-6</a></p>
<p><strong>Publication</strong>: Surface Science 1984</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bibtex" data-lang="bibtex"><span style="display:flex;"><span><span style="color:#a6e22e">@article</span>{ghalebDiffusionAdatomDimers1984,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">title</span> = <span style="color:#e6db74">{Diffusion of Adatom Dimers on (111) Surface of Face Centred Crystals: A Molecular Dynamics Study}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">author</span> = <span style="color:#e6db74">{Ghaleb, Dominique}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">year</span> = <span style="color:#e6db74">{1984}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">journal</span> = <span style="color:#e6db74">{Surface Science}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">volume</span> = <span style="color:#e6db74">{137}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">number</span> = <span style="color:#e6db74">{2-3}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">pages</span> = <span style="color:#e6db74">{L103-L108}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">doi</span> = <span style="color:#e6db74">{10.1016/0039-6028(84)90515-6}</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>]]></content:encoded></item><item><title>Lennard-Jones on Adsorption and Diffusion on Surfaces</title><link>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/classical-methods/processes-of-adsorption/</link><pubDate>Sun, 17 Aug 2025 00:00:00 +0000</pubDate><guid>https://hunterheidenreich.com/notes/chemistry/molecular-simulation/classical-methods/processes-of-adsorption/</guid><description>Lennard-Jones's 1932 foundational paper introducing potential energy surface models to unify physical and chemical adsorption.</description><content:encoded><![CDATA[<h2 id="the-theoretical-foundation-of-adsorption-and-diffusion">The Theoretical Foundation of Adsorption and Diffusion</h2>
<p>This paper represents a foundational <strong>Theory</strong> contribution with dual elements of <strong>Systematization</strong>. It derives physical laws for adsorption potentials (Section 2) and diffusion kinetics (Section 4) from first principles, validating them against external experimental data (Ward, Benton). It bridges <strong>electronic structure theory</strong> (potential curves) and <strong>statistical mechanics</strong> (diffusion rates). It provides a unifying theoretical framework to explain a range of experimental observations.</p>
<h2 id="reconciling-physisorption-and-chemisorption">Reconciling Physisorption and Chemisorption</h2>
<p>The primary motivation was to reconcile conflicting experimental evidence regarding the nature of gas-solid interactions. At the time, it was observed that the same gas and solid could interact weakly at low temperatures (consistent with van der Waals forces) but exhibit strong, chemical-like bonding at higher temperatures, a process requiring significant activation energy. The paper seeks to provide a single, coherent model that can explain both &ldquo;physical adsorption&rdquo; (physisorption) and &ldquo;activated&rdquo; or &ldquo;chemical adsorption&rdquo; (chemisorption) and the transition between them.</p>
<h2 id="quantum-mechanical-potential-energy-surfaces-for-adsorption">Quantum Mechanical Potential Energy Surfaces for Adsorption</h2>
<p>The core novelty is the application of quantum mechanical potential energy surfaces to the problem of surface adsorption. The key conceptual breakthroughs are:</p>
<ol>
<li>
<p><strong>Dual Potential Energy Curves</strong>: The paper proposes that the state of the system must be described by at least two distinct potential energy curves as a function of the distance from the surface:</p>
<ul>
<li>One curve represents the interaction of the intact molecule with the surface (e.g., H₂ with a metal). This corresponds to weak, long-range van der Waals forces.</li>
<li>A second curve represents the interaction of the dissociated constituent atoms with the surface (e.g., 2H atoms with the metal). This corresponds to strong, short-range chemical bonds.</li>
</ul>
</li>
<li>
<p><strong>Activated Adsorption via Curve Crossing</strong>: The transition from the molecular (physisorbed) state to the atomic (chemisorbed) state occurs at the intersection of these two potential energy curves. For a molecule to dissociate and chemisorb, it must possess sufficient energy to reach this crossing point. This energy is identified as the <strong>energy of activation</strong>, which had been observed experimentally.</p>
</li>
<li>
<p><strong>Unified Model</strong>: This model unifies physisorption and chemisorption into a single continuous process. A molecule approaching the surface is first trapped in the shallow potential well of the physisorption curve. If it acquires enough thermal energy to overcome the activation barrier, it can transition to the much deeper potential well of the chemisorption state. This provides a clear physical picture for temperature-dependent adsorption phenomena.</p>
</li>
<li>
<p><strong>Quantum Mechanical Basis for Cohesion</strong>: To explain the nature of the chemisorption bond itself, Lennard-Jones draws on the then-recent quantum theory of metals (Sommerfeld, Bloch). In a metal, electrons are not bound to individual atoms but instead occupy shared energy states (bands) spread across the crystal. When an atom approaches the surface, local energy levels form in the gap between the bulk bands, creating sites where bonding can occur. The adsorption bond arises from the interaction between the valency electron of the approaching atom and conduction electrons of the metal, forming a closed shell analogous to a homopolar bond.</p>
</li>
</ol>
<h2 id="validating-theory-against-experimental-gas-solid-interactions">Validating Theory Against Experimental Gas-Solid Interactions</h2>
<p>This is a theoretical paper with no original experiments performed by the author. However, Lennard-Jones validates his theoretical framework against existing experimental data from other researchers:</p>
<ul>
<li><strong>Ward&rsquo;s data</strong>: Hydrogen absorption on copper, used to validate the square root time law for slow sorption kinetics (§4)</li>
<li><strong>Activated adsorption experiments</strong>: Benton and White (hydrogen on nickel), Taylor and Williamson, and Taylor and McKinney all provided isobar data showing temperature-dependent transitions between adsorption types (§3). Garner and Kingman documented three distinct adsorption regimes at different temperatures.</li>
<li><strong>van der Waals constant data</strong>: Used existing measurements of diamagnetic susceptibility to calculate predicted heats of adsorption (e.g., argon on copper yielding approximately 6000 cal/gram atom, nitrogen roughly 2500 cal/gram mol, hydrogen roughly 1300 cal/gram mol)</li>
<li><strong>KCl crystal calculations</strong>: Computed the full attractive potential field of argon above a KCl crystal lattice, accounting for the discrete ionic structure to produce detailed potential energy curves at different surface positions (§2)</li>
</ul>
<p>The validation approach involves deriving theoretical predictions from first principles and showing they match the functional form and magnitude of independently measured experimental results.</p>
<h2 id="the-lennard-jones-diagram-and-activated-adsorption">The Lennard-Jones Diagram and Activated Adsorption</h2>
<p><strong>Key Outcomes</strong>:</p>
<ul>
<li>The paper introduced the now-famous Lennard-Jones diagram for surface interactions, plotting potential energy versus distance from the surface for both molecular and dissociated atomic species. This graphical model became a cornerstone of surface science.</li>
<li>Derived the square root time law ($S \propto \sqrt{t}$) for slow sorption kinetics, validated against Ward&rsquo;s experimental data.</li>
<li>Established quantitative connection between adsorption potentials and measurable atomic properties (diamagnetic susceptibility).</li>
</ul>
<p><strong>Conclusions</strong>:</p>
<ul>
<li>The nature of adsorption is determined by the interplay between two distinct potential states (molecular and atomic).</li>
<li>&ldquo;Activated adsorption&rdquo; is the process of overcoming an energy barrier to transition from a physically adsorbed molecular state to a chemically adsorbed atomic state.</li>
<li>The model predicts that the specific geometry of the surface (i.e., the lattice spacing) and the orientation of the approaching molecule are critical, as they influence the shape of the potential energy surfaces and thus the magnitude of the activation energy.</li>
<li>The reverse process (recombination of atoms and desorption of a molecule) also requires activation energy to move from the chemisorbed state back to the molecular state.</li>
<li>This entire mechanism is proposed as a fundamental factor in heterogeneous <strong>catalysis</strong>, where the surface acts to lower the activation energy for molecular dissociation, facilitating chemical reactions.</li>
</ul>
<p><strong>Limitations</strong>:</p>
<ul>
<li>The initial &ldquo;method of images&rdquo; derivation assumes a perfectly continuous conducting surface, an approximation that breaks down at the atomic orbital level close to the surface.</li>
<li>While Lennard-Jones uses one-dimensional calculations to estimate initial potential well depths, he later qualitatively extends this to 3D &ldquo;contour tunnels&rdquo; to explain surface migration. However, these early geometric approximations lack the many-body, multi-dimensional complexity natively handled by modern Density Functional Theory (DFT) simulations.</li>
</ul>
<hr>
<h2 id="mathematical-derivations">Mathematical Derivations</h2>
<h3 id="van-der-waals-calculation-section-2">Van der Waals Calculation (Section 2)</h3>
<p>The paper derives the attractive force between a neutral atom and a metal surface using the <strong>classical method of electrical images</strong>. The key steps are:</p>
<ol>
<li><strong>Method of Images</strong>: Lennard-Jones models the metal as a continuum of perfectly mobile electric fluid (a perfectly polarisable system). When a neutral atom approaches, its instantaneous dipole moment induces image charges in the metal surface.</li>
</ol>















<figure class="post-figure center ">
    <img src="/img/notes/method-of-images-atom-surface.webp"
         alt="Diagram showing an atom with nucleus (&#43;Ne) and electrons (-e) at distance R from a conducting surface, with its electrical image reflected on the opposite side"
         title="Diagram showing an atom with nucleus (&#43;Ne) and electrons (-e) at distance R from a conducting surface, with its electrical image reflected on the opposite side"
         
         
         loading="lazy"
         class="post-image">
    
    <figcaption class="post-caption">An atom and its electrical image in a conducting surface. The nucleus (+Ne) and electrons create mirror charges across the metal plane.</figcaption>
    
</figure>

<ol start="2">
<li><strong>The Interaction Potential</strong>: The resulting potential energy $W$ of an atom at distance $R$ from the metal surface is:</li>
</ol>
<p>$$W = -\frac{e^2 \overline{r^2}}{6R^3}$$</p>
<p>where $\overline{r^2}$ is the mean square distance of electrons from the nucleus.</p>
<ol start="3">
<li><strong>Connection to Measurable Properties</strong>: This theoretical potential can be calculated using <strong>diamagnetic susceptibility</strong> ($\chi$). The interaction simplifies to:</li>
</ol>
<p>$$W = \mu R^{-3}$$</p>
<p>where $\mu = mc^2\chi/L$, with $m$ the electron mass, $c$ the speed of light, $\chi$ the diamagnetic susceptibility, and $L$ Loschmidt&rsquo;s number ($6.06 \times 10^{23}$). This connects the adsorption potential to measurable magnetic properties of the atom.</p>
<ol start="4">
<li><strong>Repulsive Forces and Equilibrium</strong>: By assuming repulsive forces account for approximately 40% of the potential at equilibrium, Lennard-Jones estimates heats of adsorption. For argon on copper, this yields approximately 6000 cal per gram atom. Similar calculations give roughly 2500 cal/gram mol for nitrogen on copper and 1300 cal/gram mol for hydrogen.</li>
</ol>
<hr>
<h2 id="kinetic-theory-of-slow-sorption-section-4">Kinetic Theory of Slow Sorption (Section 4)</h2>
<p>The paper extends beyond surface phenomena to model how gas <em>enters</em> the bulk solid (absorption). This section is critical for understanding time-dependent adsorption kinetics.</p>
<h3 id="the-cracks-hypothesis">The &ldquo;Cracks&rdquo; Hypothesis</h3>
<p>Lennard-Jones proposes that &ldquo;slow sorption&rdquo; is <strong>lateral diffusion along surface cracks</strong> (fissures between microcrystal boundaries) in the solid. The outer surface presents not a uniform plane but a network of narrow, deep crevasses where gas can penetrate. This reframes the problem: the rate-limiting step is diffusion along these crack walls, explaining why sorption rates differ from predictions based on bulk diffusion coefficients.</p>
<h3 id="the-diffusion-equation">The Diffusion Equation</h3>
<p>The problem is formulated using Fick&rsquo;s second law:</p>
<p>$$\frac{\partial n}{\partial t} = D \frac{\partial^{2}n}{\partial x^{2}}$$</p>
<p>where $n$ is the concentration of adsorbed atoms, $t$ is time, $D$ is the diffusion coefficient, and $x$ is the position along the crack.</p>
<h3 id="derivation-of-the-diffusion-coefficient">Derivation of the Diffusion Coefficient</h3>
<p>The diffusion coefficient is derived from kinetic theory:</p>
<p>$$D = \frac{\bar{c}^2 \tau^2}{2\tau^*}$$</p>
<p>where:</p>
<ul>
<li>$\bar{c}$ is the mean lateral velocity of mobile atoms parallel to the surface</li>
<li>$\tau$ is the time an atom spends in the mobile (activated) state</li>
<li>$\tau^*$ is the interval between activation events</li>
</ul>
<p>Atoms are &ldquo;activated&rdquo; to a mobile state with energy $E_0$, after which they can migrate along the surface.</p>
<h3 id="the-square-root-law">The Square Root Law</h3>
<p>Solving the diffusion equation for a semi-infinite crack yields the total amount of gas absorbed $S$ as a function of time:</p>
<p>$$S = 2n_0 \sqrt{\frac{Dt}{\pi}}$$</p>
<p>This predicts that <strong>absorption scales with the square root of time</strong>:</p>
<p>$$S \propto \sqrt{t}$$</p>
<h3 id="experimental-validation">Experimental Validation</h3>
<p>Lennard-Jones validates this derivation by re-analyzing Ward&rsquo;s experimental data on the Copper/Hydrogen system. Plotting the absorbed quantity against $\sqrt{t}$ produces linear curves, confirming the theoretical prediction. From the slope of the $\log_{10}(S^2/q^2t)$ vs. $1/T$ plot, Ward determined an activation energy of 14,100 cal per gram-molecule for the surface diffusion process.</p>
<hr>
<h2 id="surface-topography-and-3d-contours">Surface Topography and 3D Contours</h2>
<p>The notes above imply a one-dimensional process (distance from surface). The paper explicitly expands this to three dimensions to explain surface migration.</p>
<h3 id="potential-tunnels">Potential &ldquo;Tunnels&rdquo;</h3>
<p>Lennard-Jones models the surface potential as <strong>3D contour surfaces</strong> resembling &ldquo;underground caverns&rdquo; or tunnels. The potential energy landscape above a crystalline surface has periodic minima and saddle points.</p>
<h3 id="surface-migration">Surface Migration</h3>
<p>Atoms migrate along &ldquo;tunnels&rdquo; of low potential energy between surface atoms. The activation energy for surface diffusion corresponds to the barrier height between adjacent potential wells on the surface. This geometric picture explains:</p>
<ul>
<li>Why certain crystallographic orientations are more reactive</li>
<li>The temperature dependence of surface diffusion rates</li>
<li>The role of surface defects in catalysis</li>
</ul>
<h2 id="reproducibility">Reproducibility</h2>
<p>This is a 1932 theoretical paper with no associated code, datasets, or models. The mathematical derivations are fully presented in the text and can be followed from first principles. The experimental data referenced (Ward&rsquo;s copper/hydrogen measurements, Benton and White&rsquo;s nickel/hydrogen isobars) are cited from independently published sources. No computational artifacts exist.</p>
<ul>
<li><strong>Status</strong>: Closed (theoretical paper, no reproducibility artifacts)</li>
<li><strong>Hardware</strong>: N/A (analytical derivations only)</li>
</ul>
<h2 id="paper-information">Paper Information</h2>
<p><strong>Citation</strong>: Lennard-Jones, J. E. (1932). Processes of Adsorption and Diffusion on Solid Surfaces. <em>Transactions of the Faraday Society</em>, 28, 333-359. <a href="https://doi.org/10.1039/tf9322800333">https://doi.org/10.1039/tf9322800333</a></p>
<p><strong>Publication</strong>: Transactions of the Faraday Society, 1932</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bibtex" data-lang="bibtex"><span style="display:flex;"><span><span style="color:#a6e22e">@article</span>{lennardjones1932processes,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">title</span>=<span style="color:#e6db74">{Processes of adsorption and diffusion on solid surfaces}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">author</span>=<span style="color:#e6db74">{Lennard-Jones, John Edward}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">journal</span>=<span style="color:#e6db74">{Transactions of the Faraday Society}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">volume</span>=<span style="color:#e6db74">{28}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">pages</span>=<span style="color:#e6db74">{333--359}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">year</span>=<span style="color:#e6db74">{1932}</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">publisher</span>=<span style="color:#e6db74">{Royal Society of Chemistry}</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div>]]></content:encoded></item><item><title>Platinum Adatom Diffusion on Pt(100): LAMMPS Simulation</title><link>https://hunterheidenreich.com/videos/pt-adatom-diffusion/</link><pubDate>Wed, 27 Sep 2023 00:00:00 +0000</pubDate><guid>https://hunterheidenreich.com/videos/pt-adatom-diffusion/</guid><description>LAMMPS molecular dynamics simulation of platinum adatom diffusion on a Pt(100) surface, showing atomic mobility mechanisms.</description><content:encoded><![CDATA[<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
			<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/1hhf5cQh56w?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
		</div>

<p>Details on the simulation can be found in the <a href="/posts/adatom-cu-diffusion/">LAMMPS Tutorial: Copper and Platinum Adatom Diffusion</a> post and the <a href="/projects/lammps-adatom-diffusion/">Automated Adatom Diffusion Workflow</a> project page.</p>
]]></content:encoded></item><item><title>LAMMPS Tutorial: Copper and Platinum Adatom Diffusion</title><link>https://hunterheidenreich.com/posts/adatom-cu-diffusion/</link><pubDate>Wed, 27 Sep 2023 00:00:00 +0000</pubDate><guid>https://hunterheidenreich.com/posts/adatom-cu-diffusion/</guid><description>LAMMPS tutorial for copper and platinum surface diffusion simulation and ML training data generation. Includes setup, analysis, and Ovito visualization.</description><content:encoded><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Understanding how individual atoms move on crystal surfaces is fundamental to materials science, catalysis, and nanotechnology. This atomic-scale motion, called adatom diffusion, drives processes like thin film growth and surface chemical reactions.</p>
<p>While learning molecular dynamics simulations for my graduate work, I discovered these simulations generate valuable training data for machine learning models. This tutorial walks through simulating copper adatom diffusion on a Cu(100) surface using LAMMPS, building on Eric N. Hahn&rsquo;s excellent <a href="https://www.ericnhahn.com/tutorials/lammps-tutorials/adatom">adatom tutorial</a>.</p>
<p><strong>What you&rsquo;ll learn:</strong></p>
<ul>
<li>Setting up LAMMPS for surface diffusion simulations</li>
<li>Understanding simulation parameters and their impact</li>
<li>Visualizing results with Ovito</li>
<li>Analyzing trajectory data for ML applications</li>
<li>Connecting simulation data to machine learning workflows</li>
</ul>
<p>In this tutorial, we will explore both Copper (Cu) and Platinum (Pt) to show how atomic properties affect diffusion behavior, generating data for training element-aware ML models.</p>
<h2 id="prerequisites">Prerequisites</h2>
<p>Before starting this tutorial, you&rsquo;ll need:</p>
<ul>
<li><strong>LAMMPS</strong> with EAM potential support (version 2020 or later recommended)</li>
<li><strong>Python 3.x</strong> with matplotlib for analysis scripts</li>
<li><strong>Ovito</strong> (free version) for trajectory visualization</li>
<li><strong>Cu01.eam.alloy</strong> potential file from the <a href="https://www.ctcms.nist.gov/potentials/">NIST repository</a></li>
<li>Basic familiarity with molecular dynamics concepts (atoms, forces, timesteps)</li>
</ul>
<h2 id="understanding-adatoms-and-surface-diffusion">Understanding Adatoms and Surface Diffusion</h2>
<h3 id="what-is-an-adatom">What is an Adatom?</h3>
<p>An <strong>adatom</strong> (adsorbed atom) sits on a crystal surface but isn&rsquo;t incorporated into the bulk structure. Adatoms have fewer bonds than fully coordinated bulk atoms, making them highly mobile and reactive.</p>















<figure class="post-figure center ">
    <img src="/img/posts/crystal-surface.webp"
         alt="Ball model representation of a real (atomically rough) crystal surface with steps, kinks, adatoms, and vacancies in a closely-packed crystalline material. Adsorbed molecules, substitutional and interstitial atoms are also illustrated."
         title="Ball model representation of a real (atomically rough) crystal surface with steps, kinks, adatoms, and vacancies in a closely-packed crystalline material. Adsorbed molecules, substitutional and interstitial atoms are also illustrated."
         
         
         loading="lazy"
         class="post-image">
    
    <figcaption class="post-caption">Ball model representation of a real (atomically rough) crystal surface with steps, kinks, adatoms, and vacancies in a closely-packed crystalline material. Adsorbed molecules, substitutional and interstitial atoms are also illustrated. (<a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">CC-BY-SA-4.0: ShutterWaves</a>)</figcaption>
    
</figure>

<h3 id="why-study-adatom-diffusion">Why Study Adatom Diffusion?</h3>
<p>Adatom diffusion is important for several technological processes:</p>
<ul>
<li><strong>Thin film growth</strong>: Adatoms are the building blocks of deposited films</li>
<li><strong>Catalysis</strong>: Many reactions happen at these mobile surface atoms</li>
<li><strong>Corrosion</strong>: How surface atoms move affects material degradation</li>
<li><strong>Self-assembly</strong>: Adatom movement enables formation of ordered structures</li>
</ul>
<p>From a <strong>machine learning perspective</strong>, adatom diffusion is an ideal test case because:</p>
<ul>
<li>Well-understood physics provides ground truth for validation</li>
<li>Small system size enables extensive simulation</li>
<li>Behavior varies significantly with temperature and atomic species</li>
<li>Systematic data generation across different conditions</li>
</ul>
<h3 id="why-cu100">Why Cu(100)?</h3>
<p>Cu(100) surfaces are well-studied in literature, making them excellent benchmarks. The face-centered cubic (fcc) structure creates clear diffusion pathways, and copper&rsquo;s moderate binding energy lets us observe diffusion at reasonable temperatures without extreme computational demands.</p>
<h2 id="simulation-overview">Simulation Overview</h2>
<p>Before diving into the code details, let&rsquo;s understand the simulation design:</p>
<h3 id="key-simulation-parameters">Key Simulation Parameters</h3>
<table>
	<thead>
			<tr>
					<th>Parameter</th>
					<th>Value</th>
					<th>Why this choice</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>System size</strong></td>
					<td>$8 \x8 \x6$ unit cells</td>
					<td>Large enough to avoid edge effects while keeping simulation time reasonable</td>
			</tr>
			<tr>
					<td><strong>Ensemble</strong></td>
					<td>NVT (constant volume, temperature)</td>
					<td>Appropriate for surface studies where pressure isn&rsquo;t the focus</td>
			</tr>
			<tr>
					<td><strong>Potential</strong></td>
					<td>EAM (Embedded Atom Method)</td>
					<td>Captures metallic bonding better than simple pair potentials</td>
			</tr>
			<tr>
					<td><strong>Time step</strong></td>
					<td>5 fs</td>
					<td>Small enough for numerical stability while allowing reasonable run times</td>
			</tr>
			<tr>
					<td><strong>Duration</strong></td>
					<td>500 ps</td>
					<td>Long enough to see multiple diffusion events</td>
			</tr>
			<tr>
					<td><strong>Temperature</strong></td>
					<td>600 K initial seed; 850 K thermostat on the bottom reservoir layer</td>
					<td>Drives thermal energy up from the substrate into the free surface where the adatom diffuses</td>
			</tr>
	</tbody>
</table>
<h3 id="simulation-strategy">Simulation Strategy</h3>
<p>The approach uses a <strong>thermal gradient setup</strong>:</p>
<ul>
<li>Bottom layers: Fixed to represent bulk crystal</li>
<li>Middle layers: Heated to 850 K for thermal energy</li>
<li>Top layers and adatom: Equilibrate to $\sim 600$ K for diffusion</li>
<li>This lets thermal energy propagate up from the heated reservoir to the free surface where the adatom diffuses</li>
</ul>
<p>The complete LAMMPS script implementing this approach:</p>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">### Original Created by Eric N. Hahn  ###
### ericnhahn@gmail.com ###

### Modifications by Hunter Heidenreich, CSE lab (Harvard, 2023)
### hheidenreich@g.harvard.edu
### 2023-09-01

### Simulating adatoms ###
### Version 0.2 ###


units metal
dimension 3
boundary p p s
atom_style atomic

lattice fcc 3.614
variable cubel equal 4
variable fixer1 equal &#34;v_cubel+2&#34;
variable fixer2 equal &#34;v_cubel+1.49&#34;
region  box block -${cubel} ${cubel} -${cubel} ${cubel} -${fixer1} 1 units lattice
region cbox block -${cubel} ${cubel} -${cubel} ${cubel} -${fixer1} 0 units lattice
create_box 1 box
create_atoms 1 region cbox
create_atoms 1 single -0.5 0 0.5 units lattice
region hold block INF INF INF INF -${fixer1} -${fixer2} units lattice
region temp block INF INF INF INF -${fixer2} -${cubel} units lattice
group hold region hold
group temp region temp

pair_style eam/alloy
pair_coeff * * Cu01.eam.alloy Cu

timestep        0.005
compute         new all temp
velocity        temp create 600 12345
fix heater temp temp/rescale 1 850 850 5 1
fix nve all nve
fix freeze hold setforce 0 0 0

variable e     equal pe
variable k     equal ke
variable t     equal etotal
variable T     equal temp
fix energy all ave/time 1 50 50 v_k v_e v_t v_T file energy_avg.txt

minimize 1.0e-4 1.0e-6 1000 10000

dump eve all custom 5 dump.lammpstrj id type xu yu zu   # fx fy fz  # uncomment for forces
dump_modify eve sort id

thermo 50
run 100000  # 100_000 * 5 fs = 500 ps
</code></pre><h2 id="line-by-line-breakdown">Line-by-Line Breakdown</h2>
<p>Let&rsquo;s examine each part of the LAMMPS script:</p>
<h3 id="simulation-setup">Simulation Setup</h3>
<h4 id="units">Units</h4>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">units metal
</code></pre><p>Sets simulation units to &ldquo;metal&rdquo; units (a standard choice for metallic systems). Key conversions: length in $\text{\AA}$, energy in eV, time in ps. Full details in the <a href="https://docs.lammps.org/units.html">LAMMPS documentation</a>.</p>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">dimension 3
</code></pre><p>Sets 3D simulation.</p>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">boundary p p s
</code></pre><p>Boundary conditions: periodic in x,y (infinite surface) and shrink-wrapped in z (finite surface height). This allows the adatom to potentially leave the surface if needed.</p>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">atom_style atomic
</code></pre><p>Uses &ldquo;atomic&rdquo; style, atoms as point masses without internal structure. Standard for metallic systems.</p>
<h4 id="lattice">Lattice</h4>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">lattice fcc 3.614
</code></pre><p>Defines face-centered cubic lattice with experimental Cu lattice constant ($3.614 \text{ \AA}$).</p>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">variable cubel equal 4
variable fixer1 equal &#34;v_cubel+2&#34;
variable fixer2 equal &#34;v_cubel+1.49&#34;
</code></pre><p>Define variables for simulation box dimensions. <code>cubel=4</code> sets system size, while <code>fixer1</code> and <code>fixer2</code> define the frozen and heated regions.</p>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">region  box block -${cubel} ${cubel} -${cubel} ${cubel} -${fixer1} 1 units lattice
region cbox block -${cubel} ${cubel} -${cubel} ${cubel} -${fixer1} 0 units lattice
</code></pre><p>Define regions: <code>box</code> for the entire simulation volume and <code>cbox</code> for crystal creation (excludes the surface layer where we&rsquo;ll place the adatom).</p>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">create_box 1 box
create_atoms 1 region cbox
create_atoms 1 single -0.5 0 0.5 units lattice
</code></pre><p>Create simulation box, populate with Cu atoms, then add single adatom at specified position.</p>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">region hold block INF INF INF INF -${fixer1} -${fixer2} units lattice
region temp block INF INF INF INF -${fixer2} -${cubel} units lattice
group hold region hold
group temp region temp
</code></pre><p>Define atom groups: <code>hold</code> (frozen bottom layers) and <code>temp</code> (heated middle layers for thermal energy).</p>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">pair_style eam/alloy
pair_coeff * * Cu01.eam.alloy Cu
</code></pre><p>Use <a href="/notes/chemistry/molecular-simulation/classical-methods/embedded-atom-method/">Embedded Atom Method (EAM)</a> potential for metallic bonding. The Cu01.eam.alloy potential from <a href="https://doi.org/10.1103/PhysRevB.63.224106">Mishin et al.</a> is available from the <a href="https://www.ctcms.nist.gov/potentials/testing/entry/2001--Mishin-Y-Mehl-M-J-Papaconstantopoulos-D-A-et-al--Cu-1/">NIST repository</a>.</p>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">timestep        0.005
</code></pre><p>5 femtosecond timestep (small enough for numerical stability).</p>
<h4 id="initial-conditions">Initial Conditions</h4>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">velocity        temp create 600 12345
</code></pre><p>Initialize velocities for 600 K temperature using random seed 12345.</p>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">fix heater temp temp/rescale 1 850 850 5 1
fix nve all nve
fix freeze hold setforce 0 0 0
</code></pre><p>Three fixes control dynamics:</p>
<ul>
<li><code>heater</code>: Maintains 850 K in middle layers</li>
<li><code>nve</code>: Velocity Verlet integration for all atoms</li>
<li><code>freeze</code>: Sets forces to zero for bottom atoms</li>
</ul>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">variable e     equal pe
variable k     equal ke
variable t     equal etotal
variable T     equal temp
fix energy all ave/time 1 50 50 v_k v_e v_t v_T file energy_avg.txt
</code></pre><p>Track energies and temperature, averaging every 50 timesteps and writing to file.</p>
<h3 id="execution">Execution</h3>
<h4 id="minimization">Minimization</h4>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">minimize 1.0e-4 1.0e-6 1000 10000
</code></pre><p>Relax initial structure. Should converge quickly, indicating the system is already well-optimized.</p>
<h4 id="output-setup">Output Setup</h4>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">dump eve all custom 5 dump.lammpstrj id type xu yu zu   # fx fy fz  # uncomment for forces
dump_modify eve sort id
</code></pre><p>Write atomic positions every 5 timesteps, sorted by atom ID. Uncomment force components if needed for analysis.</p>
<h4 id="production-run">Production Run</h4>
<pre tabindex="0"><code class="language-lammps" data-lang="lammps">thermo 50
run 100000  # 100_000 * 5 fs = 500 ps
</code></pre><p>Run simulation for 500 ps with thermo output every 50 steps.</p>
<h2 id="visualization-and-analysis">Visualization and Analysis</h2>
<p>Visualize results using <a href="https://www.ovito.org/">Ovito</a>, a free atomistic visualization tool:</p>
<ol>
<li>Open the trajectory file in Ovito</li>
<li>Color atoms by z-coordinate</li>
<li>Restrict height range to $0\text{-}2 \text{ \AA}$ for surface focus</li>
<li>Animate to observe diffusion events</li>
</ol>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
			<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/nIdbNqEEPys?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
		</div>

<h2 id="analysis-results">Analysis Results</h2>
<p>The simulation generates rich data for machine learning applications:</p>
<h3 id="energy-analysis">Energy Analysis</h3>
<p>Energy fluctuations reveal thermal motion patterns:</p>















<figure class="post-figure center ">
    <img src="/img/adatom_cu_energy_avg.webp"
         alt="Average kinetic energy, potential energy, total energy, and temperature over time."
         title="Average kinetic energy, potential energy, total energy, and temperature over time."
         
         
         loading="lazy"
         class="post-image">
    
    <figcaption class="post-caption">Energy and temperature evolution over 500 ps simulation.</figcaption>
    
</figure>

<p>Skipping the first 30 logged data points (each averaged over 50 timesteps, so the first ~1500 timesteps / 7.5 ps of equilibration), these fluctuations enable:</p>
<ul>
<li><strong>Anomaly detection</strong>: Identifying unusual diffusion events</li>
<li><strong>Temperature prediction</strong>: Estimating local temperature from atomic motion</li>
<li><strong>Stability analysis</strong>: Detecting equilibrium states</li>
</ul>
<h3 id="trajectory-analysis">Trajectory Analysis</h3>
<p>Adatom motion reveals diffusion mechanisms:</p>















<figure class="post-figure center ">
    <img src="/img/adatom_cu_xy.webp"
         alt="x and y coordinates of the adatom over time."
         title="x and y coordinates of the adatom over time."
         
         
         loading="lazy"
         class="post-image">
    
    <figcaption class="post-caption">Adatom surface trajectory showing random walk behavior.</figcaption>
    
</figure>

<p>This data enables:</p>
<ul>
<li><strong>Path prediction</strong>: Training models for future position forecasting</li>
<li><strong>Diffusion coefficient estimation</strong>: Learning temperature-mobility relationships</li>
<li><strong>Transition state identification</strong>: Detecting hops between stable sites</li>
</ul>















<figure class="post-figure center ">
    <img src="/img/adatom_cu_z.webp"
         alt="z coordinate of the adatom over time."
         title="z coordinate of the adatom over time."
         
         
         loading="lazy"
         class="post-image">
    
    <figcaption class="post-caption">Height fluctuations revealing exchange events with surface atoms.</figcaption>
    
</figure>

<p>Z-coordinate data shows <strong>exchange events</strong> where the adatom swaps with surface atoms (crucial for surface chemistry understanding). This enables:</p>
<ul>
<li><strong>Event classification</strong>: Distinguishing diffusion vs. exchange mechanisms</li>
<li><strong>Activation barrier estimation</strong>: Learning energy landscapes from fluctuations</li>
<li><strong>Surface coordination analysis</strong>: Correlating height with local environment</li>
</ul>
<h3 id="machine-learning-applications">Machine Learning Applications</h3>
<p>This simulation produces multiple data types for ML training:</p>
<ol>
<li><strong>Coordinate trajectories</strong>: Neural network potential inputs or graph neural network features</li>
<li><strong>Energy time series</strong>: Regression model features for system property prediction</li>
<li><strong>Event annotations</strong>: Supervised learning labels for diffusion mechanism classification</li>
<li><strong>Environmental descriptors</strong>: Local atomic arrangement features</li>
</ol>
<p>Systematic MD simulations generate large, labeled datasets across varied conditions.</p>
<h2 id="extending-to-platinum-mass-and-bonding-effects">Extending to Platinum: Mass and Bonding Effects</h2>
<p>To understand how different elements behave, we can extend this framework to platinum (Pt). Platinum&rsquo;s higher atomic mass and stronger metallic bonding create notably different diffusion behavior, providing comparative data for machine learning.</p>
<h3 id="key-differences-from-copper">Key Differences from Copper</h3>
<table>
	<thead>
			<tr>
					<th>Parameter</th>
					<th>Copper (Cu)</th>
					<th>Platinum (Pt)</th>
					<th>Impact</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Atomic mass</strong></td>
					<td>63.5 u</td>
					<td>195.1 u</td>
					<td>Slower diffusion, longer correlation times</td>
			</tr>
			<tr>
					<td><strong>Lattice const.</strong></td>
					<td>3.614 Å</td>
					<td>3.96 Å</td>
					<td>Larger diffusion barriers, different pathways</td>
			</tr>
			<tr>
					<td><strong>Potential</strong></td>
					<td>Mishin et al.</td>
					<td>Zhou et al.</td>
					<td>Different interaction strengths</td>
			</tr>
			<tr>
					<td><strong>Melting point</strong></td>
					<td>1358 K</td>
					<td>2041 K</td>
					<td>Stronger surface binding</td>
			</tr>
	</tbody>
</table>
<h3 id="modifying-the-lammps-script">Modifying the LAMMPS Script</h3>
<p>The platinum simulation uses the exact same framework as the copper case, with three simple element-specific modifications:</p>
<ol>
<li><strong>Lattice constant</strong>: Change <code>lattice fcc 3.614</code> to <code>lattice fcc 3.96</code></li>
<li><strong>Potential file</strong>: Change <code>Cu01.eam.alloy</code> to <code>Pt_Zhou04.eam.alloy</code> (available from the <a href="https://www.ctcms.nist.gov/potentials/testing/entry/2004--Zhou-X-W-Johnson-R-A-Wadley-H-N-G--Pt/">NIST repository</a>)</li>
<li><strong>Element specification</strong>: Change <code>Cu</code> to <code>Pt</code> in the <code>pair_coeff</code> line</li>
</ol>
<p>These simple changes capture the essential physics differences between elements while maintaining the same simulation protocol, which is ideal for generating comparative datasets for ML training.</p>
<h3 id="expected-behavior-vs-copper">Expected Behavior vs. Copper</h3>
<p>When you run the analysis scripts on the platinum trajectory, you will observe:</p>
<ul>
<li><strong>Slower motion</strong>: Heavier atoms move more slowly at the same temperature. Platinum&rsquo;s ~3x greater mass reduces diffusion rates.</li>
<li><strong>Higher energy barriers</strong>: Stronger metallic bonding creates deeper potential wells, requiring more thermal energy for diffusion hops.</li>
<li><strong>Different pathways</strong>: The larger lattice constant changes the energy landscape, potentially favoring different diffusion mechanisms.</li>
</ul>
<p>Comparing Cu and Pt trajectories enables training element-aware models that account for atomic mass effects, binding strengths, and temperature scaling across different metals.</p>
<h2 id="code-and-data">Code and Data</h2>
<p>The complete simulation scripts and analysis tools are available for reproducibility:</p>
<h3 id="energy-analysis-script">Energy Analysis Script</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#75715e"># Hunter Heidenreich, 2023</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Plots the energy of a simulation over time.</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> matplotlib.pyplot <span style="color:#66d9ef">as</span> plt
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> argparse <span style="color:#f92672">import</span> ArgumentParser
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> __name__ <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;__main__&#39;</span>:
</span></span><span style="display:flex;"><span>    parser <span style="color:#f92672">=</span> ArgumentParser()
</span></span><span style="display:flex;"><span>    parser<span style="color:#f92672">.</span>add_argument(<span style="color:#e6db74">&#39;--input&#39;</span>, type<span style="color:#f92672">=</span>str, required<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)
</span></span><span style="display:flex;"><span>    parser<span style="color:#f92672">.</span>add_argument(<span style="color:#e6db74">&#39;--output&#39;</span>, type<span style="color:#f92672">=</span>str, required<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)
</span></span><span style="display:flex;"><span>    parser<span style="color:#f92672">.</span>add_argument(<span style="color:#e6db74">&#39;--skip&#39;</span>, type<span style="color:#f92672">=</span>int, default<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span>)
</span></span><span style="display:flex;"><span>    args <span style="color:#f92672">=</span> parser<span style="color:#f92672">.</span>parse_args()
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Parse energy data</span>
</span></span><span style="display:flex;"><span>    data <span style="color:#f92672">=</span> {<span style="color:#e6db74">&#39;ts&#39;</span>: [], <span style="color:#e6db74">&#39;kes&#39;</span>: [], <span style="color:#e6db74">&#39;pes&#39;</span>: [], <span style="color:#e6db74">&#39;tes&#39;</span>: [], <span style="color:#e6db74">&#39;Ts&#39;</span>: []}
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">with</span> open(args<span style="color:#f92672">.</span>input, <span style="color:#e6db74">&#39;r&#39;</span>) <span style="color:#66d9ef">as</span> f:
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">for</span> line <span style="color:#f92672">in</span> f:
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> line<span style="color:#f92672">.</span>startswith(<span style="color:#e6db74">&#39;#&#39;</span>) <span style="color:#f92672">or</span> <span style="color:#f92672">not</span> line<span style="color:#f92672">.</span>strip():
</span></span><span style="display:flex;"><span>                <span style="color:#66d9ef">continue</span>
</span></span><span style="display:flex;"><span>            t, v_k, v_e, v_t, v_T <span style="color:#f92672">=</span> map(float, line<span style="color:#f92672">.</span>split())
</span></span><span style="display:flex;"><span>            data[<span style="color:#e6db74">&#39;ts&#39;</span>]<span style="color:#f92672">.</span>append(t)
</span></span><span style="display:flex;"><span>            data[<span style="color:#e6db74">&#39;kes&#39;</span>]<span style="color:#f92672">.</span>append(v_k)
</span></span><span style="display:flex;"><span>            data[<span style="color:#e6db74">&#39;pes&#39;</span>]<span style="color:#f92672">.</span>append(v_e)
</span></span><span style="display:flex;"><span>            data[<span style="color:#e6db74">&#39;tes&#39;</span>]<span style="color:#f92672">.</span>append(v_t)
</span></span><span style="display:flex;"><span>            data[<span style="color:#e6db74">&#39;Ts&#39;</span>]<span style="color:#f92672">.</span>append(v_T)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Skip initial equilibration</span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">for</span> key <span style="color:#f92672">in</span> data:
</span></span><span style="display:flex;"><span>        data[key] <span style="color:#f92672">=</span> data[key][args<span style="color:#f92672">.</span>skip:]
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e"># Create subplots</span>
</span></span><span style="display:flex;"><span>    fig, axs <span style="color:#f92672">=</span> plt<span style="color:#f92672">.</span>subplots(<span style="color:#ae81ff">2</span>, <span style="color:#ae81ff">2</span>, figsize<span style="color:#f92672">=</span>(<span style="color:#ae81ff">16</span>, <span style="color:#ae81ff">12</span>))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    plots <span style="color:#f92672">=</span> [(<span style="color:#e6db74">&#39;Kinetic Energy&#39;</span>, <span style="color:#e6db74">&#39;kes&#39;</span>), (<span style="color:#e6db74">&#39;Potential Energy&#39;</span>, <span style="color:#e6db74">&#39;pes&#39;</span>),
</span></span><span style="display:flex;"><span>             (<span style="color:#e6db74">&#39;Total Energy&#39;</span>, <span style="color:#e6db74">&#39;tes&#39;</span>), (<span style="color:#e6db74">&#39;Temperature&#39;</span>, <span style="color:#e6db74">&#39;Ts&#39;</span>)]
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">for</span> ax, (title, key) <span style="color:#f92672">in</span> zip(axs<span style="color:#f92672">.</span>flat, plots):
</span></span><span style="display:flex;"><span>        ax<span style="color:#f92672">.</span>plot(data[<span style="color:#e6db74">&#39;ts&#39;</span>], data[key])
</span></span><span style="display:flex;"><span>        ax<span style="color:#f92672">.</span>set_xlabel(<span style="color:#e6db74">&#39;TimeStep&#39;</span>)
</span></span><span style="display:flex;"><span>        ax<span style="color:#f92672">.</span>set_ylabel(title)
</span></span><span style="display:flex;"><span>        ax<span style="color:#f92672">.</span>set_title(title)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    plt<span style="color:#f92672">.</span>tight_layout()
</span></span><span style="display:flex;"><span>    plt<span style="color:#f92672">.</span>savefig(args<span style="color:#f92672">.</span>output, dpi<span style="color:#f92672">=</span><span style="color:#ae81ff">300</span>, bbox_inches<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;tight&#39;</span>)
</span></span></code></pre></div><h3 id="trajectory-analysis-script">Trajectory Analysis Script</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#75715e"># Hunter Heidenreich, 2023</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Plots the coordinates of the adatom.</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> matplotlib.pyplot <span style="color:#66d9ef">as</span> plt
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> argparse <span style="color:#f92672">import</span> ArgumentParser
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> __name__ <span style="color:#f92672">==</span> <span style="color:#e6db74">&#39;__main__&#39;</span>:
</span></span><span style="display:flex;"><span>    parser <span style="color:#f92672">=</span> ArgumentParser()
</span></span><span style="display:flex;"><span>    parser<span style="color:#f92672">.</span>add_argument(<span style="color:#e6db74">&#39;--input&#39;</span>, type<span style="color:#f92672">=</span>str, required<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)
</span></span><span style="display:flex;"><span>    parser<span style="color:#f92672">.</span>add_argument(<span style="color:#e6db74">&#39;--output&#39;</span>, type<span style="color:#f92672">=</span>str, required<span style="color:#f92672">=</span><span style="color:#66d9ef">True</span>)
</span></span><span style="display:flex;"><span>    parser<span style="color:#f92672">.</span>add_argument(<span style="color:#e6db74">&#39;--id&#39;</span>, type<span style="color:#f92672">=</span>int, default<span style="color:#f92672">=</span><span style="color:#ae81ff">1665</span>,
</span></span><span style="display:flex;"><span>                       help<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;Atom ID to track (the adatom is the last created atom)&#39;</span>)
</span></span><span style="display:flex;"><span>    parser<span style="color:#f92672">.</span>add_argument(<span style="color:#e6db74">&#39;--do_z&#39;</span>, action<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;store_true&#39;</span>,
</span></span><span style="display:flex;"><span>                       help<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;Plot z-coordinate instead of xy scatter&#39;</span>)
</span></span><span style="display:flex;"><span>    args <span style="color:#f92672">=</span> parser<span style="color:#f92672">.</span>parse_args()
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    coords <span style="color:#f92672">=</span> {<span style="color:#e6db74">&#39;x&#39;</span>: [], <span style="color:#e6db74">&#39;y&#39;</span>: [], <span style="color:#e6db74">&#39;z&#39;</span>: []}
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">with</span> open(args<span style="color:#f92672">.</span>input, <span style="color:#e6db74">&#39;r&#39;</span>) <span style="color:#66d9ef">as</span> f:
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">for</span> line <span style="color:#f92672">in</span> f:
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> line<span style="color:#f92672">.</span>startswith(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#39;</span><span style="color:#e6db74">{</span>args<span style="color:#f92672">.</span>id<span style="color:#e6db74">}</span><span style="color:#e6db74"> &#39;</span>):
</span></span><span style="display:flex;"><span>                x, y, z <span style="color:#f92672">=</span> map(float, line<span style="color:#f92672">.</span>split()[<span style="color:#ae81ff">2</span>:<span style="color:#ae81ff">5</span>])
</span></span><span style="display:flex;"><span>                coords[<span style="color:#e6db74">&#39;x&#39;</span>]<span style="color:#f92672">.</span>append(x)
</span></span><span style="display:flex;"><span>                coords[<span style="color:#e6db74">&#39;y&#39;</span>]<span style="color:#f92672">.</span>append(y)
</span></span><span style="display:flex;"><span>                coords[<span style="color:#e6db74">&#39;z&#39;</span>]<span style="color:#f92672">.</span>append(z)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    plt<span style="color:#f92672">.</span>figure(figsize<span style="color:#f92672">=</span>(<span style="color:#ae81ff">10</span>, <span style="color:#ae81ff">8</span>))
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span> args<span style="color:#f92672">.</span>do_z:
</span></span><span style="display:flex;"><span>        plt<span style="color:#f92672">.</span>plot(range(len(coords[<span style="color:#e6db74">&#39;z&#39;</span>])), coords[<span style="color:#e6db74">&#39;z&#39;</span>], <span style="color:#e6db74">&#39;b-&#39;</span>, linewidth<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span>)
</span></span><span style="display:flex;"><span>        plt<span style="color:#f92672">.</span>xlabel(<span style="color:#e6db74">&#39;Simulation Step&#39;</span>)
</span></span><span style="display:flex;"><span>        plt<span style="color:#f92672">.</span>ylabel(<span style="color:#e6db74">&#39;Z Coordinate (Å)&#39;</span>)
</span></span><span style="display:flex;"><span>        plt<span style="color:#f92672">.</span>title(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#39;Height vs. Time for Adatom </span><span style="color:#e6db74">{</span>args<span style="color:#f92672">.</span>id<span style="color:#e6db74">}</span><span style="color:#e6db74">&#39;</span>)
</span></span><span style="display:flex;"><span>        plt<span style="color:#f92672">.</span>grid(<span style="color:#66d9ef">True</span>, alpha<span style="color:#f92672">=</span><span style="color:#ae81ff">0.3</span>)
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">else</span>:
</span></span><span style="display:flex;"><span>        plt<span style="color:#f92672">.</span>scatter(coords[<span style="color:#e6db74">&#39;x&#39;</span>], coords[<span style="color:#e6db74">&#39;y&#39;</span>], s<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span>, alpha<span style="color:#f92672">=</span><span style="color:#ae81ff">0.7</span>, c<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;red&#39;</span>)
</span></span><span style="display:flex;"><span>        plt<span style="color:#f92672">.</span>xlabel(<span style="color:#e6db74">&#39;X Coordinate (Å)&#39;</span>)
</span></span><span style="display:flex;"><span>        plt<span style="color:#f92672">.</span>ylabel(<span style="color:#e6db74">&#39;Y Coordinate (Å)&#39;</span>)
</span></span><span style="display:flex;"><span>        plt<span style="color:#f92672">.</span>title(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#39;XY Trajectory for Adatom </span><span style="color:#e6db74">{</span>args<span style="color:#f92672">.</span>id<span style="color:#e6db74">}</span><span style="color:#e6db74">&#39;</span>)
</span></span><span style="display:flex;"><span>        plt<span style="color:#f92672">.</span>axis(<span style="color:#e6db74">&#39;equal&#39;</span>)
</span></span><span style="display:flex;"><span>        plt<span style="color:#f92672">.</span>grid(<span style="color:#66d9ef">True</span>, alpha<span style="color:#f92672">=</span><span style="color:#ae81ff">0.3</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    plt<span style="color:#f92672">.</span>savefig(args<span style="color:#f92672">.</span>output, dpi<span style="color:#f92672">=</span><span style="color:#ae81ff">300</span>, bbox_inches<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;tight&#39;</span>)
</span></span></code></pre></div><h2 id="summary-and-next-steps">Summary and Next Steps</h2>
<p>This tutorial demonstrates how molecular dynamics generates valuable ML training data for materials science. Adatom diffusion provides an ideal starting point because it:</p>
<ul>
<li><strong>Has interpretable physics</strong>: Well-understood mechanisms enable ML validation</li>
<li><strong>Shows diverse behaviors</strong>: Temperature-dependent dynamics create rich datasets</li>
<li><strong>Scales efficiently</strong>: Small systems allow extensive parameter exploration</li>
<li><strong>Connects to applications</strong>: Direct relevance to catalysis and surface engineering</li>
</ul>
<h3 id="whats-next">What&rsquo;s Next</h3>
<p>Future posts will extend this framework:</p>
<ol>
<li><strong>Mixed-metal surfaces</strong>: Alloy effects on diffusion pathways</li>
<li><strong>Stepped surfaces</strong>: How defects alter atomic mobility</li>
<li><strong>ML implementation</strong>: Training neural networks on simulation data</li>
</ol>
<h3 id="broader-applications">Broader Applications</h3>
<p>These simulation techniques enable various ML applications:</p>
<ul>
<li><strong>Neural network potentials</strong>: Replacing expensive quantum calculations with trained models</li>
<li><strong>Rare event sampling</strong>: ML-enhanced diffusion pathway identification</li>
<li><strong>Catalyst design</strong>: Predicting surface modification effects on reactivity</li>
<li><strong>Materials discovery</strong>: Screening alloy compositions for desired properties</li>
</ul>
<h3 id="getting-started">Getting Started</h3>
<p>To reproduce these simulations:</p>
<ol>
<li>Install LAMMPS with EAM potential support</li>
<li>Download Cu01.eam.alloy from the <a href="https://www.ctcms.nist.gov/potentials/entry/2001--Mishin-Y-Mehl-M-J-Papaconstantopoulos-D-A-et-al--Cu-1/">NIST repository</a> and place in your working directory</li>
<li>Save the LAMMPS script as <code>adatom_cu.lammps</code> and run:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>lammps -in adatom_cu.lammps
</span></span></code></pre></div></li>
<li>Analyze the results with the Python scripts:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>python plot_energy.py --input energy_avg.txt --output energy.png --skip <span style="color:#ae81ff">30</span>
</span></span><span style="display:flex;"><span>python plot_trajectory.py --input dump.lammpstrj --output trajectory_xy.png
</span></span><span style="display:flex;"><span>python plot_trajectory.py --input dump.lammpstrj --output trajectory_z.png --do_z
</span></span></code></pre></div></li>
<li>Visualize in Ovito by opening <code>dump.lammpstrj</code></li>
<li>Experiment with different temperatures, orientations, or elements</li>
</ol>
<hr>
<p>The full project, including the simulation architecture and automated analysis pipeline, is documented on the <a href="/projects/lammps-adatom-diffusion/">Automated Adatom Diffusion Workflow project page</a>.</p>
<p><em>Questions about the simulation setup or interested in applying these techniques to your research? Feel free to reach out. I&rsquo;m always happy to discuss molecular dynamics and machine learning applications.</em></p>
<h2 id="references">References</h2>
<ul>
<li><a href="https://www.lammps.org/">LAMMPS</a></li>
<li><a href="https://www.ovito.org/">Ovito</a></li>
<li><a href="https://www.ctcms.nist.gov/potentials/">NIST Interatomic Potentials Repository</a></li>
<li><a href="https://doi.org/10.1103/PhysRevB.63.224106">Mishin et al.</a></li>
</ul>
]]></content:encoded></item><item><title>Copper Adatom Diffusion on Cu(100): LAMMPS Simulation</title><link>https://hunterheidenreich.com/videos/cu-adatom-diffusion/</link><pubDate>Wed, 27 Sep 2023 00:00:00 +0000</pubDate><guid>https://hunterheidenreich.com/videos/cu-adatom-diffusion/</guid><description>LAMMPS molecular dynamics simulation of copper adatom diffusion on a Cu(100) surface, showing atomic mobility mechanisms.</description><content:encoded><![CDATA[<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
			<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/nIdbNqEEPys?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
		</div>

<p>Details on the simulation can be found in the <a href="/posts/adatom-cu-diffusion/">Cu Adatom Diffusion on Cu(100)</a> post and the <a href="/projects/lammps-adatom-diffusion/">Automated Adatom Diffusion Workflow</a> project page.</p>
]]></content:encoded></item><item><title>Automated Adatom Diffusion Workflow</title><link>https://hunterheidenreich.com/projects/lammps-adatom-diffusion/</link><pubDate>Thu, 21 Sep 2023 00:00:00 +0000</pubDate><guid>https://hunterheidenreich.com/projects/lammps-adatom-diffusion/</guid><description>Python-wrapped reference implementation for surface diffusion simulations using LAMMPS and EAM potentials, with automated analysis pipelines.</description><content:encoded><![CDATA[<h2 id="overview">Overview</h2>
<p>This project provides an &ldquo;input-to-analysis&rdquo; workflow for simulating adatom diffusion on FCC metal surfaces. It demonstrates how to set up surface diffusion simulations in LAMMPS, manage EAM potentials, and parse trajectory data into energy and trajectory plots using Python. The LAMMPS input scripts are adapted from Eric N. Hahn&rsquo;s adatom tutorial; the Python analysis layer (<code>plot_energy.py</code>, <code>plot_xy.py</code>) is my own, written while in CSElab (Harvard, 2023).</p>
<p>The workflow covers two material systems (Copper (Cu) and Platinum (Pt)) providing comparative datasets that highlight how atomic mass and bonding strength affect surface dynamics.</p>
<h2 id="features">Features</h2>
<h3 id="simulation-architecture">Simulation Architecture</h3>
<p>The project separates simulation logic from analysis code:</p>
<table>
	<thead>
			<tr>
					<th style="text-align: left">Directory</th>
					<th style="text-align: left">Description</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left"><strong><code>/adatom_cu</code></strong></td>
					<td style="text-align: left">Copper adatom diffusion on Cu(100)</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong><code>/adatom_pt</code></strong></td>
					<td style="text-align: left">Platinum adatom diffusion on Pt(100)</td>
			</tr>
	</tbody>
</table>
<p>Each directory contains:</p>
<ul>
<li><strong>LAMMPS input scripts</strong> (<code>.in</code> files) defining the physics</li>
<li><strong>EAM potential files</strong> for metallic bonding (the Cu potential is committed; the Pt potential must be downloaded separately from the NIST Interatomic Potentials Repository, so the Pt system does not run as-checked-out)</li>
<li><strong>Python analysis scripts</strong> for trajectory and energy parsing</li>
</ul>
<h3 id="key-features">Key Features</h3>
<ul>
<li><strong>EAM Potentials</strong>: Uses Embedded Atom Method alloy potentials to accurately model metallic bonding and surface energies, providing accuracy beyond simple Lennard-Jones potentials</li>
<li><strong>Automated Analysis</strong>: Python pipeline (<code>plot_energy.py</code>, <code>plot_xy.py</code>) that parses raw thermodynamic logs and trajectory dumps to generate &ldquo;health check&rdquo; dashboards</li>
<li><strong>Workflow Orchestration</strong>: Demonstrates the &ldquo;Input → Simulation → Analysis&rdquo; loop, automating the transition from raw <code>.lammpstrj</code> files to publication-ready plots</li>
<li><strong>Kokkos Support</strong>: Includes Kokkos execution commands for GPU/multi-threaded runs</li>
</ul>
<h3 id="simulation-parameters">Simulation Parameters</h3>
<table>
	<thead>
			<tr>
					<th style="text-align: left">Parameter</th>
					<th style="text-align: left">Value</th>
					<th style="text-align: left">Purpose</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left"><strong>Ensemble</strong></td>
					<td style="text-align: left">NVT → NVE</td>
					<td style="text-align: left">Equilibration followed by energy conservation checks</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Potential</strong></td>
					<td style="text-align: left">EAM/alloy</td>
					<td style="text-align: left">Accurate metallic bonding for surface dynamics</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Minimization</strong></td>
					<td style="text-align: left">CG (1.0e-4)</td>
					<td style="text-align: left">Remove steric overlaps before dynamics</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Timestep</strong></td>
					<td style="text-align: left">5 fs (metal units)</td>
					<td style="text-align: left">EAM-appropriate integration step</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Trajectory dump</strong></td>
					<td style="text-align: left">every 5 steps (25 fs)</td>
					<td style="text-align: left">Tracks adatom site-to-site hops</td>
			</tr>
	</tbody>
</table>
<h2 id="usage">Usage</h2>
<p>The repository includes LAMMPS input scripts and Python analysis scripts. Run the LAMMPS scripts to generate trajectory data, then use the Python scripts to visualize the results.</p>
<h2 id="results">Results</h2>
<p>This workflow is documented in detail in companion blog posts:</p>
<ul>
<li><a href="/posts/adatom-cu-diffusion/">LAMMPS Tutorial: Copper and Platinum Adatom Diffusion</a> - Complete setup walkthrough with line-by-line script explanation and comparison of how heavier atoms behave differently on surfaces</li>
</ul>
]]></content:encoded></item></channel></rss>