The finite dipole model#
In snompy, there are three different implementations of the finite dipole model (FDM): the bulk implementation, the multilayer implementation and the charge average implementation.
This page gives a description of each one, with a particular focus on the derivation of the bulk FDM, from which the other implementations are derived.
Deriving the bulk FDM#
Ellipsoid model of an AFM tip#
The first step in the FDM is to represent the AFM tip by a perfectly conducting ellipsoid. This is a good approximation for the elongated probe at the tip’s end, and there is an analytical solution for its response to an electrical field.
The electric field of the incident light will vary with time, \(t\), and frequency, \(\omega\), as \(E \propto E_{in} e^{i \omega t}\). But we can make the quasistatic approximation, which assumes electric fields change much slower than the time needed for charges in the system to reach equilibrium. That means we can represent the incident light by a static, vertically oriented electric field \(E_{in}\).
Let’s first consider the response of an isolated ellipsoid (with no sample surface nearby) to a vertical electric field. The image below shows the vertical component of the electric field response of an ellipsoid to a vertical \(E_{in}\).
We can see that the resulting field looks like that of a dipole formed by two charges, \(Q_0\) and \(-Q_0\), close to the ends of the ellipsoid [1].
This dipole, which we call \(p_0\), is what gives the finite dipole model its name. The word finite here refers to the fact that the dipole has a finite length, and is used to contrast with the point dipole model (PDM), an earlier model for the effective polarizability. The position of the two charges are found at distances
from the ends of the ellipsoid, where \(r_{tip}\) is the radius of curvature at the pointy end, and \(L_{tip}\) is the semi-major axis length (the distance from the ellipsoid centre to the pointy end).
Hint
For the depths of charges inside the end of the tip, it is often convenient to specify them in terms of the tip radius. We use the symbols \(d_{Q_j}\) in this documentation to represent \(z_{Q_j}\) in units of the tip radius.
The strength of the electric dipole moment can be related to the charges and their separation as
Tip-sample interaction#
Now let’s consider what happens when we move our model AFM tip close to a sample’s surface, with a tip-sample separation of \(z_{tip}\).
When they are close enough, charges induced in the ellipsoid will interact with the sample. But due to the elongated shape, we can make the approximation that this only happens for the lower of the two charges. The other charge is too far away. This means that we can neglect the effect of the \(-Q_0\) charge, and model the sample response as the response to a single point charge \(Q_0\) [1].
The image below shows the various induced charges, counter charges, and image charges which are used in the FDM to model the tip-sample interaction.
We can model the electric field response of the sample to the charge \(Q_0\), at a height of \(z_{tip} + z_{Q_0}\), using the method of image charges.
This means we can add a fictitious image charge, \(Q_0' = -\beta Q_0\), at a depth of \(z_{tip} + z_{Q_0}\) below the surface. Here, \(\beta\) is the quasistatic reflection coefficient of the surface, given by
where \(\varepsilon_{env}\) is the permitivitty of thee nvironment
(\(\varepsilon_{env} = 1\) for air or vacuum), and
\(\varepsilon_{sub}\) is the permitivitty of the sample (the subscript
“sub” here is short for substrate).
In snompy, equation (3) is provided by the function
snompy.sample.Sample.refl_coef_qs().
The charge \(Q_0'\) acts back on the tip and induces a further polarization, which we can model as another point charge \(Q_1\), at a distance \(z_{Q_1} \approx r_{tip} / 2\) away from the end of the tip.
Hint
Modelling the response of the tip to \(Q_0'\) as a single point charge is just an approximation. In reality, the polarization induced in the tip has a complicated charge distribution which is quite tricky to calculate [1]. But replacing that distribution with a single, representative point charge allows us to solve the electrostatic equations, and gives a model that matches well to experimental results.
With the addition of \(Q_1\), we need to add some more charges to our model: the sample response to \(Q_1\) can be represented by another image charge, \(Q_1' = \beta Q_1\), at a depth of \(z_{tip} + z_{Q_1}\) below the surface; and, for conservation of charge within the tip, \(Q_1\) must have a counter charge \(-Q_1\), which is situated in the centre of the ellipsoid.
The value of \(Q_1\) can be solved for by accounting for contributions to the overall polarization from \(Q_0\) and also from \(Q_1\) itself [2], as
(neglecting the influence of the \(-Q_1\) charge as it’s far from the sample).
Here, the parameters \(f_j\) account for the geometrical features of the tip, and the positions of the charges within them. They are given by the formula
where \(g \approx 0.7\) is an empirical factor that describes how much
of the induced charge is relevant for the near-field interaction.
In snompy, equation (5) is provided by the function
snompy.fdm.geom_func().
The charges \(Q_1\) and \(-Q_1\) form another dipole
The effective polarizability of the tip and sample can then be found from the total induced dipole, as
In snompy, equation (7) is provided by the function
snompy.fdm.eff_pol(), with the argument method=”bulk”.
Extending to multilayer samples#
The multilayer method#
Hauer et al. proposed a method to extend the FDM to multilayer samples [2]. In this method, the response of the multilayer sample to a charge \(Q_j\) is modelled with a single image charge \(Q_j'={\beta}_{j} Q_j\) at a depth \(d_{Q_j'}\) below the sample surface.
The effective depth and reflection coefficient for the charge are chosen to be those that preserve the normal electric field \(E_z\) and potential \(\phi\) at the surface of the sample using snompy.sample.Sample.image_depth_and_charge(), as:
The potential and field can be calculated using snompy.sample.Sample.surf_pot_and_field(), from:
Here \(q\) is the in-plane momentum of light, and \(\beta(q)\) is the effective quasistatic reflection coefficient for the surface, calculated using snompy.sample.Sample.refl_coef_qs().
These values can then be inserted into a modified version of equation (7), as:
The geometry function is also modified in this case to become:
In snompy, equation (10) is provided by the function
snompy.fdm.eff_pol(), with the argument method=”multi”.
The charge average method#
Mester et al. proposed another multilayer FDM method [3].
In this implementation, the geometry function used is the same as for the bulk FDM method, however an alternative expression for the quasistatic reflection coefficient is used, which is derived from the ratio of the fields at the height of the probe:
The height \(z_{Q_a}\) here is the height of a single representative test charge \(Q_a\), whose position within the tip is chosen empirically.
Equation (12) is implemented in snompy as snompy.sample.Sample.refl_coef_qs_above_surf().
This can then be inserted into another modified version of equation (7), as:
In snompy, equation (13) is provided by the function
snompy.fdm.eff_pol(), with the argument method=”Q_ave”.
Demodulating the FDM#
Typically we’re not interested in the raw effective polarizability, but in the \(n_{th}\)-harmonic-demodulated effective polarizability \(\alpha_{eff, n}\). That’s because the signals measured in real SNOM experiments are determined by the demodulated near-field scattering coefficient
with amplitude and phase
This is explained in detail on the dedicated page Demodulation.
In snompy, \(\alpha_{eff, n}\) for bulk FDM is provided by the
function snompy.fdm.eff_pol_n().