Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stabilize KPM #318

Merged
merged 20 commits into from
Sep 20, 2024
Merged

Stabilize KPM #318

merged 20 commits into from
Sep 20, 2024

Conversation

kbarros
Copy link
Member

@kbarros kbarros commented Sep 16, 2024

The new interface automatically selects the polynomial order according to the specified error tolerance. If tol is too high, some ringing will become visible. This is a sign that tol must be lowered.

In spite of the name "kernel polynomial method" (KPM), this implementation does not employ a Jackson kernel. Instead, we use simple truncation of the Chebyshev series (i.e., the "Dirichlet kernel"). For purposes of approximating relatively smooth functions, this simple truncation provides accuracy that improves exponentially with the number of polynomials, M ~ -log(tol).

The finite temperature Bose occupation factor has been removed for now because I haven't been able to find a good regularization strategy. At $T=0$, the Bose occupation factor becomes a step function at $\omega = 0$, and this is straightforward to regularize as a sigmoid (tanh) function. There is special logic to select a broadening width $\sigma$ that balances between (a) Capturing the large intensity near an ordering wavevector (see the new tutorial 09), but (b) not sacrificing too much accuracy in the truncated Chebyshev approximation to a step function (see the bottom of test_kpm.jl). A reasonable heuristic seems to be that $\sigma$ can decrease like 1 / sqrt(-log(tol)) whereas the true KPM resolution for decreases like 1/M ~ -1 / log(tol). In this way, decreasing tol improves all types of accuracy, including "ringing" artifacts from the step function, while still allowing the step function to be very sharp.

Also in this PR: Broadening kernels now keep track of additional information: the FWHM, the integral function, and a human-readable name. The line broadening integral is now used in intensities_static for SWT calculations.

@kbarros kbarros merged commit 6c5d991 into main Sep 20, 2024
4 checks passed
@kbarros kbarros deleted the kpm branch September 20, 2024 16:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant