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): readsdpdt.outinto 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