feat(xc): add SCANL meta-GGA functional with FD Laplacian kernel#7533
Open
dyzheng wants to merge 7 commits into
Open
feat(xc): add SCANL meta-GGA functional with FD Laplacian kernel#7533dyzheng wants to merge 7 commits into
dyzheng wants to merge 7 commits into
Conversation
Collaborator
Author
4 tasks
dyzheng
force-pushed
the
feat/scanl-laplacian-support
branch
from
July 21, 2026 09:15
7cf3f3a to
c97319e
Compare
Implement Laplacian-dependent XC functional support enabling the SCANL (SCAN + Laplacian) meta-GGA functional. Key changes: - Register SCANL functional name with runtime user warning - Add laplacian_rho() for single-FFT spectral Laplacian computation - Pass correct lapl_rho to tau_xc/tau_xc_spin (was wrongly using grho) - Add vlapl output from tau_xc/tau_xc_spin - Implement FD Laplacian kernel for vlapl potential to avoid |G|^2 amplification that causes SCF divergence (following dyzheng PR deepmodeling#7286) - Add vlapl stress contribution via density Hessian in G-space - Guard vlapl processing when functional doesn't depend on Laplacian - Fix SCAN unit test (pass lapl_rho=0.0, vlapl=0.0) - Update test CMakeLists with required source files and link libraries Si2 FCC stress FD validation: SCANL 1.1% error, SCAN 0.0% error. Metallic Al error is pre-existing k-point convergence issue.
…er functions - Remove SCANL_IMPLEMENTATION.md documentation - Extract add_vlapl_stress_contribution() in xc_grad.cpp from gradcorr() - Extract process_vlapl_potential() in libxc_pot.cpp from v_xc_meta() - Fix hse_omega parameter passing for develop branch compatibility
…tion - Add detailed mathematical formulas and explanations for: * add_vlapl_stress_contribution() in xc_grad.cpp * process_vlapl_potential() in libxc_pot.cpp * tau_xc/tau_xc_spin wrappers in libxc_abacus.h * cal_lapl/cal_lapl_fd/cal_rho_hessian in libxc_tools.cpp * laplacian_rho() in xc_functional.h * SCANL registration in xc_functional.cpp - Document FD Laplacian kernel formula and rationale - Add notes about convergence warnings for metallic systems - Add development notes about caching vlapl values for performance
Pass hybrid_alpha and hse_omega as parameters to add_vlapl_stress_contribution instead of accessing GlobalC::exx_info directly, reducing cross-layer global dependency usage and fixing the agent governance check failure.
dyzheng
force-pushed
the
feat/scanl-laplacian-support
branch
from
July 21, 2026 12:54
8da32be to
f89d3c9
Compare
…ests Bug fixes: - libxc_mgga_wrap: add hybrid alpha scaling for vlapl in tau_xc/tau_xc_spin - xc_grad: replace hardcoded func_type check with XC_FLAGS_NEEDS_LAPLACIAN flag to support future Laplacian-dependent meta-GGA functionals generically Efficiency: - libxc_tools: add cal_gdr_and_lapl() to share real2recip FFT between gradient and Laplacian computation (one FFT saved per spin channel) - libxc_pot: use cal_gdr_and_lapl in v_xc_meta instead of separate cal_gdr + cal_lapl calls New features: - libxc_setup: add generic XC_FLAGS_NEEDS_LAPLACIAN warning for all Laplacian-dependent functionals, not just SCANL Tests: - test_xc6.cpp: SCANL Laplacian sensitivity test with libxc reference values (MGGA_X_SCANL, MGGA_C_SCANL, tau_xc wrapper) - test_xc7.cpp: analytical Laplacian tests for laplacian_rho() (zero input, imaginary rhog, linearity, single plane wave) - Updated test CMakeLists.txt with new test targets
The previous commit (XC_FLAGS_NEEDS_LAPLACIAN) incorrectly replaced 'func_type == 3 || func_type == 5' with 'need_laplacian' in the stress path of gradcorr(). This caused SCAN (func_type=3, need_laplacian=false) to call gcxc_libxc instead of tau_xc, losing the tau-dependent v2xc and making the GGA stress contribution zero. Fix: use func_type check for selecting tau_xc vs gcxc_libxc (all mGGA functionals need tau_xc), and need_laplacian only for Laplacian computation and vlapl stress contribution. SCAN PW stress FD: error reduced from 41.3% to 0.45%.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Implement Laplacian-dependent XC functional support enabling the SCANL (SCAN + Laplacian) meta-GGA functional. Key changes:
Si2 FCC stress FD validation: SCANL 1.1% error, SCAN 0.0% error. Metallic Al error is pre-existing k-point convergence issue.
Reminder
Linked Issue
Fix #...
Unit Tests and/or Case Tests for my changes
What's changed?
Any changes of core modules? (ignore if not applicable)