Skip to content

Automatic differentiation for density functional theory in Julia.

License

Notifications You must be signed in to change notification settings

niklasschmitz/DifferentiableDFTK

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 

Repository files navigation

DifferentiableDFTK

Automatic differentiation for density functional theory in Julia.

This project is part of Google Summer of Code 2021. https://summerofcode.withgoogle.com/projects/#6407471502983168

Student: Niklas Schmitz
Mentors: Michael Herbst, Antoine Levitt, Dhairya Gandhi, Keno Fischer

Pull requests

DFTK.jl

Main Project Goal: Hellmann-Feynman stresses via ForwardDiff
JuliaMolSim/DFTK.jl#443

Main PR implementing the needed infrastructure for ForwardDiff compatibility:
(merged) Hellmann-Feynman stresses via ForwardDiff and custom rules #476
JuliaMolSim/DFTK.jl#476

Follow-up PRs:
(merged) Extend ForwardDiff fallback for SVector norm to handle multiple partials #488
JuliaMolSim/DFTK.jl#488

(merged) Improve _apply_plan type stability #494
JuliaMolSim/DFTK.jl#494

How to use: To the end user, the new feature of calculating stresses of a converged solution can now be accessed by calling stresses = compute_stresses(scfres). For a complete example, see the testcases in https://github.com/JuliaMolSim/DFTK.jl/blob/master/test/stresses.jl.

Other stretch goals:

(draft) ForwardDiff example of implicit differentiation beyond the Hellman-Feynman theorem, to calculate a dipole moment.
JuliaMolSim/DFTK.jl#520

(draft) Hellmann-Feynman derivatives using ChainRules and Zygote #519
JuliaMolSim/DFTK.jl#519

ChainRules.jl

(merged) Add nondiff rules for one ones zero zeros #465
JuliaDiff/ChainRules.jl#465

(merged) (Fix #446) Widen _mulsubtrans!! type signature #447
JuliaDiff/ChainRules.jl#447

Snippets

Issues

NLSolve.jl: Anderson instability example #273 JuliaNLSolvers/NLsolve.jl#273

Workarounds

ForwardDiff

  • AbstractFFT rules (based on mcabbotts draft JuliaDiff/ForwardDiff.jl#495, fixed some bugs & perf penalties; should ideally be upstreamed)
  • norm of SVec at zero: custom rule to comply with chainrules convention (and consistency with norm(Vector(x))) otherwise very pleasant overall and easy to debug

About

Automatic differentiation for density functional theory in Julia.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages