Expand description
Fitting Mermin oscillators to an optical energy-loss function (the MELF-GOS fit).
§What is fitted
In the MELF-GOS method the optical ELF is represented by a weighted sum of
Mermin-type energy-loss functions, whose parameters A_j, ħω_j, ħγ_j
(intensity, position, width) are “determined by fitting the outer-shell
ELF contribution to the available experimental optical spectrum” through
the k = 0 form, in which the Mermin ELF is the Drude-Lorentz one:
ELF(E) = Σ_j A_j E ħγ_j / ([(ħω_j)² - E²]² + [E ħγ_j]²)(P. de Vera et al., Int. J. Mol. Sci. 23, 6121 (2022),
doi:10.3390/ijms23116121, PMC9181504, section 2.1.1, eqs. (3) and (5),
read 2026-10-07; see super::mermin). The same paper says the
consistency of the fit “is checked by fulfilling the Kramers-Kronig and
f-sum rules”; this module reports the f-sum and P_eff of the fit next to
those of the data (MerminFit). It does not say how the least-squares
problem is solved, and the algorithm below is our own, built from
textbook pieces that were not opened for this implementation:
- the amplitudes enter linearly, so for fixed
(ω_j, γ_j)they are the solution of a non-negative least-squares problem (Lawson-Hanson active-set algorithm, C. L. Lawson and R. J. Hanson, Solving Least Squares Problems, 1974, with each subproblem solved by Householder QR); amplitudes are therefore non-negative by construction; - the energies and widths are found by Levenberg-Marquardt iterations on
(ln ω_j, ln γ_j)of the amplitude-eliminated residual (variable projection, G. H. Golub and V. Pereyra, 1973), with a central-difference Jacobian.
Every step is a fixed sequence of floating-point operations on the input table: the fit is deterministic and does not depend on the thread count.
§Limits
The fit is a local optimisation. The amplitudes of the start are ignored
(they are solved for); the energies and widths of the start decide which
local minimum is reached. The default start places the oscillators at the
tallest local maxima of the tabulated ELF (completed by log-spaced
energies), which is a heuristic; for real data the caller should inspect
MerminFit::residuals and, if needed, supply a start. The threshold
step Θ(E - E_th) of dV2022 eq. (3) is not fitted.
The whole tabulated ELF is fitted, inner-shell edges included, where
dV2022 fits Mermin oscillators to the outer-shell ELF only (their eqs. (1)
and (3); inner shells by GOS, eq. (2)) and checks the fit against the
Kramers-Kronig and f-sum rules (after eq. (5)). The default of three
oscillators is coarse for real data: for the committed Cu ELF it carries
57 % of the table’s f-sum and 67 % of its P_eff, and the Mermin IMFP is
18 to 34 % longer than the single-pole one on the table (#300;
docs/validation.md, “Cu: the Mermin IMFP and the default oscillator
fit”; the default is #306). The widths are bounded below by the local knot
spacing (see fit_mermin_oscillators); without that bound, fits of the
Cu ELF with 10 or 16 oscillators placed an oscillator far narrower than
the knot spacing between two knots, which the residuals do not see and the
sum rules do (#307). The floor does not stop the same fits from placing
a very wide oscillator whose f-sum lies above the table (#311). Read
MerminFit::f_sum_ev2 against MerminFit::data_f_sum_ev2 in any
case.
§Closed-form sum rules of the fit
For the Drude-Lorentz sum the f-sum is (π/2) Σ A_j and
P_eff = Σ A_j/(ħω_j)² (super::drude; the derivation there is ours, by
residues, with a numerical cross-check), against the numerical sums of the
data table over its tabulated range (super::sum_rules).
Structs§
- Mermin
Fit - The result of a fit: parameters, residuals and the sum rules. See the module docs.
- Mermin
FitOptions - Settings of
fit_mermin_oscillators.
Enums§
- FitWeighting
- How the residuals of the tabulated points are weighted in the fit.
Constants§
- MAX_
OSCILLATORS - Largest number of oscillators accepted.
Functions§
- fit_
mermin_ oscillators - Fit a sum of Mermin oscillators to
elf(see the module docs).