Added functionality for analyzing dielectric function

This MR introduces support for computing the dielectric function from dpdt.out files produced by qNEP GPUMD simulations.

New public API

  • calorine.gpumd.read_dpdt(fname): reads dpdt.out into a DataFrame (time in ps, polarization components in eÅ/fs)
  • calorine.tools.get_dielectric_function(dt, dpdt, volume, temperature, ...): computes \epsilon_2(\omega) via ACF + Fourier transform; optional Gaussian apodization window (t_sigma)
  • calorine.tools.apply_kramers_kronig(df, method='vectorized'|'fft'): adds \epsilon_1(\omega) to the DataFrame via the Kramers-Kronig relation; exact trapezoid rule (default) or \mathcal{O}(n \log n) FFT-based Hilbert transform

Other changes

  • No external dependencies (scipy, dynasor, numba removed); uses only NumPy and ASE units
  • Tutorial notebook with BaTiO_3 data at 100/331/450 K, including KK accuracy and performance comparisons
  • Test suite covering all new public functions (21 tests)
Edited by Paul Erhart

Merge request reports

Loading